我的游戏精灵可以左右移动,但我不能让它停在屏幕的最后

2024-09-28 15:14:43 发布

您现在位置:Python中文网/ 问答频道 /正文

主程序:

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)

相关精灵的功能:

^{pr2}$

问题是“cangoright”和“cangoleft”标志似乎不能正常工作。当精灵超过屏幕边缘时(左边是0,右边是1024),标志应该设置为false,因此update函数中的ifs应该返回false,但是这不会发生。在


Tags: keyrighteventfalseif标志typeupdate
3条回答

国际单项体育联合会的立场有点偏离。在

if self.rect.right <= 1024:  #Shouldn't this be < 1024 and not <=
    self.cangoright = True 

同样适用于:

^{pr2}$

看起来你走得太远了,所以把你的精灵放在屏幕边缘。在

希望这有帮助。在

我相信问题的一部分是你只更新了left中的self.rect。尝试同时更新left和{},看看这是否会改变事情。在

更重要的是,这段代码有点难读,而且你要做的事情也太复杂了。在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

This answer有一些示例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)

球。移动()

^{pr2}$

相关问题 更多 >