フローティングアニメーションはゆっくりとオブジェクト上向きpygameのを移動します

楽しん:

私は場所でホバリングするはずのオブジェクトのスクリプトを書いているが、その代わりに、それはゆっくりと上方に移動します。コードをHERESに:

(初期化関数)

self.vy = 0
self.dy = 0.1

(Update関数)

 self.vy += self.dy
 if self.vy > 1 or self.vy < -1:
     self.dy *= -1
 self.imgRect.centery += self.vy
宿泊施設:

pygame.Rectドキュメント

Rectオブジェクトの座標は、すべての整数であり、

私はこれを調査し、あなたがしようとRECTのフロートに(この場合centeryで)座標を設定するとき、それはそのフロートと用途以下の最も近い整数をとることがわかりました。

私はアクションでそれを見るために、この小さなテストを手早く:

import pygame
pygame.init()
window = pygame.display.set_mode((500,500), pygame.SCALED)

rect = pygame.Rect(250,250,50,50)

dy = 0.1
vy = 0
intended_centery = 275
while True:
    pygame.time.delay(1000)

    vy+= dy
    if vy > 1 or vy < -1:
        dy *= -1
    rect.centery+= vy
    intended_centery += vy
    print("\nWhat you want:{}\nWhat you get: {}".format(intended_centery,rect.centery))

そして、出力が示すように、はい、intended_centeryは、あなたが望むもののように動作していることが、rect.centeryは(そう上方に移動する)は減少し続けて

あなたはフロートを渡すときにcenteryを増加しようとしているときのRectは、フロート以下の整数をとるので、これが起こっている理由は、それが継続的にVY以下のint型をとる(下へ移動)、です。VY> = 1になるまで、rect.centery + = Vyが0.1以降、0を追加していく予定 - 便利なものは何も起こりませんので、以下の0.9のintが0です。

あなたはそれをバックアップして移動しているときには、VY <0(-0.9 -0.1)と、それがされる...フロートの下にint型を取る-1!


結果は、あなたが効果的にだけ上に移動し続けるとしたいホバー運動を取得するために戻って下に移動していないということですので、

「_使用しているため、このようなRect.centeryラウンドの山車があることを理由int型を int型に山車を変換するために_」。あなたがテストを実行したとき、私はそれもこのためDeprecationWarningを印刷しました。これはあなたの問題を引き起こし、正確なものです


私の知る限り、正確な所望の効果を取得する方法はありません。

しかしあなたが近いあなたが欲しいものを得るために、Pythonの組み込みラウンド()メソッドを使用することができ、しかしcenteryはどの私が理由でフロートを使用してから、あなたはその精度をしたいと仮定していますので、あなたのために動作しない場合があります1件の増加と減少します。しかし、それは「仕事」のように、それは同じように上下に移動されますされます

とにかく、これは助けを願って(ちなみに私は、Python 3でテストし、すべてのものでした)

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=24979&siteId=1