質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

Q&A

解決済

1回答

828閲覧

【Pygame】無数のオブジェクトを座標で描画&xy関数で動かしたい

ptk3

総合スコア27

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

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

0グッド

0クリップ

投稿2018/05/26 17:14

編集2018/05/26 17:16

前提・実現したいこと

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/ツールのバージョンなど)

クラスオブジェクトとかスプライトグループに関して理解が浅いので
そもそも考え方が違ったり、簡単に解決する内容なら指摘ください!

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

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

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

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

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

guest

回答1

0

ベストアンサー

出現時は止まっているが、だんだん加速する。など

同じ変数:tを見ているのが問題なので、
以下コードのようにインスタンス変数にしてみては。

Python

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 6 self.t = t 7 8class fire(Obj): 9 def move(self): 10 x = start_x + self.t 11 y = start_y + self.t 12 self.t += 1

投稿2018/05/28 10:59

編集2018/05/28 11:00
umyu

総合スコア5846

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問