前提
初めての質問です。
ウインドウ内にキャラクターを表示させ、キー操作に応じて動かすプログラムを作成中です。
キャラクター表示、キー操作に応じて動くところまではできていますが、
前の画像がずっと残ったままで、動いた軌跡がそのまま画像として残り、
残像みたいになってしまいます。
実現したいこと
残像が残らないよう画面を更新したい(キャラクターを動かしたい)。
発生している問題・エラーメッセージ
エラーにはならないです。
該当のソースコード
python
1import pygame, time 2import sys 3from pygame.locals import * 4 5window = pygame.display.set_mode((800, 600)) 6 7def main(): 8 quit = False 9 pygame.init() 10 window.fill((pygame.Color("BLACK"))) 11 12 y_ground = window.get_height() - 100 13 14 x = 145 15 y = y_ground 16 17 player_stand = pygame.image.load("assets/p1_stand.png").convert_alpha() 18 player_stand = pygame.transform.scale(player_stand, (50, 70)) 19 20 player_right = [ 21 22 pygame.image.load("assets//p1_walk/PNG//p1_walk01.png").convert_alpha(), 23 pygame.image.load("assets//p1_walk/PNG//p1_walk02.png").convert_alpha(), 24 pygame.image.load("assets//p1_walk/PNG//p1_walk03.png").convert_alpha(), 25 pygame.image.load("assets//p1_walk/PNG//p1_walk04.png").convert_alpha(), 26 pygame.image.load("assets//p1_walk/PNG//p1_walk05.png").convert_alpha(), 27 pygame.image.load("assets//p1_walk/PNG//p1_walk06.png").convert_alpha(), 28 pygame.image.load("assets//p1_walk/PNG//p1_walk07.png").convert_alpha(), 29 pygame.image.load("assets//p1_walk/PNG//p1_walk08.png").convert_alpha(), 30 pygame.image.load("assets//p1_walk/PNG//p1_walk09.png").convert_alpha(), 31 pygame.image.load("assets//p1_walk/PNG//p1_walk10.png").convert_alpha(), 32 pygame.image.load("assets//p1_walk/PNG//p1_walk11.png").convert_alpha() 33 ] 34 35 player_right = [pygame.transform.scale(image,(50,70)) 36 for image in player_right] 37 38 player_left = [pygame.transform.flip(image, True, False) 39 for image in player_right ] 40 41 player_jump = pygame.image.load("assets/p1_jump.png").convert_alpha() 42 player_jump = pygame.transform.scale(player_jump,(50,70)) 43 44 player_jump_frame = 0 45 46 player_landing = pygame.image.load("assets/p1_duck.png").convert_alpha() 47 player_landing = pygame.transform.scale(player_landing,(50,70)) 48 49 player_right_frame = 0 50 player_left_frame = 0 51 52 keyspressed = pygame.key.get_pressed() 53 54 window.blit(player_stand,(x,y)) 55 56 57 while not quit: 58 key = pygame.key.get_pressed() 59 60 if key[pygame.K_RIGHT]: 61 x = x + 50 62 direction = "right" 63 64 elif(key[pygame.K_LEFT]): 65 x = x - 50 66 direction = "left" 67 68 elif(key[pygame.K_UP]): 69 if y == y_ground: 70 player_jump_frame = 10 71 72 elif(key[pygame.K_DOWN]): 73 y = y + 10 74 direction = "landing" 75 76 elif sum(keyspressed) == 0: 77 direction = "standing" 78 79 if player_jump_frame > 0: 80 y = y - 10 81 direction = "jump" 82 player_jump_frame = player_jump_frame - 1 83 84 elif y < y_ground: 85 direction = "landing" 86 y = y + 10 87 88 89 if direction == "right": 90 window.blit(player_right[player_right_frame], (x,y)) 91 player_right_frame = (player_right_frame + 1) % len(player_right) 92 93 elif direction == "left": 94 window.blit(player_left[player_left_frame], (x,y)) 95 player_left_frame = (player_left_frame + 1) % len(player_left) 96 97 elif direction == "jump": 98 window.blit(player_jump, (x,y)) 99 100 elif direction == "landing": 101 window.blit(player_landing, (x,y)) 102 103 clock.tick(15) 104 pygame.display.update() 105 106 for event in pygame.event.get(): 107 if event.type == QUIT: 108 quit = True 109 110 111if __name__ == "__main__": 112 width, height = 800, 600 113 pygame.init() 114 pygame.mixer.init() 115 window = pygame.display.set_mode((width, height)) 116 clock = pygame.time.Clock() 117 main() 118 pygame.quit()
試したこと
pygame.display.update()
の位置を変えるなどを試みましたが、うまくいきませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー