我試圖讓這個游戲人物(紅方)不能移動,除非玩家最初點擊上它,但隨后可以隨意拖動,直到釋放它。目前,如果玩家點擊螢屏上的任意位置,游戲塊將在他們開始移動時移動到他們的游標/手指。如果我嘗試使用類似的東西:
case MotionEvent.ACTION_DOWN: //player pressing down
if (gamePiece.getRectangle().contains((int) event.getX(), (int) event.getY())) {
switch (event.getAction()) {;
case MotionEvent.ACTION_MOVE: //player moving their finger
gamePiecePoint.set((int) event.getX(), (int) event.getY() - 100);
{
}
檢查塊是否包含玩家單擊的點確實會阻止玩家移動,但它會使移動非常不一致,因為游標在移動時不會直接停留在游戲塊上。
我想要做的是需要對游戲塊進行初步接觸,然后允許自由移動,直到他們釋放塊。我只是不確定如何做到這一點。

這是我當前的 onTouchEvent 實作。 ACTION_DOWN 案例中的 if 陳述句防止塊立即捕捉到玩家點,但是當游標移動時,游戲塊移動到它。
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: //player pressing down
if (!(gamePiece.getRectangle().contains((int) event.getX(), (int) event.getY()))) {
break;
}
case MotionEvent.ACTION_MOVE: //player moving their finger
gamePiecePoint.set((int) event.getX(), (int) event.getY() - 100);
//GameBoard.checkInteraction(gamePiecePoint);
break;
case MotionEvent.ACTION_UP:
gamePiecePoint = GameBoard.checkInteraction(gamePiecePoint);
break;
}
return true;
//return super.onTouchEvent(event);
}
編輯:根據@Nicola 的建議,我將我的 switch-case 塊更改為以下(在類級別定義 wasClicked)......
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: //player pressing down
// Check if action down happened inside the gamePiece
wasClicked = gamePiece.getRectangle().contains((int) event.getX(), (int) event.getY());
case MotionEvent.ACTION_MOVE: //player moving their finger
if (wasClicked) {
gamePiecePoint.set((int) event.getX(), (int) event.getY() - 100);
}
case MotionEvent.ACTION_UP:
gamePiecePoint = GameBoard.snapToNearest(gamePiecePoint);
// Snaps player gamePiece to nearest tile on release
}
我確實注意到,如果我放入wasClicked = false;ACTION_UP 案例,它會破壞系統,我一次只能移動少量游戲。我不是 100% 確定為什么會發生這種情況,但是當我使用 system.out 從控制臺監視 ACTION_UP 時,我注意到它在我移動部件時不斷觸發,而不僅僅是在我釋放塊時觸發。我不確定這是有意的,但沒有它也可以作業,所以我現在很滿意。太感謝了!!
uj5u.com熱心網友回復:
創建一個標志canMovePiece可能會有所幫助。
當ACTION_DOWN情況發生,我們可以設定canMovePiece到true如果事件的坐標都包含在紅色正方形內,如果他們不是什么都不會發生。
現在,如果標志是true我們知道玩家可以移動紅色方塊,那么每次ACTION_MOVE發生(不要switch-case在 內部創建塊ACTION_DOWN,您可以在switch-case內部使用單個塊onTouchEvent())都可以檢查標志的值:如果它是true,我們得到當前的x和y運動并更新紅色方塊的位置。如果是false,則不會發生任何事情。
我認為這應該足以根據游標(手指)位置建立紅色方塊的實時移動。什么時候ACTION_UP碰巧我們應該只將標志設定false為將來開始另一個動作。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/405908.html
標籤:
