2012-01-20 23 views
1

ちょっと矩形を中心に回転しようとしています。矩形を回転しようとすると、同時に左に移動します。誰にどのようにこれを修正するためのアイデアがありますか?あなたは、pygameのの内部には回転長方形で動作しないことを認識してんですが、 -Python/Pygameの矩形回転

def rotatePoint(self, angle, point, origin): 
    sinT = sin(radians(angle)) 
    cosT = cos(radians(angle)) 
    return (origin[0] + (cosT * (point[0] - origin[0]) - sinT * (point[1] - origin[1])), 
        origin[1] + (sinT * (point[0] - origin[0]) + cosT * (point[1] - origin[1]))) 

def rotateRect(self, degrees): 
    center = (self.collideRect.centerx, self.collideRect.centery) 
    self.collideRect.topleft = self.rotatePoint(degrees, self.collideRect.topleft, center) 
    self.collideRect.topright = self.rotatePoint(degrees, self.collideRect.topright, center) 
    self.collideRect.bottomleft = self.rotatePoint(degrees, self.collideRect.bottomleft, center) 
    self.collideRect.bottomright = self.rotatePoint(degrees, self.collideRect.bottomright, center) 

答えて

1

回転コードは、罰金になりそう?

新しい四角形のコーナーで自分自身を書いたコードがない限り、これは、サーフェスエッジに平行な辺を持つ新しい矩形を定義することです。元の矩形は、回転すると刻印できません。元のサイズと同じサイズの長方形。回転後に "self.collideRect"オブジェクトを渡すPygame関数は、これを行うだけです:矩形をサーフェスに揃えて扱います。 と同じように扱います。

あなたのコードでは、回転した四角形の中で物を確認したり描画したりする必要がある場合は、すべての計算を回転前の位置で実行し、何かを表示するときに座標回転を実行するだけですあなたは欲しい。つまり、レンダリングの最後のステップで適用されるグローバル座標変換で作業します。

+1

だから、私は長方形の中の衝突があるかどうかを確認したい場合は、私はのコピーを作成する必要がありますということであると言っているのか長方形を作成し、それを毎回コピーから回転させますか?申し訳ありませんが、私はこれを理解するのに苦労しています。 – mramazingguy

+1

将来的にこの問題に遭遇する人のために、彼が言っていることは、Pygameのエンジンは回転した四角形を理解していないということです。通常の回転していない長方形以外のものでは衝突検出を行うことはできません。 – atomictom

0

多分これはあなたを助けることができる:

#load image 
image1 = pygame.image.load(file) 
#get width and height of unrotated image 
width1,height1 = image1.get_size() 
#rotate image 
image2 = pygame.transform.rotate(image1, angle) 
#get width,height of rotated image 
width2,height2 = image2.get_size() 
#blit rotated image (positon - difference of width or height /2) 
display.blit(image2,[round(x - (width1 - width2)/2),round(y - (height1 - height2)/2)]) 
関連する問題