Pythonのpygameを使ってフットステップ錯視を作ろうとしていて、このサイトの方々の力を借りて自分なりに完成させたのですが、移動する箱がかくかくしていて錯覚に見えませんでした。ネットで調べてみると同じ完成形でコードが全く違うものがありました。そちらは移動する箱がスムーズに描かれていました。ここで質問なのですが、自分のコードはどうしてかくかくしているのか。また、ネットに書かれたコードの29~34文目、46~52文目は何を表しているか教えていただけませんか。def drewが箱のサイズ、def updateがループだと予想しました。以下上が私が作成したコード、下が参照にしたコードです。
Python
1import pygame 2from pygame.locals import * 3import sys 4# Define some colors 5くろ= (0, 0, 0) 6WHITE = (255, 255, 255) 7GREEN = (0, 255, 0) 8あか = (255, 0, 0) 9BLUE=(0,0,255) 10きいろ=(255,255,0) 11はいいろ=(128,128,128) 12pygame.init() 13size=(1300,700) 14rect_x=50 15rect_y=50 16rect_change_x=50 17screen=pygame.display.set_mode(size) 18pygame.display.set_caption("はじめてのPygame") 19screen.fill(WHITE) 20 21 22for j in range(50000000): 23 #画面全体を白くする 24 screen.fill(WHITE) 25 pygame.draw.rect(screen, あか, [rect_x, 50,100,50]) 26 27 # 黒のストライプの描画 28 for i in range(0,1500,100): 29 pygame.draw.polygon(screen, くろ, [[50+i,50], [100+i,50], [100+i,300],[50+i,300]], 0) 30 31 #赤い矩形の描画 32 pygame.draw.rect(screen, あか, [rect_x, 200,100,50]) 33 pygame.draw.rect(screen, あか, [rect_x, 400,100,50]) 34 35 36 #赤い矩形の移動 37 rect_x += rect_change_x 38 39 #画面描画 40 pygame.display.flip() 41 42 #待機 43 pygame.time.delay(700) 44 for event in pygame.event.get(): 45 if event.type == QUIT: # 閉じるボタンが押されたら終了 46 pygame.quit() # Pygameの終了(画面閉じられる) 47 sys.exit() #pygame.quit()だけでもいいが正常に終了するために書く 48pygame.quit()
Python
1#coding:utf-8 2#optical illusion 3 4import pygame 5from pygame.locals import * 6import sys 7 8 9# Define some colors 10WHITE = (255, 255, 255) 11BLACK = (0, 0, 0) 12RED = (255, 0, 0) 13GREEN = (0, 255, 0) 14BLUE = (0, 0, 255) 15YELLOW = (255, 255, 0) 16CYAN = (0, 255, 255) 17MAGENTA = (255, 0, 255) 18 19class Box: 20 def __init__(self, screen, x, y, w, h, vx, vy, col): 21 self.screen = screen 22 self.x = x 23 self.y = y 24 self.w = w 25 self.h = h 26 self.vx = vx 27 self.vy = vy 28 self.col = col 29 def draw(self): 30 vertexes = [self.x, self.y, self.w, self.h] 31 pygame.draw.rect(self.screen, self.col, vertexes) 32 def update(self): 33 self.x += self.vx 34 self.y += self.vy 35class Boxes: 36 boxes = [] 37 def __init__(self, screen): 38 self.screen = screen 39 y = 50 40 w = 50 41 h = 250 42 for d in range(1, 1000, 100): 43 x = 100 + d 44 self.boxes.append( Box(screen, x, y, w, h, 0, 0, BLACK) ); 45 46 def draw(self): 47 for box in self.boxes: 48 box.draw(); 49 50 def update(self): 51 for box in self.boxes: 52 box.update(); 53 54 55def main(): 56 pygame.init() 57 size = (1000, 500) 58 screen = pygame.display.set_mode(size) 59 pygame.display.set_caption("optical illusion") 60 box = Box(screen, 50, 50, 100, 50, 0.1, 0.0, RED) 61 box2 = Box(screen, 50, 350, 100, 50, 0.1, 0.0, RED) 62 pillars = Boxes(screen) 63 while(True): 64 screen.fill(WHITE) 65 box.draw() 66 box2.draw() 67 pillars.draw() 68 pygame.display.update() 69 box.update() 70 box2.update() 71 pillars.update() 72 for event in pygame.event.get(): 73 if event.type == QUIT: 74 pygame.quit() 75 sys.exit() 76 77 78if __name__ == "__main__": 79 main()
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。