Pygame运动不一致

2024-04-25 09:27:02 发布

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

我正在用pygame做一个自上而下的益智游戏,我的动作非常灵活。当我同时按下一个键水平移动和一个键垂直移动时,角色只会在接触水平表面时移动。这是我的移动和碰撞代码:

def move(self, dx, dy):
    self.dx = dx
    self.dy = dy
    if self.dx != 0:
        self.move_single_axis(self.dx, 0)
    if self.dy != 0:
        self.move_single_axis(0, self.dy)

def move_single_axis(self, dx, dy):
    self.dx = dx
    self.dy = dy
    self.rect.x += self.dx
    self.rect.y += self.dy
    for wall in walls:
        if self.rect.colliderect(wall.rect):
            if self.dx > 0:
                self.rect.right = wall.rect.left
            if self.dx < 0:
                self.rect.left = wall.rect.right
            if self.dy > 0:
                self.rect.bottom = wall.rect.top
            if self.dy < 0:
                self.rect.top = wall.rect.bottom

def checkMovement(self):
    if self.paused == False:
        keys = pygame.key.get_pressed()
        if keys[pygame.K_d]:
            self.move(5, 0)
        elif keys[pygame.K_a]:
            self.move(-5, 0)
        elif keys[pygame.K_w]:
            self.move(0, -5)
        elif keys[pygame.K_s]:
            self.move(0, 5)

谢谢!你知道吗


Tags: rectselfrightmoveifdef水平keys
1条回答
网友
1楼 · 发布于 2024-04-25 09:27:02

我可以看到以下问题:

def checkMovement(self):
    if self.paused == False:
        keys = pygame.key.get_pressed()
        if keys[pygame.K_d]:
            self.move(5, 0)
        elif keys[pygame.K_a]:
            self.move(-5, 0)
        if keys[pygame.K_w]: # !!! CHANGE !!!
            self.move(0, -5)
        elif keys[pygame.K_s]:
            self.move(0, 5)

解决你的问题?你知道吗

我还将两个函数move\u single\u axis()和move()合并为一个函数。我不明白为什么两者都有意义。你知道吗

奇怪的是在你的代码中你是如何处理dx和dy的。你有一个类,你的函数在那里,那么当你有直接访问dx,dy的权限时,你把dx,dy传递给这些函数做什么呢自我.dx自我保护在调用此函数之前可以设置哪些值?你知道吗

为什么不这样做:

def checkMovement(self):
    if self.paused == False:
        keys = pygame.key.get_pressed()
        if keys[pygame.K_d]:
            self.dx = 5
        elif keys[pygame.K_a]:
            self.dx = -5
        if keys[pygame.K_w]: 
            self.dy = -5
        elif keys[pygame.K_s]:
            self.dy = 5
        move()

其中move()是:

def move(self):
    self.rect.x += self.dx
    self.rect.y += self.dy
    for wall in walls:
        if self.rect.colliderect(wall.rect):
            if self.dx > 0:
                self.rect.right = wall.rect.left
            if self.dx < 0:
                self.rect.left = wall.rect.right
            if self.dy > 0:
                self.rect.bottom = wall.rect.top
            if self.dy < 0:
                self.rect.top = wall.rect.bottom

相关问题 更多 >