我是一名经验丰富的程序员,C ++ / C#试图进入Android游戏设计世界。 在Eclipse中使用Java。
有关如何通过跟踪整个屏幕上的触摸来移动单个对象的大量教程,但如何在屏幕上随机跟踪许多单个对象上的触摸事件?
首先,我想编写一个可以多次实例化并保存在arraylist中的类。每个都被绘制到全屏SurfaceView上的随机位置。到目前为止简单的东西 但是对于我的生活,我无法找到如何拖动任何这些物体!!
我有一个使用自定义视图的活动(扩展SurfaceView)。实例化一个处理游戏板屏幕绘制的GameBoard类。 GameBoard类还保存/绘制一个gameCharacters的ArrayList,可以在屏幕上绘制,但需要触控。
我在我的智慧结束,在那里有任何帮助吗?
答案 0 :(得分:0)
我写了一个自上而下的射手(Akari),它不会拖动物体,而是使用它们的位置进行碰撞检测。
在我的SurfaceView中,我调用了Thread.touchEventType(x,y)。线程遍历对象(在您的情况下,数组),并检查它们是否匹配。在匹配的情况下,它将返回与该对象关联的值,并且在该对象上完成MotionEvent.ACTION_UP之前的所有MotionEvent.ACTION_MOVEMENT操作。
希望这会有所帮助。如果您需要任何示例代码,请告诉我。
答案 1 :(得分:0)
我遇到了与你完全相同的问题。 我的解决方案有点不同。我正在尝试编写一个反向游戏。我有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为止。
我仍然认为自己是新手,我认为有更好的方法可以做到这一点,但它对我来说效果很好。希望能帮助到你。你或其他人。 我愿意接受新的建议。