2010-12-08 63 views
0

2次元配列が画面に表示され、タッチ位置を検出してタッチがあるタイルを見つけて削除する方法を実装することに決めました。もっと正確には、 map [x] [y]のintです。 私は現在、3次元15×15の完全な2次元マップ配列を持っています。 数値を切り捨てる方法が見つからなかったために作成した位置とメソッドをタッチすると、配列内の位置が計算され、値が変更されます。Androidタッチイベントの強制終了

public boolean onTouchEvent(MotionEvent event) { 

    mX = (int) event.getX(); 
    mY = (int) event.getY(); 
    calculate(); 
    return true; 
} 

public void calculate() { 

    indexX = 0; 
    indexY = 0; 
    for (int n = 32; n < mX; n += 32) { 
     indexX++; 
    } 
    for (int n = 32; n < mY; n += 32) { 
     indexY++; 
    } 
    map[indexY][indexX] = 1; 
} 

私は画面をマッシュ開始または周りに私の指をドラッグする場合は強制終了しますが、私は1つの場所で1に触れた場合、ゆっくりとそれが正常に動作します。 私は、計算するメソッドがタッチイベントメソッドにあってはならないとは思っていましたが、それでもまだよく分かりません。

+1

logcatを貼り付けてください。 – Cristian

答えて

0

これはforループの必要はありません。 2つの整数を分割すると整数結果が得られます。 2の累乗で除算したいので、算術シフト演算子を使用することもできます。 (コンパイラは、あなたがコードするものに関係なく、どちらが速いかを選択すると思うかもしれませんが、負の値の丸めの振る舞いは異なります)

indexX = mX >> 5;

とにかく2つの操作しか行っていない場合は、速度は問題ではありません。

「強制終了」とは、アプリケーションが応答しないという意味ですか?

それ以外の場合は、境界問題が発生する可能性があります。

+0

ええと、それは変です。私が思いついた最初の解決策は、あなたが提案したように整数に分割することでしたが、それは機能しませんでした。私は、私の電話が差し込まれていて、エミュレーターが走っているかそのようなものがあったからだと思います。私はこれをもう一度試して、何が起こるか見るつもりです。 – semajhan

+0

奇妙なことは何ですか? –

+0

私は入力を終了する前に "enter"を押して、コメントを提出しました| |。ところで、境界問題はどういう意味ですか?私は再び私のアプリを走らせ、ランダムな場所に触れ始めると本当に速く閉じます。 – semajhan

関連する問題