簡體   English   中英

Python 2.7-Pygame-move_ip()太細

[英]Python 2.7 - Pygame - move_ip() too granular

我正在練習在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參數,它們是Clock類的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)所在的self.rect.move_ip(x, y) 但是,這兩種方法都會產生相同的結果。

使用精確的float值來跟蹤自己的位置,然后不要將Rect逐幀遞增地移動,而只是將它們放置在每幀其正確的位置(整數化)。 這樣,您就不會受到每個幀舍入誤差之和的困擾,而是在任何給定時間只涉及一次舍入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM