【问题标题】:Multiple finger input for android development安卓开发的多指输入
【发布时间】:2023-03-22 03:33:01
【问题描述】:

在让计算器应用程序工作后,我决定尝试创建 pong。中间有一个盒子,两端有两个桨。手机是水平的。我让盒子从墙上弹起,桨随着我向下移动手指而移动。我的问题是我想让它成为两个玩家,并且我想为游戏提供多个手指输入。我想让一根手指移动桨 1,另一根手指移动桨 2。到目前为止,这是我的输入代码

@Override
 public boolean onTouchEvent(MotionEvent ev) {
        final int action = ev.getAction();
        switch (action) {

        case MotionEvent.ACTION_MOVE: {
            // Find the index of the active pointer and fetch its position



           float p1y = ev.getY();

            if(ev.getX()<300)
            {
              player1y = p1y;
            }
            if(ev.getX()>300)
            {
              player2y = p1y;
            }

           //player1y = p1y;

            invalidate();
            break;
        }

        }
        return true;


    }

它位于我的surfaceview 类中。如何修改输入法或完全摆脱它并更改它以实现我的目标?也对我的变量感到抱歉。 Eclipse 在我身上经常崩溃,我的笔记本电脑触摸面板倾向于移动我的光标,因此较短的变量似乎可行。 p1y 是触摸的 y。而player1y和player2y分别是player1和player2桨的y位置。

【问题讨论】:

  • 下面的答案有用吗?我一直在看它,我看不出这如何让你有两个手指同时在两个不同的方向上移动两个桨。任何反馈都将不胜感激,因为我目前正在尝试找出类似的问题,谢谢
  • 下面的答案确实有效,完美解决了问题。

标签: android input touch


【解决方案1】:

一个 MotionEvent 可以保存多个指针。使用getPointerCount() 查看当前事件中有多少指针正在触摸屏幕。 getXgetY 有替代版本,它们从 0-getPointerCount() - 1 获取索引。

在更复杂的应用程序中,您可能希望通过指针 ID 来跟踪手指,但对于在屏幕上使用截断点的简单操作,您可以在 ACTION_MOVE 案例中执行以下操作:

int pointerCount = ev.getPointerCount();
for (int i = 0; i < pointerCount; i++) {
    float x = ev.getX(i);
    float y = ev.getY(i);

    if (x < 300) {
        player1y = y;
    } else if (x > 300) {
        player2y = y;
    }
}

如果您想了解更多信息,来自 Android 开发者博客的这篇文章可能会有所帮助:http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-27
    相关资源
    最近更新 更多