主程序:
player = Player("player.png",[10,650])
players = pygame.sprite.Group()
players.add(player)
while True:
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_RIGHT:
player.goright()
if event.key == K_LEFT:
player.goleft()
if event.type == KEYUP:
if event.key == K_RIGHT:
player.cangoright = False
if event.key == K_LEFT:
player.cangoleft = False
players.update()
players.draw(SCREEN)
pygame.display.update()
clock.tick(FPS)
相关精灵的功能:
def update(self):
if self.cangoright:
self.rect.left += self.speed
if self.cangoleft:
self.rect.left -= self.speed
def goright(self):
if self.rect.right <= 1024:
self.cangoright = True
else:
self.cangoright = False
def goleft(self):
if self.rect.left >= 0:
self.cangoleft = True
else:
self.cangoleft = False
问题是“cangoright”和“cangoleft”标志似乎没有正常工作。当精灵超过屏幕边缘时(左侧为0,右侧为1024),标志应设置为false,因此更新函数中的ifs应返回false,但这不会发生。< / p>
答案 0 :(得分:2)
This answer有一些示例move
方法。也许看看他们的写作方式会有所帮助吗?
<强> Paddle.move()强>
def move(self, *, up=False, down=False):
if up or (not down and self.keys.up and
self.position.y - self.size.y > 0):
self.position -= Point(0, self.move_by)
if down or (not up and self.keys.down and
self.position.y + self.size.y < self.height):
self.position += Point(0, self.move_by)
<强> Ball.move()强>
def move(self):
self.position += self.velocity
self.bounce()
答案 1 :(得分:0)
我认为部分问题在于您只是在left
更新self.rect
。请尝试更新left
和right
,然后查看是否会更改内容。
更重要的是,这段代码有点难以阅读,而且你要做的事情太复杂了。通过检查update
函数中的屏幕边界而不是键事件处理程序,可能会更好地为您提供服务。实际上这是游戏物理的一部分,所以它应该可以挂在那里。
换句话说,使用事件循环来设置表示玩家对update
功能的意图的标志。使用update
函数根据事件循环设置的标志将游戏规则(物理等)应用于游戏状态。
也许是这样的?
while True:
...
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_RIGHT:
player.goright = True
if event.key == K_LEFT:
player.goleft = True
if event.type == KEYUP:
if event.key == K_RIGHT:
player.goright = False
if event.key == K_LEFT:
player.goleft = False
players.update()
players.draw(SCREEN)
pygame.display.update()
clock.tick(FPS)
def update(self):
if self.goright and self.speed < SPEED_MAX:
self.speed += ACCEL_INCREMENT
if self.goright and self.speed > -SPEED_MAX:
self.speed -= ACCEL_INCREMENT
new_left_pos = self.rect.left + self.speed
new_right_pos = self.rect.right + self.speed
if new_left_pos > 0 and new_right_pos < 1024:
self.rect.left += self.speed
self.rect.right += self.speed
答案 2 :(得分:0)
if语句略有偏离。
if self.rect.right <= 1024: #Shouldn't this be < 1024 and not <=
self.cangoright = True
同样的:
if self.rect.left >= 0: #Same thing here
self.cangoleft = True
看起来你走得很远,因此将你的精灵放在屏幕边缘。
希望这有帮助。