2017-05-04 21 views
0

私は単純な宇宙ゲームを作っていて、自分の船(xwingImg)を自由に動かしたいと思っています。 a、d、sキーを押すと、船が回転する必要があります。私はこれがうまくいくと思った:pg.transform.rotate(xwingImg、90)、何も変わっていないようだ。pygameで画像を回転させるにはどうすればいいですか?

import sys 
import random 
import pygame as pg 


pg.init() 
screen = pg.display.set_mode((1280, 800)) 
display_width = 1280 
display_height= 800 

black= (0,0,0) 
white= (255,255,255) 
red = (255,0,0) 
blue_violet = (138,43,226) 

xwingImg = pg.image.load('X-Wing.bmp').convert() 
tieImg= pg.image.load('tiefighter.png').convert() 
space=pg.image.load('space.jpg').convert() 

BG_image = pg.image.load('space.jpg').convert() 


def main(): 
    clock = pg.time.Clock() 
    # Surfaces/images have a `get_rect` method which 
    # returns a rect with the dimensions of the image. 
    player_rect = xwingImg.get_rect() 
    player_rect.center = (640,400) 
    change_x = 0 
    change_y = 0 
    enemies = [] 
    spawn_counter = 30 


    done = False 

    while not done: 
     for event in pg.event.get(): 
      if event.type == pg.QUIT: 
       done = True 
      if event.type == pg.KEYDOWN: 
       if event.key == pg.K_d: 
        pg.transform.rotate(xwingImg, 90) 
        change_x = 5 
       if event.key == pg.K_w: 
        change_y = -5 
       if event.key == pg.K_s: 
        change_y= 5 
       if event.key == pg.K_a: 
        change_x = -5 
      if event.type == pg.KEYUP: 
       if event.key == pg.K_d and change_x > 0: 
        change_x = 0 
       if event.key == pg.K_a and change_x < 0: 
        change_x = 0 
       if event.key == pg.K_w and change_y<0: 
        change_y=0 
       if event.key == pg.K_s and change_y>0: 
        change_y=0 



     # Spawn enemies if counter <= 0 then reset it. 
     spawn_counter -= 1 
     if spawn_counter <= 0: 
      # Append an enemy rect. You can pass the position directly as an argument. 
      enemies.append(tieImg.get_rect(topleft=(random.randrange(1280), -800))) 
      spawn_counter = 30 


     # Update player_rect and enemies. 
     player_rect.x += change_x 
     player_rect.y += change_y 
     for enemy_rect in enemies: 
      enemy_rect.y += 5 
      # Collision detection with pygame.Rect.colliderect. 
      if player_rect.colliderect(enemy_rect): 
       print('Collision!') 

     # Draw everything. 
     screen.blit(BG_image, (0,0)) 
     for enemy_rect in enemies: 
      screen.blit(tieImg, enemy_rect) 
     screen.blit(xwingImg, player_rect) 

     if player_rect.x >display_width: 
      player_rect.x = 0 
     if player_rect.x < 0: 
      player_rect.x= 1280 
     if player_rect.y>display_height: 
      player_rect.y = 0 
     if player_rect.y < 0: 
      player_rect.y= 800 


     pg.display.flip() 
     clock.tick(40) 


if __name__ == '__main__': 
    main() 
    pg.quit() 
    sys.exit() 
+0

どのような形状を使用していますか? – depperm

+1

[中央の周りの画像を回転させるにはどうすればいいですか?](http://stackoverflow.com/questions/4183208/how-do-i-rotate-an-image-around-its-center-using) -pygame) –

+0

xwingの長方形の画像 – joe

答えて

1

pygame.transform.rotate()は回転したオブジェクトを含む新しいサーフェスを返します。返されたSurfaceは使用していません。あなたは回転を繰り返す必要があるので、返されたSurfaceを矩形に収める必要があるので、イメージを繰り返し回転させ続けたいと思います。

回転(面角度) - >表面

未濾過反時計回り。 angle引数は度を表し、任意の浮動小数点値とすることができます。負の角度の量は時計回りに回転します。

90度ずつ回転させない限り、イメージは新しいサイズを保持するために大きく埋められます。イメージにピクセルalphasがある場合、パディングされた領域は透明になります。さもなければ、pygameはSurfaceのcolorkeyまたはtopleftピクセル値と一致する色を選択します。

私は回転イベントが検出されたときに画像を回転させるべき角度を追跡して、その角度を変更します。その後、あなたの描画ステップでblitその角度で画像を回転させます。

player_image = pg.transform.rotate(xwingImg, angle) 
player_rect = player_image.get_rect() 
player_rect.center = player_pos 
screen.blit(player_image, player_rect) 
関連する問題