プレイヤーが画面上に図形を描くシンプルなゲームをやっています。パスのポイントは配列に格納され、クラス GameLoop で描画されます。ほぼ完成ですが、2 人のプレイヤーが同時に図形を描画できるように、マルチタッチ入力を使用してゲームを実行する必要があったことに気付きました!
event.Action_Down
最初の指と次の指に使用する必要があることはわかっていevent.Action_Pointer_Down
ますが、すべての形状のポイントとパスの描画をどのように処理すればよいですか? 配列を 1 つだけ使用することはできますか、それともそれぞれに配列が必要ですか。両方のパスをチェックするために、GameLoop クラスのすべてのコードを 2 倍にする必要があると思いますか? 私の質問は少しわかりにくいかもしれませんが、今の気持ちです!いくつかのアドバイスはいいでしょう!
これは、シングル タッチ イベントを処理し、すべてのポイントを配列に渡すコードです。
@Override
public boolean onTouch(View v, MotionEvent event) {
synchronized (gameLoop) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
gameLoop.touchDownX = event.getX();
gameLoop.touchDownY = event.getY();
break;
case MotionEvent.ACTION_MOVE:
Point point = new Point();
point.x = (int) event.getX();
point.y = (int) event.getY();
gameLoop.addPoints(point);
gameLoop.startDrawLine = true;
break;
case MotionEvent.ACTION_UP:
Point point2 = new Point();
point2.x = (int) gameLoop.touchDownX;
point2.y = (int) gameLoop.touchDownY;
gameLoop.addPoints(point2); // Add last point to close shape
gameLoop.pathOK = true;
gameLoop.touchActionUp = true;
break;
}
}
return true;
}
編集:これは複雑でした!少し変更したコードを見つけました。画面に図形を描き始める人ごとに arrayList を作成する必要があります。複数のプレイヤーが同時に図形を描画できるようにする必要があります。すべての Point 値は、player
arrayList 内に格納する必要があります。最後に、すべてのplayer
arrayList は、 と呼ばれるメインの arrayList 内に格納する必要がありますplayers
。これを解決するための助けを得ることができますか? 始め方がわかりません。
GameLoop クラスでリストを宣言しました。
// Lists to handle multiple touch input
players = new ArrayList<List<Point>>(); // Main arrayList
player = new ArrayList<Point>(); // Inner arrayList
GameLoop
以下のコードは MainActivity クラスにあり、 likeのオブジェクトを使用gameLoop
して GameLoop メソッドと通信します。
@Override
public boolean onTouch(View v, MotionEvent event) {
synchronized (gameLoop) {
for(int i=0; i<event.getPointerCount(); i++) { // Numbers of pointers on screen
int id = event.getPointerId(i);
// Check if fingers touch screen
if (event.getActionIndex() == i && (event.getActionMasked() == MotionEvent.ACTION_POINTER_UP || event.getActionMasked() == MotionEvent.ACTION_UP )) {
}
// Check if fingers leave the screen
else if (event.getActionIndex() == i && (event.getActionMasked() == MotionEvent.ACTION_POINTER_DOWN || event.getActionMasked() == MotionEvent.ACTION_DOWN)) {
}
// Check movement on screen
else {
}
}
}
return true;
}