当前位置: 首页 > 知识库问答 >
问题:

pygame中的持续运动

康秋月
2023-03-14

这是我的第一个pygame代码不多,非常简单。当我想移动我的球员时,它可以工作,但我希望移动平稳。比如当我按下左键时,我希望它向左移动。现在我每次都要按左键,这样玩家就会向左移动。你有什么建议吗?

import pygame, sys

pygame.init()

window_size = ( 400, 400 )

white = ( 255, 255, 255 )

class Player():
  image = pygame.image.load( 'foo.png')
  rect = image.get_rect()

player = Player()

screen = pygame.display.set_mode( window_size )

done = False

while not done:
  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      sys.exit()

    if event.type == pygame.KEYDOWN:
      if event.key == pygame.K_LEFT:
        move = (-10, 0 )
        player.rect = player.rect.move(move)
      if event.key == pygame.K_RIGHT:
        move = ( 10, 0 )
        player.rect = player.rect.move(move)
      if event.key == pygame.K_UP:
        move = ( 0,-10 )
        player.rect = player.rect.move(move)
      if event.key == pygame.K_DOWN:
        move = ( 0, 10 )
        player.rect = player.rect.move(move)

  screen.fill( white )
  screen.blit( player.image, player.rect )

  pygame.display.flip()

编辑我的Aarons方法答案:

while not done:

  for event in pygame.event.get():
    if event.type == pygame.QUIT:
      sys.exit()

  pressed = pygame.key.get_pressed()
  if pressed[pygame.K_LEFT]:
    move = ( 2, 0 )
    player.rect = player.rect.move(move)
  if pressed[pygame.K_RIGHT]:
    move = ( 2, 0 )
    player.rect = player.rect.move(move)
  if pressed[pygame.K_UP]:
    move = ( 0,-2 )
    player.rect = player.rect.move(move)
  if pressed[pygame.K_DOWN]:
    move = ( 0, 2 )
    player.rect = player.rect.move(move)

共有2个答案

元修然
2023-03-14

看看树懒对类似问题的回答。你似乎有两种潜在的方法,要么利用set_repeat,要么get_pressed。

重复设置

当键盘重复被启用时,按下的键将生成多个pygame。键控事件。延迟是第一次重复pygame之前的毫秒数。将发送KEYDOWN。在那之后是另一场比赛。KEYDOWN将每隔毫秒发送一次。如果未传递任何参数,则禁用键重复。来源

像这样的东西可以完成这项工作:

# set_repeat(delay, interval)
pygame.key.set_repeat(1, 10) 
# A delay of 0 disables the repeat.
# The lower the interval, the faster the movement would be.

催促

返回表示键盘上每个键状态的布尔值序列。使用键常量值为数组编制索引。真值表示该按钮已按下。使用此功能获取按钮列表不是处理用户输入文本的正确方法。您无法知道按键的顺序,在两次调用pygame之间,快速按键可能完全不被注意到。钥匙按下按钮()。也无法将这些按下的键转换为完全转换的字符值。看这个游戏。此功能的事件队列上的KEYDOWN事件。来源

像这样的东西应该非常适合您的代码:

pressed = pygame.key.get_pressed()
if pygame.K_LEFT in pressed:
   # move left
if pygame.K_RIGHT in pressed:
   # move right

解决方案实现到@ZedsWhatShesay的代码中,还添加了PEP-8格式:

import pygame
import sys

pygame.init()

window_size = (400, 400)

white = (255, 255, 255)


class Player():
    image = pygame.image.load('foo.png')
    rect = image.get_rect()

player = Player()

screen = pygame.display.set_mode(window_size)

done = False

while not done:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

    pressed = pygame.key.get_pressed()
    if pygame.K_LEFT in pressed:
        move = (-10, 0)
    player.rect = player.rect.move(move)
    if pygame.K_RIGHT in pressed:
        move = (10, 0)
    player.rect = player.rect.move(move)
    if pygame.K_UP in pressed:
        move = (0, -10)
    player.rect = player.rect.move(move)
    if pygame.K_DOWN in pressed:
        move = (0, 10)
万俟亦
2023-03-14

您可以跟踪KEYUPKEYDOWN事件,然后为正在跟踪的每个按键存储按下状态。

现在,不再是在用户按下按键时移动播放器,而是测试按键的状态,看看它是否被按下,如果被按下,将移动应用于播放器。

作为一个简化的例子:

pressed_keys = {
    'left': false,
    ...define other keys...
}

while not done:

    # Check for key events
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_LEFT:
                pressed_keys['left'] = True
            ...check other keys...

        if event.type == pygame.KEYUP:
            if event.key == pygame.K_LEFT:
                pressed_keys['left'] = False
            ...check other keys...

   # Move the player
   if pressed_keys['left']:
       ...move player left...
 类似资料:
  • 本文向大家介绍jquery animate动画持续运动的实例,包括了jquery animate动画持续运动的实例的使用技巧和注意事项,需要的朋友参考一下 如下所示: 如上,想要实现左右持续运动,则把该动画封装为一个函数,再反复调用就好。 以上这篇jquery animate动画持续运动的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 它们还提供了一个警告:如果您能够持续部署到测试系统,有时也会使用术语“持续部署”。 这一切让我很困惑。任何更详细的解释(或附带一个例子)都是赞赏的!

  • 我不知道如何在iOS7中设置NSLayoutConstraint动画持续时间。这是我的代码:

  • 我是一个对使用python相当陌生的爱好者。自从我安装 Pygame 以来已经一周了,经过多次尝试,当我运行任何程序时,我仍然无法启动或打开 Pygame 窗口。我已经看了尽可能多的教程,并阅读了我能找到的关于类似问题的所有文章。我已经复制了在其他网站上找到的所有解决方案,但问题仍然存在。然而,更奇怪的是,我正在使用的IDE(Pycharm)很少输出错误消息,而是简单地继续运行,但从未启动Pyga

  • translated_page: https://github.com/PX4/Devguide/blob/master/en/test_and_ci/continous_integration.md translated_sha: 95b39d747851dd01c1fe5d36b24e59ec865e323e PX4 Continuous Integration PX4 builds and

  • 如果没有指定,但给定mp4视频的内容长度和索引范围,如何确定MPD文件中的片段持续时间?例如,如下所示的mpd文件(http://dash.edgesuite.net/akamai/streamroot/050714/Spring_4Ktest.mpd): 非常感谢你! 闪耀