2017-02-06 7 views
-2

私はゲームの開始を構築するために使用されるテスタープログラムを持っています。あなたのスプライトを画面上の画面の端にバウンスさせる方法を教えてください。

私は画面のスプライトからバウンス効果を作成するはずのif文の速度属性に問題がありますが、正しい組み合わせを得ることができません。これについては、良いやりとりのために取り組んできたことがありませんでした。どんな助けもありがとう。

もう一つの注意点として、else ifメソッドにはgetWidthとgetHeightという属性があり、これは画面の高さと幅を取得することになっています。しかし、もしそうであればわかりません。必要に応じてそのクラスを添付することができます。しかし、私は私の画面のエッジのこの "バウンス"効果を作成しようとしている方法を追加します。

public void checkScreenEdge(Sprite s){ 
    if (s.getX() > getWidth()){ 

    } 
    else if (s.getX() + s.getWidth() >= getWidth()); 
    { 

    } 

    if (s.getY() > getHeight()) { 

    } 
    else if (s.getY() + s.getHeight() >= getHeight()) 
    { 

    } 
} 
+0

'x <0 || x + width> width'がより適切でしょうか?それで、あなたは 'xVelocity * = -1'と反対の方向に速度を変更できますか? – MadProgrammer

+0

あなたは、毎秒いくつかの定義済みのレートでメソッドを呼び出すことを願っています。 –

+0

@Abhijith:リアルタイムスライスを計算するのが常にベストです。 –

答えて

1

あなたが移動している方向を決定するDELTAXとdeltaY移動値(または速度値)を使用している場合は、単に適切な位置に負またはその逆に正の値を変更します。たとえば:

if (s.getX() <= 0) { 
    s.setDeltaX(-s.getDeltaX()); 
} 

あなたがスプライトを危険にさらす縁で「閉じ込められた」されている:

if (s.getX() <= 0) { 
    s.setDeltaX(Math.abs(s.getDeltaX()); 
} else if (s.getX() + s.getWidth() >= MAX) { 
    s.setDeltaX(-Math.abs(s.getDeltaX()); 
} 

私はあなたがこれをしなかった場合ので、それは、直接スワップDELTAX値ではなく、絶対値を使用することが重要だと感じていますオーバシュートのためデルタが繰り返しフリップされる。

+0

> = Maxと言うと、これはどういう意味ですか?どのような価値の最大値? –

+0

@CaptainCode:これは、あなたが決定し定義することです - あなたのモデルの右の境界です。 –

+0

あなたはそれを画面のサイズに割り当てることはできませんか?私は自動的に画面のサイズを含むクラスを持っているので、私はこの権利を使うことができますか?または、新しい変数 –

関連する問題