Pygameではrect.moveにfloatを使用できませんが、必要です

Aug 18 2020

私は最近のバージョンを再作成しました月面着陸私の着陸船の移動(:(あなたが知っている、古いレトロゲーム)のPython 3とpygameのにrect.move重力のため)、Y軸に沿って各フレームを\。

問題:
1 m / sに達するまで、rect.moveに追加されたy値は1未満のfloatです。pygameはfloatが好きではないため、切り上げるために使用int()する必要があります。
Tkinterを使用した以前のバージョンでは、着陸船のy座標は次のようになりました。

0.01
0.02
...
0.765
1.03
1.45
...

pygameではそれは

0
0
0
...
1
1
1
2
2
...

動きが流動的ではないので、これは本当に迷惑です。誰かがこれを解決する方法を知っていますか?同様に、フロートをrect.move?に入力します。前もって感謝します!

回答

4 Rabbid76 Aug 18 2020 at 19:29

pygame.Rect画面上の領域を表すことになっているため、pygame.Rectオブジェクトは統合データのみを格納できます。

Rectオブジェクトの座標はすべて整数です。[...]

浮動小数点の精度でオブジェクトの位置を保存する場合は、オブジェクトの場所をそれぞれ別の変数の属性に保存し、オブジェクトを同期する必要がありpygame.Rectます。round座標とそれを.topleft長方形の位置(例)に割り当てます。

x, y = # floating point coordinates
rect.topleft = round(x), round(y)
Dragonwarrior Aug 18 2020 at 19:29

私はそれを自分でテストしていないので、これが機能しない場合は申し訳ありませんが、pythonは数値を文字列として取っているので、代わりに int(variable)

やったほうがいい float(variable)