0
def rotate(self):
    #Save the original rect center
    self.saved_center=self.rect.center

    #Rotates a saved image every time to maintain quality
    self.image=pygame.transform.rotate(self.saved_image, self.angle)

    #Make new rect center the old one
    self.rect.center=self.saved_center

    self.angle+=10

画像を回転すると、古い四角形の中心を保存し、回転した四角形の中心を古いものにするにもかかわらず、奇妙なシフトがあります。正方形の中心で回転させたい。

これは次のようになります: http://i.imgur.com/g6Os9.gif

4

2 に答える 2

2

新しいrectを間違って計算しているだけです。これを試して:

def rotate(self):
    self.image=pygame.transform.rotate(self.saved_image, self.angle)
    self.rect = self.image.get_rect(center=self.rect.center)
    self.angle+=10

これは、新しい長方形に元の中心を中心に配置するように指示します(中心はここでは変更されません。通過し続けるだけです)。

問題は、self.rectが適切に更新されていなかったことです。中心値を変更するだけでした。画像が拡大および縮小するため、画像が回転すると、四角形全体が変化します。したがって、必要なことは、毎回新しいrectを完全に設定することでした。

self.image.get_rect(center=self.rect.center)

これにより、指定された中心を中心に、新しいrectが計算されます。位置を計算する前に、中心が長方形に設定されます。したがって、あなたはあなたのポイントの周りに適切に集中しているrectを取得します。

于 2012-05-18T02:20:58.920 に答える
0

この問題がありました。私の方法には少し異なる目的がありますが、非常にうまく解決しました。

import pygame, math

def draw_sprite(self, sprite, x, y, rot):
    #'sprite' is the loaded image file.
    #'x' and 'y' are coordinates.
    #'rot' is rotation in radians.

    #Creates a new 'rotated_sprite' that is a rotated variant of 'sprite'
    #Also performs a radian-to-degrees conversion on 'rot'.
    rotated_sprite = pygame.transform.rotate(sprite, math.degrees(rot))

    #Creates a new 'rect' based on 'rotated_sprite'
    rect = rotated_sprite.get_rect()

    #Blits the rotated_sprite onto the screen with an offset from 'rect'
    self.screen.blit(rotated_sprite, (x-(rect.width/2), y-(rect.height/2)))
于 2013-11-02T14:23:08.933 に答える