我正在尝试在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.x
和self.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