2017-09-10 13 views
1

私はpygameでいくつかの基本的な衝突の検出をしようとしている、これまで私はそれをセットアップしているので、私のプレーヤーがスプライトに当たったかどうかを知りたいのですが、どうすればそれをスプライト内の別の場所に移動させることができますか?どのように私は彼らが完全に移動することを止めることなく、プレイヤーの動きを制限するには

どのように設定したのですか?衝突を検出したかどうかを検出する機能があり、動きを完全に無効にするグローバル変数が変更されました。

+0

あなたの質問は少し不明です。望ましい行動を正確に記述してください。あなたのコードを表示してください(最小限で完全で検証可能な例)(https://stackoverflow.com/help/mcve))。 – skrx

答えて

0

スプライトには、xVelyVelの変数が必要です。これらの変数は、フレームごとにxyの変数を変更します。スプライトは、それぞれxyの変数で画面に描画されます。

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を使うことです。

これが役に立った!

関連する問題