You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 2D游戏:实现onTouch方法单次触摸仅执行一次

解决你的2D游戏触摸问题

嘿,我来帮你搞定这两个触摸相关的问题!咱们逐个分析解决:

问题1:触摸一列时多个单元格变化

你的代码里用了两层嵌套循环遍历所有单元格,当触摸某一列的x坐标范围时,同一列的多个行单元格都会满足x范围判断,导致多次调用play(),自然就会有多个单元格变化。

解决思路:你应该定位到当前触摸列中符合条件的单个单元格(比如最下方的空单元格,毕竟这类游戏通常是落子到列的底部),而不是遍历所有行。可以先根据触摸x坐标确定对应的列j,然后从下往上遍历该列的行,找到第一个空单元格后再执行play(),这样就只会触发一次。

问题2:按住屏幕时onTouch持续执行

onTouch方法会响应MotionEvent的所有动作(比如ACTION_DOWN、ACTION_MOVE、ACTION_UP),你现在的代码不管什么动作都会执行逻辑,所以按住屏幕滑动时,ACTION_MOVE会持续触发方法。

解决思路:只在**首次触摸按下(ACTION_DOWN)**时执行你的游戏逻辑,其他动作直接返回false或者跳过处理。

修改后的代码示例

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MyView a = new MyView(this);
    setContentView(a);
    a.setOnTouchListener(new View.OnTouchListener() {
        public boolean onTouch(View view, MotionEvent motionEvent) {
            // 只处理按下动作,避免重复触发
            if (motionEvent.getAction() != MotionEvent.ACTION_DOWN) {
                return false;
            }

            float mX = motionEvent.getX();
            // 先确定触摸的列j
            int targetColumn = -1;
            for (int j = 0; j < size; j++) {
                // 用第一行的单元格来判断列的x范围(因为同一列x坐标应该一致)
                if (mX > board[0][j].getterxPos() - 50 && mX < board[0][j].getterxPos() + 50) {
                    targetColumn = j;
                    break;
                }
            }

            // 如果找到了目标列,从下往上找第一个空单元格
            if (targetColumn != -1) {
                for (int i = size - 1; i >= 0; i--) {
                    if (board[i][targetColumn].getterCellType() == '.') {
                        playColumn = board[i][targetColumn].getterColumn();
                        play();
                        break; // 找到后立即退出循环,只执行一次play()
                    }
                }
            }
            return true;
        }
    });
}

额外说明

  • 我假设你的size是棋盘的行列数,并且同一列的单元格x坐标是一致的,所以用第一行的单元格来判断列的范围更高效。
  • 从下往上遍历行是为了找到当前列最底部的空单元格,这符合大多数落子类2D游戏的逻辑,如果你的游戏逻辑不同,可以调整遍历方向。

内容的提问来源于stack exchange,提问作者tarktark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:34:05