2013-10-23 598 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度。 希望这会有所帮助..