我希望我在pygame中的角色不会离开屏幕



我正在尝试在pygame中制作一个简单的平台游戏,如果玩家向右走,他们将返回窗口的乞求。 但是,我的代码不起作用,播放器能够离开屏幕并且不会返回开始。 这是我到目前为止的代码:

class Player(pg.sprite.Sprite):
def __init__(self):
pg.sprite.Sprite.__init__(self)
self.image = pg.Surface((30,40))
self.image.fill(green)
self.rect = self.image.get_rect()
self.rect.center = (width /2, height /2)
self.speed_x = 0
self.speed_y = 0
self.pos = 480
def update(self):
self.speed_x = 0
player_input = pg.key.get_pressed()
if player_input[pg.K_LEFT]:
self.speed_x = -5
if player_input[pg.K_RIGHT]:
self.speed_x = 5
self.rect.x += self.speed_x
self.rect.y += self.speed_y
# wrap around the sides of the screen
if self.pos > 480:
self.pos  = 0
if self.pos < 0:
self.pos = -480,0

你必须改变self.rect.xself.rect.y而不是self.pos

实现所需目标的最简单方法是使用%(模(运算符。%(模(运算符产生第一个参数除以第二个参数的余数。请参阅二进制算术运算。

例如:

class Player(pg.sprite.Sprite):
# [...]
def update(self):
# [...]
self.rect.x += self.speed_x
self.rect.y += self.speed_y
rect.centerx = rect.centerx % width
rect.centery = rect.centery % height

当您移动播放器时,您会更改self.rect.x,但不会更改self.pos,因此当您离开屏幕时,self.pos仍将= 480,因此您要检查self.rect.x是否不在屏幕上,然后重置它。

# wrap around the sides of the screen
if self.rect.x > 480:
self.rect.x  = 0
if self.rect.x < 0:
self.rect.x = 480

最新更新