私はpygameでいくつかの基本的な衝突の検出をしようとしている、これまで私はそれをセットアップしているので、私のプレーヤーがスプライトに当たったかどうかを知りたいのですが、どうすればそれをスプライト内の別の場所に移動させることができますか?どのように私は彼らが完全に移動することを止めることなく、プレイヤーの動きを制限するには
どのように設定したのですか?衝突を検出したかどうかを検出する機能があり、動きを完全に無効にするグローバル変数が変更されました。
私はpygameでいくつかの基本的な衝突の検出をしようとしている、これまで私はそれをセットアップしているので、私のプレーヤーがスプライトに当たったかどうかを知りたいのですが、どうすればそれをスプライト内の別の場所に移動させることができますか?どのように私は彼らが完全に移動することを止めることなく、プレイヤーの動きを制限するには
どのように設定したのですか?衝突を検出したかどうかを検出する機能があり、動きを完全に無効にするグローバル変数が変更されました。
スプライトには、xVel
とyVel
の変数が必要です。これらの変数は、フレームごとにx
とy
の変数を変更します。スプライトは、それぞれx
とy
の変数で画面に描画されます。
class Sprite(pygame.sprite.Sprite):
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.xVel = 0
self.yVel = 0
self.x = 100
self.y = 100
# Continue method
def update(self):
self.x += xVel
self.y += yVel
# Continue method
次に、スプライトの衝突処理コードの外観を示します。
if sprite1.yVel == 0 and sprite2.yVel == 0:
# This is when the sprites are not travelling up or down the y axis
sprite1.xVel = -sprite1.xVel
sprite2.xVel = -sprite2.xVel
if sprite1.xVel == 0 and sprite2.xVel == 0:
# This is when the sprites are not travelling left or right on the x
# axis
sprite1.yVel = -sprite1.yVel
sprite2.yVel = -sprite2.yVel
このコードは4方向移動用です。 xVel
変数を-xVel
に設定すると、逆方向に移動します。同じことが変数yVel
にも当てはまります。オブジェクトを使用している限り、グローバル変数を変更する必要はありません。
また、プレーヤーが左右に移動しているときは、yVel == 0
です。プレーヤーが上下に移動している場合は、xVel == 0
。
スプライトの移動速度は、フレームレートによって異なることに注意してください。これを修正する方法は、別の質問の概念であるdeltatimeを使うことです。
これが役に立った!
あなたの質問は少し不明です。望ましい行動を正確に記述してください。あなたのコードを表示してください(最小限で完全で検証可能な例)(https://stackoverflow.com/help/mcve))。 – skrx