2013-10-23 607 views
0

你會如何改變Pygame中旋轉圖像/矩形的方向?應用正面和負面的度數值,但似乎只能在整個窗口中旋轉一個方向。有沒有辦法確保旋轉方向的改變?改變旋轉方向Pygame


也許每5秒改變一次旋轉圖像的旋轉角度,或者如果能夠在擊中X或Y軸時改變旋轉方向。 我在下面添加了一些代碼。

只要我指定速度並且有位置子句,它就可以按照我想要的方式切換移動方向,只需要rect.move_ip即可。不幸的是輪換不是那樣的。我在這裏添加角度以確保它旋轉,但無論我嘗試什麼,我都無法否定旋轉。


def rotate_image(self): #rotate image 
    orig_rect = self.image.get_rect() 
    rot_image = pygame.transform.rotate(self.image, self.angle) 
    rot_rect = orig_rect.copy() 
    rot_rect.center = rot_image.get_rect().center 
    rot_image = rot_image.subsurface(rot_rect).copy() 
    return rot_image 

def render(self): 
    self.screen.fill(self.bg_color) 
    self.rect.move_ip(0,5)     #Y axis movement at 5 px per frame 
    self.angle += 5    #add 5 anglewhen the rect has not hit one of the window 
    self.angle %= 360 

    if self.rect.left < 0 or self.rect.right > self.width:   
     self.speed[0] = -self.speed[0] 
     self.angle = -self.angle   #tried to invert the angle 
     self.angle -= 5     #trying to negate the angle rotation 
     self.angle %= 360 

    self.screen.blit(self.rotate_image(),self.rect) 
    pygame.display.flip() 

我真的想知道如何反轉一個圖像的旋轉。你可以提供你自己的例子。

+1

pygame.transform.rotate()的[documentation](http://www.pygame.org/docs/ref/transform.html#pygame.transform.rotate)明確指出「未經過濾的逆時針旋轉,角度參數表示度數,可以是任何浮點值,負角度量將順時針旋轉」...所以你說這是不正確的? – martineau

+0

您不需要以不同方式處理順時針和逆時針旋轉。假設你想每次迭代旋轉圖像'self.delta_angle'度。使用'self.angle =(self.angle + self.delta_angle)%360',接着是'rot_image = pygame.transform.rotate(self.image,self.angle)'。如果self.delta_angle> 0,則旋轉將逆時針旋轉,如果self.delta_angle <0,則旋轉將爲順時針。爲了反轉旋轉方向,只需使'self.delta_angle = -self.delta_angle'。 – martineau

回答

1

據我所知,有使用

pygame.transform.rotate(surface, angle) 

旋轉圖像的只有一條路可以查看官方文檔

http://www.pygame.org/docs/ref/transform.html 這裏是示例代碼: -

screen = pygame.display.set_mode((640,480)) 
    surf = pygame.image.load("/home/image.jpeg").convert() 
    while True: 
     newsurf = pygame.transform.rotate(surf, -90) 
     screen.blit(newsurf, (100,100)) 
     pygame.display.flip() 
     time.sleep(2) 

此代碼將繼續按順時針方向每隔2秒旋轉圖像90度。 希望這會有所幫助..