2009-03-15 10 views
8

私は、夜間および週末のプロジェクトとして、Androidプラットフォーム用の最初のビデオゲームに取り組んでいます。ゲームのコントロールにTouchScreensを使用する

うまく来ていますが、私はコントロールの感覚に非常に不満です。

このゲームでは、オブジェクトを画面上の左右に移動します。画面の一番下には、指が置かれるべき場所である「タッチパッド」があります。

/-------------------------\ 
|       | 
|       | 
|       | 
|  Game Area   | 
|       | 
|       | 
|       | 
|       | 
|       | 
/-------------------------\ 
|       | 
|  Touch Area  | 
|       | 
\-------------------------/ 

は、私は現在、「MOVING_LEFT、MOVING_RIGHT、NOT_MOVING」を開催する状態変数を使用していますし、選手オブジェクトの位置、その変数に基づいて、各フレームを更新しています。

しかし、タッチスクリーン入力を読み取り、この状態変数を設定し、私のコードは、私はそれを微調整する方法に応じて、あまりにもsensative、またはあまりにもラグのどちらかである:

public void doTouch (MotionEvent e) { 
    int action = e.getAction(); 

    if (action == MotionEvent.ACTION_DOWN) { 
     this.mTouchX = (int)e.getX(); 
     this.mTouchY = (int)e.getY();   
    } 
    else if (action == MotionEvent.ACTION_MOVE) { 
     if ((int)e.getX() >= this.mTouchX) { 
      this.mTouchX = (int)e.getX(); 
      this.mTouchY = (int)e.getY(); 
      if (this.TouchRect.contains(this.mTouchX, this.mTouchY)) {    
       this.mTouchDirection = MOVING_RIGHT; 
      } 
     } 
     else if ((int)e.getX() <= this.mTouchX) { 
      this.mTouchX = (int)e.getX(); 
      this.mTouchY = (int)e.getY(); 
      if (this.TouchRect.contains(this.mTouchX, this.mTouchY)) {    
       this.mTouchDirection = MOVING_LEFT; 
      } 
     } 
     else { 
      this.mTouchDirection = NOT_MOVING; 
     }    
    } 
    else if (action == MotionEvent.ACTION_UP) { 
     this.mTouchDirection = NOT_MOVING; 
    }  
} 

アイデアはどんな動きがあるときということです、私はユーザーの指の以前の位置を確認し、次にどの方向にプレイヤーを移動するかを把握します。

これはあまりうまくいきません。ここには、タッチスクリーンで適切な操作を行う方法を理解し、助言を与えることができるいくつかのIPhone/Androidデベロッパーがいます。

+0

"あまりうまく動かない"、 "遅すぎる、またはあまりにも敏感"と定義できますか?これがどのように動作するかの説明は役に立ちます –

+0

私は指を10分の1インチ動かすことを意味し、プレーヤーは画面を横切っています。遅すぎるということは、プレイヤーを動かすために画面全体に指を動かさなければならないということですインチ。 :) – FlySwat

答えて

2

Windowsで「長方形をドラッグする」のようなものを試すことができます。何かの上にマウスボタンを押したままにすると、マウスがマウスの下の小さな領域の外側に移動するまでドラッグ操作を開始しません。クリックしている間に同じピクセルにカーソルを置くのは非常に難しいという理由があります。

したがって、が小さい整数の場合、最初の試行は(int)e.getX() >= this.mTouchX + DEAD_ZONEとなり、それ以外の場合も同様です。

しかし、これは同じストロークで回り込むことには関係しません。あなたは、右に曲がった後の最後の位置の左に現在の位置が少なくともDEAD_ZONEピクセルであるときに左に曲がることによってそれに対処することができます。

2

明らかな問題の1つは、最後のタッチからの時間を考慮していないことです。

-x/+x-y/+yのアナログの範囲でプレイヤーのタッチを希望の動きの表現として扱い、時間に基づいて実際の動作を実行することをお勧めします。

など。

objectPos += objectPos + (joyPos * timeDelta * maxSpeed); 

あなたのオブジェクトの最大速度は10msの-1で、プレイヤーの指が、オブジェクトが5メートル毎秒を移動することになるコントロールパッド上0.5であるので、場合。あなたのゲームが10fpsで実行されている場合、各フレームは0.5m移動します。

これらの図は架空のものですが、動きを制御から分離し、時間を考慮する必要があることをうまく示しています。

関連する問題