Python2.7 Pygame move_ip()太大了

2024-06-28 19:41:45 发布

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

我在pygame中练习制作android应用程序,并决定做你的经典泡泡射击游戏。我遇到了一个问题,虽然球员发射的炮弹不够精确。在

def move (self, time_passed):

    x = (math.sin(self.angle) * self.speed) * time_passed
    y = (math.cos(self.angle) * self.speed) * time_passed
    c = self.rect.center
    self.rect.center = (c[0]+x, c[1]+y)

def update(self, screen, time_passed):

    if self.launched:
        if not self.mpos:
            self.mpos = pygame.mouse.get_pos()
            diffx, diffy = (self.mpos[0]-self.rect.center[0],
                            self.mpos[1]-self.rect.center[1])
            self.angle = math.atan2(diffx, diffy)
        self.move(time_passed)

为了清晰起见,screentime_passed参数是从主循环传递的,它们是时钟类的tick(60)/1000.0的显示和返回值。在

如果我从move()打印x和y的值,它非常精确:x: 1.0017224084 y: -21.9771825359,或者类似的值,这取决于鼠标的位置。然而,pygame或moveüip似乎只适用于整数。我可以在1.00000001和1.9999999之间单击,球将射入精确的位置,即1(参考x坐标)。这不利于我的比赛。有没有办法让我的物体精确移动?在

编辑:我意识到我贴错了代码。self.rect.center = (c[0]+x, c[1]+y)self.rect.move_ip(x, y)应该在的地方。然而,两种方法的结果是一样的。在


Tags: rectselfmoveiftimedefmathscreen
1条回答
网友
1楼 · 发布于 2024-06-28 19:41:45

使用精确的float值跟踪您自己的位置,然后不要在每一帧之间递增地移动您的Rect,只需将它们放置在每一帧的适当(整数化)位置。这样,您就不会受到每帧舍入误差之和的影响,而是在任何给定时间只涉及一个舍入。在

相关问题 更多 >