2012-02-13 47 views
2

我是一名经验丰富的程序员,正尝试进入Android游戏设计领域。 在Eclipse中使用Java。Android Java - 跟踪多点触控对象/事件?

有关于如何通过移动在整个屏幕上跟踪触摸单个对象的bazillion教程,但如何跟踪上随机屏幕上的许多单个对象的触摸事件?

对于初学者,我想编写一个类,它将被实例化多次并保存在一个数组列表中。每个都被绘制到全屏幕SurfaceView上的随机位置。简单的东西到目前为止...... 但是对于我的生活,我无法找到如何拖动这些对象周围的任何!

我有一个使用自定义视图(扩展SurfaceView)的活动。实例化处理游戏板屏幕绘图的GameBoard类。 GameBoard类还拥有/绘制了一个在屏幕上可以很好地绘制的gameCharacters的ArrayList,但需要触摸控制。

林在我的智慧结束,任何帮助吗?

回答

0

我写了一个自上而下的射手(Akari),它不会拖动物体,而是使用它们的位置进行碰撞检测。

在我的SurfaceView中,我调用theThread.touchEventType(x,y)。线程遍历对象(在你的情况下,数组),并检查它们是否匹配。在匹配的情况下,它将返回与该对象关联的值,并且在该对象上完成MotionEvent.ACTION_UP之前的所有MotionEvent.ACTION_MOVEMENT动作。

希望这会有所帮助。如果你需要任何示例代码,请告诉我。

+0

人力资源管理模式,似乎低效的遍历所有的“可触摸”的对象来检查冲突(或任何事件)...但它似乎是在Android的世界所做的那样的。 – Overunity 2012-02-13 05:54:26

+0

环顾四周后,似乎是这样做的。如果不需要准确的精度,我强烈建议使用Android的Rect类进行检测。 – YumeApps 2012-02-13 06:37:01

0

我的问题与您的问题完全相同。 我的解决方案有点不同。我正在尝试编写一个backammon游戏。我有30个物体放置在屏幕上并移动它们。当然,其中一些重叠。所以我的问题是我触摸了一个物体,最后移动了另一个物体(从我认为这是一个物体放置在屏幕上后,我触摸的那个和我触摸的那个物体的左侧)。

不管怎样,我所做的就是创建一个扩展视图中的自定义对象并将其放在GestureOverlayView。我覆盖的onTouchEvent(),它看起来是这样的:

public boolean onTouchEvent(MotionEvent event) { 
    int x = (int) event.getRawX(); 
    int y = (int) event.getRawY(); 

    int action = event.getAction(); 
    switch (action) { 
     case MotionEvent.ACTION_DOWN: 
      if (Math.abs(x - this.getX()) < BackgroundView.slotSize && Math.abs(y - this.getY()) < BackgroundView.slotSize) { 
       //do whatever I want 
       return true; 
      } else { 
       return false; 
      } 
      //break; 
     case MotionEvent.ACTION_MOVE: 
      //this is the dragging part 
      this.setX(x - size/2); 
      this.setY(y - size/2); 
      break; 
     case MotionEvent.ACTION_ 
      break; 
     case MotionEvent.ACTION_CANCEL: 
      break; 
     case MotionEvent.ACTION_OUTSIDE: 
      break; 
     default: 
    } 
    return true; 
} 

从我读,当我返回false,动作不消耗,所以另一个对象可以做到这一点。基本上,没有任何对象会消耗它,直到通过返回true来消除它。

我仍然认为我是一个新手,我觉得有更好的方法可以做到这一点,但它的工作原理很适合我。希望能帮助到你。你或别人。 我接受新的建议。