今回はウィンドウに表示した戦車の画像を、プレイヤーキャラとして動かしてみたいと思います。今までのコードとは大きく変わりました。自分なりに解析してみたいと思います。
import pygame pygame.init() screen = pygame.display.set_mode((800,600)) screen.fill((255,255,255)) img = pygame.image.load("player.png") #戦車の画像を読み込み 以下プレイヤーとする playerX,playerY = 290,280 #プレイヤーの初期X座標とY座標 ,で区切れば1行でOK playerX_change = 0 #プレイヤーのX座標を扱う変数を定義 playerY_change = 0 #プレイヤーのY座標を扱う変数を定義 def player(x,y): screen.blit(img,(x,y)) #defで関数を定義し、 player(x,y)のxとyをscreen.blit(img,(x,y))のxとyに代入する #以下player(x,y):と入力するだけでscreen.blit(img,(x,y))まで実行される running = True while running: for event in pygame.event.get(): #今まではfor key ~というようにkeyをオブジェクト名にしていたが、キー入力で.keyがあることが判明したのでeventに変更 if event.type == pygame.QUIT: running = False if event.type == pygame.KEYDOWN: #キーが押されているとき if event.key == pygame.K_RIGHT: #ここで.keyが登場 右キーが押されたとき playerX_change = 1 #プレイヤーのX座標を+1 if event.key == pygame.K_LEFT: #左キーが押されているとき playerX_change = -1 #プレイヤーのX座標を-1 if event.key == pygame.K_UP: #上キーが押されているとき playerY_change = -1 #プレイヤーのY座標を-1 if event.key == pygame.K_DOWN: #下キーが押されているとき playerY_change = 1 #プレイヤーのY座標を+1 if event.type == pygame.KEYUP: #キーが押されていないとき(離す) if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT: playerX_change = 0 #プレイヤーの左か右キーが押されていないとき、プレイヤーのX座標の変化を0にする if event.key == pygame.K_UP or event.key == pygame.K_DOWN: playerY_change = 0 #プレイヤーの上か下キーが押されていないとき、プレイヤーのY座標の変化を0にする playerX += playerX_change #プレイヤーのX座標に、上のキー入力状態を反映させる(1か-1) playerY += playerY_change #プレイヤーのY座標に、上のキー入力状態を反映させる(1か-1) #+=はa+bという意味 player(playerX,playerY) #上の方で定義したplayer()関数にプレイヤーのX座標とY座標にplayerX,playerYを反映。プレイヤーが表示される pygame.display.update()
実行すると
youtu.be
なんと上下左右斜めに自分で動かすことのできるプレイヤーキャラが表示されました!だけどプレイヤーキャラの残像が黒く残る…?これはどういうことかというと、ウィンドウのデフォルトの色は黒なので、プレイヤーキャラが表示されたところは黒く残るわけですね。ではどうするかというと
while running: screen.fill((255,255,255)) #追加 #ここにウィンドウの色を白にするコードを追加。whileの先頭に持ってくることによって、プレイヤーキャラが表示される前に、黒い部分を白で上書できる for event in pygame.event.get():
これを追加したコードを実行
youtu.be
感動😂 自分の意志で自在に動くプレイヤーキャラが誕生しました!まだ動かすだけでその他は何もできないけど、徐々にできることを増やしていけたらいいなーと思います。初代ドラクエのカニ歩きみたいになってるし笑、まずは移動に合わせてキャラの向きを変えたりアニメーションさせたりとか、スピードを変えたりとか、画面外から出ないようにするとか…。今回はここまで!