2017-09-25 1 views
1

イメージの中心位置を維持したままイメージを回転しようとしています。私は別の質問からの指示に従ってみましたが、私が直面しているのとまったく同じ問題はないようです。位置を維持しながら画像を回転させるにはどうすればいいですか?

画像を回転すると、画像の中心から回転しますが、中心の位置が変わっているように見え、回転中に画像が上下に跳ね返ったように見えます。

はここにコードされています

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))を呼び出し、あなたはブリット位置として使用することができますRECTを取得します。 center=(img_x, img_y)引数は、rectの中心を目的の座標に設定します。

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) 
関連する問題