2017-09-25 109 views
1

我试图旋转图像,同时保持其中心位置。我试过按照另一个问题的指示,但它似乎并没有与我面对的完全相同的问题。如何在保持其位置的同时在pygame中旋转图像?

当我旋转图像时,它从其中心旋转,但中心位置似乎改变,它看起来好像我的图像在旋转时上下反弹。

这里是代码:

import pygame 
import sys 
import math 

pygame.init() 

screen = pygame.display.set_mode((800,600)) 

img_load = pygame.image.load("img/test.png") 
img = pygame.transform.scale(img_load,(40,40)) 
bg = pygame.image.load("img/bgblack.png") 

img_x = 300 
img_y = 300 

while True: 

    for event in pygame.event.get(): 
     if event.type == pygame.QUIT: 
      sys.exit() 

    m_x,m_y = pygame.mouse.get_pos() 

    radians = math.atan2(m_y - img_y, m_x - img_x) 
    degrees = math.degrees(radians) 

    img_center = img.get_rect().center 
    rot_img = pygame.transform.rotate(img,-degrees) 
    rot_img.get_rect().center = img_center 

    screen.blit(bg,(0,0)) 
    screen.blit(rot_img,(img_x,img_y)) 

    pygame.display.update() 

你的帮助是极大的赞赏:)

+0

我还没有使用过pygame,但是通常你在游戏引擎中做的是这样的,首先将你的精灵转换到它的中心轴所在的位置,然后应用旋转,然后回到你想要的位置在屏幕上。例如,如果你想围绕精灵的中心旋转,首先你要将它移动一半宽度和高度,这样它的中心位于世界(0,0)。然后应用旋转,并翻译成位置。 – Michael

回答

2

只要打电话rect = rot_img.get_rect(center=(img_x, img_y)),你会得到一个矩形,你可以为块传送位置使用。 center=(img_x, img_y)参数将矩形的中心设置为所需的坐标。

m_x,m_y = pygame.mouse.get_pos() 

radians = math.atan2(m_y - img_y, m_x - img_x) 
degrees = math.degrees(radians) 

rot_img = pygame.transform.rotate(img, -degrees) 
rect = rot_img.get_rect(center=(img_x, img_y)) 

screen.blit(bg,(0,0)) 
screen.blit(rot_img, rect)