首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >当按下两个键时,箭头键不对角移动pygame.surface

当按下两个键时,箭头键不对角移动pygame.surface
EN

Stack Overflow用户
提问于 2018-03-28 17:18:45
回答 2查看 465关注 0票数 2

我在MacBook Air上使用Pycharm上的python3。我以前也做过,目前正在做一些基本的游戏,使用游戏。由于某些原因,当我按住向下键向下,然后按右键,它会将玩家斜移到右边(这就是我喜欢的)。但是,当我向右移动,然后同时按up键时,它不会做这种行为。它不仅限于右/下键,它只是如果我移动球员向下/向上,同时按左/右,然后它移动对角线。然而,如果我移动球员的右/左,同时按上/下,那么它不会对角移动。

我认为这与pycharm、pygame或python处理键盘输入的方式有关,但我不确定。还有其他人有这些问题/烦恼吗?

代码语言:javascript
运行
复制
    def key_pressed(self):

        key_pressed = pygame.key.get_pressed()

        if key_pressed[pygame.K_RIGHT]:
            self.vx = 500

        elif key_pressed[pygame.K_LEFT]:
            self.vx = -500

        elif key_pressed[pygame.K_UP]:
            self.vy = -500

        elif key_pressed[pygame.K_DOWN]:
            self.vy = 500

        else:
            self.vy = 0
            self.vx = 0



    def update(self):
        self.rect.x += self.vx * self.game.dt
        self.rect.y += self.vy * self.game.dt


        self.key_pressed()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-03 17:48:09

我认为上面发布的答案几乎让你明白了--我认为问题是,只有在没有按键的情况下,你才会重置vx和vy值。这似乎不太理想,但有两个独立的区块可以解决问题。在上面发布的代码中,只有在最后一个" if“为真的情况下,才会激活”posted“。

代码语言:javascript
运行
复制
def key_pressed(self):

    key_pressed = pygame.key.get_pressed()

    if key_pressed[pygame.K_RIGHT] or key_pressed[pygame.K_LEFT]:
        if key_pressed[pygame.K_RIGHT]:
            self.vx = 500
        if key_pressed[pygame.K_LEFT]:
            self.vx = -500
    else:
        self.vx = 0

    if key_pressed[pygame.K_UP] or key_pressed[pygame.K_DOWN]:
        if key_pressed[pygame.K_DOWN]:
            self.vy = 500
        if key_pressed[pygame.K_UP]:
            self.vy = -500
    else:
        self.vy = 0

试试这个,让我们知道它是否修复了你所看到的行为。

票数 1
EN

Stack Overflow用户

发布于 2018-04-03 17:17:04

尝试用if语句替换elif语句,这样它就不会跳过任何键按:

代码语言:javascript
运行
复制
    if key_pressed[pygame.K_RIGHT]:
        self.vx = 500

    if key_pressed[pygame.K_LEFT]:
        self.vx = -500

    if key_pressed[pygame.K_UP]:
        self.vy = -500

    if key_pressed[pygame.K_DOWN]:
        self.vy = 500

    else:
        self.vy = 0
        self.vx = 0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49540581

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档