前提・実現したいこと
Pygameで「経過時間(t)」を基に、無数の画像を関数で動かしたい。
※出現時は止まっているが、だんだん加速する。など
例としては、無数の画像を弾(fire)として
fire[0] ⇒ blit('img.png',(x,y))
fire[1] ⇒ blit('img.png',(x,y))
…
と生成・描画するが、
それぞれの初期位置を(a,b)として
x = a + t
y = b - t*math.sin(rad)
など、
※Max100個程度を生成し順に動くようにしたい
発生している問題・エラーメッセージ
上記のような描画をしようとしても t += 1 としてみると、実行時をt=0としてしまう ⇒後半に生成したものは、すでにtに大きな数字が入ってしまい失敗。 1個のオブジェクトはできるが、無数にあり増減する部分が理解しておらず 実現できないせいかもしれない
該当のソースコード
※必要と思われる部分だけ記載します。
本やWEBからいろいろ真似していて…
def moveと、それっぽい記事から採用するも、わからなくなったところです
Python3.6
1class Obj(pygame.sprite.Sprite): 2 def __init__(self ,x ,y ,t): 3 pygame.sprite.Sprite.__init__(self) 4 self.rect.centerx = x 5 self.rect.centery = y 6class fire(Obj): 7 def move(self): 8 x = start_x + t 9 y = start_y + t 10 11while going: 12screen.blit(BackgroundImg,(0,0)) 13 allgroup.draw(screen) 14 pygame.display.update() 15 myclock = pygame.time.Clock() 16 myclock.tick(60) 17#=============中略==================== 18#以下、入力があったらfireの生成する部分。多少書き換えてます。 19 if sw == 'on' : 20 start_x = 30 21 start_y = 400 22 t = 0 23 newobj = fire(start_x ,start_y ,t) 24 allgroup.add(newobj) 25#===================================
試したこと
1:
self.timeってなんだろう…本などにはあるが、tとは別物?
2:
rect.move_ipで、オブジェクトの直線運動はできた。
曲線運動や螺旋運動を想定するため、
できれば(x,y)の関数として描画(表現)したい。
⇒rect.move_ip以外で書きたい
補足情報(FW/ツールのバージョンなど)
クラスオブジェクトとかスプライトグループに関して理解が浅いので
そもそも考え方が違ったり、簡単に解決する内容なら指摘ください!
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。