0

我一直在学习如何使用 pygame 并遇到了一个让你的角色跳跃的教程。代码不完全相同,但我不明白为什么它不应该工作。

我想知道False如果他要问,为什么他最初会考虑跳跃:

if not (p1jump):
    if keys[pygame.K_SPACE]:
        p1jump = True

这让我很困惑,因为p1jump最初是错误的。所以你基本上是在问:如果 p1jump 为真,并且按下了 SPACE,那么将 p1jump 设置为真。

这是整个班级以防万一:

class Player1():
    def __init__(self,x,y):
        self.x = x
        self.y = y
        self.height = 25
        self.width = 25
        self.speed = 5
    def draw(self,r,g,b):
        pygame.draw.rect(win,(r,g,b),(self.x,self.y, self.width ,self.height))
    def movement(self):
        p1jump = False
        jumpcount = False
        keys = pygame.key.get_pressed()

        if keys[pygame.K_a] and self.x > self.speed:
            self.x -= self.speed
        elif keys[pygame.K_d] and self.x < (w - self.width):
            self.x += self.speed

        if not(p1jump):
            if keys[pygame.K_SPACE]:
                p1jump = True
        else:
            if jumpcount >= -10:
                self.y -= (jumpcount **2) *0.5
                jumpcount = 1

            else:
                p1jump = False
                jumpcount = 10

另外,如果你们有更好的方法来编写跳转代码,请告诉我!谢谢!

4

2 回答 2

1

您的第一个代码段是正确的。但是,在movement您每次调用它时设置p1jump的方法中。False我猜你希望它一直存在,True直到玩家着陆。因此,请改为将该变量设为属性。

class Player:

    def __init__(self,x,y):
        # ... stuff
        self.jump = False

    def movement(self):
        # ... stuff

        if not self.jump and keys[pygame.K_SPACE]:
            self.jump = True
        else:
            if jumpcount >= -10:
                self.y -= (jumpcount **2) *0.5
                jumpcount = 1
            else:
                self.jump = False
                jumpcount = 10
于 2019-05-03T23:47:18.607 回答
0

所以你基本上是在问:如果 p1jump 为真,并且按下了 SPACE,那么将 p1jump 设置为真。

不完全not (p1jump):是,True如果 p1jump 是False. not是 Python 中的逆运算符。

if not (p1jump)可以重写,if p1jump == False好像这对你来说更清楚。

我希望这会有所帮助。

于 2019-05-03T23:41:20.803 回答