🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

585閲覧

Python Pygame フットステップ錯視

sakazuki0111

総合スコア7

Pygame

Pygameは、ビデオゲームの製作用に設計されたクロスプラットフォームのPythonモジュールセットです。Pythonでコンピューターグラフィックスと音声を扱うためのライブラリが含まれています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/12/21 03:46

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()

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自分のコードはどうしてかくかくしているのか。

pygame.time.delay

指定した時間(ミリ秒単位)の間プログラムを停止します。

#待機 pygame.time.delay(700)

700ms 毎にまとまった単位で移動する実装になっています。


ネットに書かれたコードの29~34文目、46~52文目は何を表しているか

  • update で 移動を加えた座標情報の更新
  • draw で描画の更新

__init__ の引数のうち vx, vy が移動に関するパラメータで
赤い短形、黒い短形がありますが、
黒い方は移動に関するパラメータは0(動かない)で描画されています。

より細かい間隔で表示を更新している為、滑らかなアニメーションに見えます。

投稿2020/06/19 19:09

teamikl

総合スコア8717

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問