2

私のアプリには、サーフェスビュー上を移動するオブジェクトが含まれています。加速度計を介して移動できます。プレイヤー オブジェクトの移動コードは次のとおりです。

if(x + mx*speed > 0 && x + mx*speed < GameView.WIDTH) {
        x += mx*speed;
    }
if(y+ my*speed > 0 && y+ my*speed < GameView.HEIGHT) {
        y+=my*speed;
    }

x と y はプレイヤーの座標です

mx はプレーヤーが加速度計から取得する値です。たとえば、左に傾けると mx は -2 になり、さらに傾けると mx は -4、-5、-6 などになります。 --> my は、 Y軸

速度は、より速い動きが必要なときに変更して遊ぶための変数です。

ご覧のとおり、プレイヤーがビューの内側にいる場合にのみ移動するように制限しようとしました。

ここで私の問題は次のとおりです。デバイスを集中的に右に傾けると、mx は 6 のような値になります。速度は 5 に設定されます。これは、プレイヤーの位置 + 6 * 5 がゲーム ビューよりも大きい場合、それ以上移動しないことを意味します。 . しかし、これにより、プレーヤーはビューの右側の前でピクセルを停止することになります...右に軽く傾けると、オブジェクトはビューの境界で完全に停止します...

画面の境界で動きを完全に止めるオブジェクトを実現するには、コードをどのように変更すればよいですか?

加速度計を多用した画像

この図では、円と下の境界線の間にいくつかのピクセルがあるため、円が下で完全に停止していないことがわかります。加速度計で少し戻ると、円は画面の下部に整列します。

画面下部

しかし今、私はゆっくりと移動しているときにしか画面の境界に到達できません。つまり、mx または my.

スクリーンショットでは、mY 値を確認できます。最初の写真では、my = ca. 8および2番目のca。6.

何か案は?

前もって感謝します

4

1 に答える 1

2

代わりに、値を境界線に制限してみてください

x = Math.max(Math.min(x + mx*speed, GameView.WIDTH), 0.0f));
y = Math.max(Math.min(y + my*speed, GameView.HEIGHT, 0.0f));
于 2014-02-13T18:57:52.527 に答える