我正在开发AndEngine的奇幻游戏。我已经动态创建了tile(矩阵格式),并在其中一个tile上放置了一个sprite。我使用onAvenouchlistener来识别精灵,我给了瓦片和精灵1的zvalue 0,但onAreaTouchListener不识别精灵,它只识别瓦片。当用户触摸特定位置时,我想知道这两个值。请提出解决方案。
以下是一些正在使用的示例代码:
public boolean onAreaTouched(final TouchEvent pSceneTouchEvent, final ITouchArea pTouchArea,
final float pTouchAreaLocalX, final float pTouchAreaLocalY) {
if (pSceneTouchEvent.isActionDown()) {
final Sprite face = (Sprite) pTouchArea;
String mrc = (String) face.getUserData();
if (mrc.equals("48")) {
selectedtlie = true;
inittileLevel(level1);
} else
Toast.makeText(this, "" + mrc, Toast.LENGTH_SHORT).show();
i++;
if (i == 2)
return true;
else
return false;
}
if (pSceneTouchEvent.isActionUp()) {
i = 0;
return true;
}
return true;
}
答案 0 :(得分:1)
您可能会问几件不同的事情。你的问题有点难以解释,但我会尝试通过可能的解释来解释。
如何确定两个精灵是否放置在同一位置 他们的zindex值在AndEngine中有所不同吗?
这是你的主题。我想你会问一些不同的东西,但如果这就是你所要求的,你可以只比较X和Y并忽略Z,就像这样:
if (sprite1.getX() == sprite2.getX() && sprite1.getX() == sprit2.getY()) return true;
当然,您可能指的是“相同位置”不同的东西,而不仅仅是左上角是否位于同一点。例如,您可能想知道两个精灵是否完全重叠,无论它们是否精确地放置在同一个XY上。在这种情况下,您希望进入碰撞检测并且有多种方法来处理碰撞(例如,您是否希望像素完美碰撞测试?)。无论如何,here's a nice example检测像素完美的碰撞。如果你想做一些更简单的事情,你可以得到每个精灵的边界框Rect,并使用android.graphics.Rect中的intersect()方法。
你的问题正文询问以下内容,你似乎在寻找不同的东西:
我用onAreatouchlistener来识别精灵,我给了一个 对于tile和sprite 1,zvalue 0,但是onAreaTouchListener没有 识别精灵,它只识别瓷砖。我想知道两者 用户触摸特定位置时的值
现在我很困惑,因为onAreaTouchListener没有“识别精灵”,它会监听touchevents。我的猜测是你要求的是一种方法,将一个精灵和另一个精灵用于精灵。
首先:确保您正在为两个精灵注册处理程序。即,像:
this.mScene.registerTouchArea(sprite);
如果没有传播touchevent,另一件需要注意的是onTouch()返回的布尔值。该布尔值用于指示处理程序是否已使用该事件或是否应该传递该事件。
您也可以使用scene.setOnAreaTouchTraversalFrontToBack()和scene.setOnAreaTouchTraversalBackToFront()来查看它们是否同时接收触摸事件并且问题是传播还是如果问题是您没有在一个上注册处理程序精灵。
最后,看一下scene.setTouchAreaBindingEnabled(true)。您在评论中提到特别是“TouchUp”事件有问题。这可能是将touchareabinding设置为false的结果。本质上,toucharea绑定的作用是它允许触摸区域在其toucharea之外查看和接收触摸事件。因此,如果手指在区域内向下移动并向外移动(并且绑定关闭),则不会接收到触摸事件。如果启用了绑定,它仍会收到触摸事件。