繁体   English   中英

pygame 中的按键无法正确移动精灵,奇怪的行为 [重复]

Keys do not move sprite properly in pygame, strange behavior [duplicate]

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

所以我一直在用 pygame 进行实验,我可以绘制我的精灵,但是当我按下 WASD 时,我必须多次按下它们,而精灵所做的只是向下和左右移动,没有真正的控制

我更新 sprite 类中的self.rect ,当你按下一个键时,它会清除屏幕,并且应该用不同的 xy 位置重新绘制 sprite。

这是代码:

import pygame
pygame.init()

screen = pygame.display.set_mode((750, 750))

BLACK = (0, 0, 0)
WHITE = (255,255,255)
RED = (255,0,0)

class Sprite(pygame.sprite.Sprite):
    def __init__(self, pos):
        super(Sprite, self).__init__()
        self.image = demon
        self.rect = self.image.get_rect(center = pos)
    
    def update(self, moveX, moveY):
        self.rect.x += moveX
        self.rect.y += moveY
        
        

        
        
all_sprites_list = pygame.sprite.Group()

demon = pygame.image.load("C:/programming/doomman/cacodemon.png").convert_alpha()

x = 300
y = 300

my_sprite = Sprite((x, y))
all_sprites_list.add(my_sprite)
clock = pygame.time.Clock()
pygame.display.set_caption("Demon Dance")
carryOn = True
        
while carryOn == True:
    keys = pygame.key.get_pressed()
    
    for event in pygame.event.get():
            if event.type==pygame.QUIT:
                carryOn=False
            elif event.type == pygame.KEYDOWN:
                screen.fill(BLACK)
                if keys[pygame.K_w]:
                    my_sprite.update(50, 0)
                if keys[pygame.K_s]:
                    my_sprite.update(-50, 0)
                if keys[pygame.K_d]:
                    my_sprite.update(0, 50)
                if keys[pygame.K_a]:
                    my_sprite.update(0, 50)
    
    
    pygame.display.flip()
    clock.tick(60)
    all_sprites_list.draw(screen)
1 个回复

pygame.key.get_pressed()返回一个包含所有键盘按钮状态的列表。 这不是为了获取键盘事件的键。 按下的键可以从pygame.event.Event对象的key属性中pygame.event.Event

while carryOn == True:
    # [...]
    
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            carryOn=False
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_w:
                my_sprite.update(50, 0)
            if event.key == pygame.K_s:
                my_sprite.update(-50, 0)
            if event.key == pygame.K_d:
                my_sprite.update(0, 50)
            if event.key == pygame.K_a:
                my_sprite.update(0, 50)

    # [...]

键盘事件(请参阅pygame.event模块)仅在键状态更改时发生一次。 每次按下一个键时, KEYDOWN事件都会发生一次。 KEYUP每次释放键时发生一次。 将键盘事件用于单个操作或逐步移动。

pygame.key.get_pressed()返回一个包含所有键盘按钮状态的列表。 这不是为了获取键盘事件的键。 按下的键可以从pygame.event.Event对象的key属性中pygame.event.Event

但是,您必须在应用程序循环而不是事件循环中评估键:

while carryOn == True:
    for event in pygame.event.get():
        if event.type==pygame.QUIT:
            carryOn=False
            
    keys = pygame.key.get_pressed()
    if keys[pygame.K_w]:
        my_sprite.update(50, 0)
    if keys[pygame.K_s]:
        my_sprite.update(-50, 0)
    if keys[pygame.K_d]:
        my_sprite.update(0, 50)
    if keys[pygame.K_a]:
        my_sprite.update(0, 50)

    # [...]
5 pygame库-精灵无法在屏幕上正确渲染

当我在基于pygame的游戏中使用精灵时,它们似乎无法正常工作-如您在屏幕截图中所见,它们的形状不正确,并且上部有一些怪异的变形。 黑色方块的顶部变形。 中心的精灵必须是类似箭头的形状。 加载图像所涉及的一段代码(直接从pygame的教程中复制粘贴): 我一直在Mac OS ...

6 精灵无法正确显示在屏幕上-pygame

我在游戏编程课上,应该做一个游戏,其中有些精灵从您捕获或避免的屏幕顶部掉落下来。 现在,我正在努力使物体掉落,而它们最初却在工作,但后来我搞砸了,因为现在当它们掉落在屏幕上时,它们似乎会不规则地消失。 我试图更改代码中的各种内容以解决问题,但我已经坚持了一段时间。 我可以肯定的是,我弄 ...

7 如何在pygame的类中不断移动精灵

我知道使用get_pressed方法来测试是否已按下任何按钮,但是我无法使其在类函数中正常工作。 每次按下按钮时,子画面仍会移动6个空格,并且不会流畅地移动。 ...

8 如何向上移动pygame精灵

我正在使用 pygame 并按照此处的教程进行操作。 我有以下代码: 该 是我自己的贡献。 我也有我的精灵课: 该 是我自己的贡献。 之前我的贡献是: 当我按下向上箭头时,我的精灵向右移动。 使用现在的代码,我收到错误消息: 当我按下向上箭头时,如何解决这个问题并使我的精灵向 ...

9 在PyGame中移动精灵

我目前正在做一个学校项目,但是我一直想让我的精灵移动。 我的错误消息是说我在Mario.handle_keys()中缺少1个必需的位置参数:'self'。 这是我的主要代码: 而我的精灵: 提前致谢。 我感谢任何建议! ...

10 在pygame中移动精灵

我正在尝试在pygame中移动精灵,我尝试从youtube视频中改编它,并制作了一个基于图块的游戏,不幸的是它已有1-2年的历史了,因此模块和python之间的版本可能已更改一些代码的功能 这是代码(这是唯一相关的部分,我还有两个其他的主文件和设置文件,它们都可以正常工作): 代码 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM