2017-09-25 50 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) 
相關問題