1

我正在编写一个基于SurfaceViewObject 的小型 2D android 游戏,所以我将整个游戏绘制在canvas. 我设计了一个球作为 apng并使用以下方法将其绘制在画布上:

canvas.drawBitmap(bmp, posX, posY, null);

现在我的问题是我不知道如何接收这个球的触摸事件。我的 png 是 64x64 像素,但球只有 32x32 像素并且位于图像的中间。如果触摸球(32x32)而不是位图(64x64),我只想接收触摸事件。我怎样才能做到这一点?我可以注册一个OnTouchListenerSurfaceView但我怎样才能检测到触球?

另一个问题是球是一个简单的物体。如果我有一些无法通过半径或其他东西描述的不规则物体怎么办?我是否完全使用正确的“技术”和 png 来构建画布控件,还是有更好/更简单的方法?

这对我来说是所有平台(JS、Android、iOS)上的典型问题,我不知道解决它的最佳方法。这就是为什么我在这个问题上使用了一些其他标签。是不是有一个跨平台的解决方案,所以我可以永远解决这个问题?

4

2 回答 2

0

您无法在画布上获取位图的触摸事件。您将获得视图的触摸事件。然后,根据触摸的 x,y 坐标,您必须确定触摸的是什么。

在形状复杂的情况下,可以检查对应的位图像素是否透明。但出于实际目的,简单地检查触摸是否在位图中心的一小段距离内就足够了。

于 2013-10-03T13:53:58.833 回答
0

只是一个想法来帮助我,因为我有一个类似的游戏。我所做的是在 javascript 中捕获鼠标输入。除了对您想要的对象进行碰撞检测之外,还可以根据对象的位置将对象的宽度和高度用于测试。因此,如果用户单击/触摸画布上的任何位置,它会检查是否适合画布上的对象区域。

canvas.addEventListener('mousemove', function(evt) {
    mousePos = getMousePos(canvas, evt);
  }, false);

function collides(a, b) {
          return a.x < b.x + b.width &&
            a.x + a.width > b.x &&
            a.y < b.y + b.height &&
            a.y + a.height > b.y;
        }

编辑

对于你的圈子的逻辑:Circle Collision Detection HTML5 Canvas

如果我有一些无法通过半径或其他东西描述的不规则物体怎么办?

如果您的对象是不规则的并且需要不同的形状来进行碰撞检测,而这无法用圆形或框来解决,请查看这个问题:不规则形状的碰撞检测和我在这里找到的东西,但看起来都不是明确的解决方案。我要做的是选择一个最适合物体的圆圈或盒子,但不确定你的物体会变得多么不规则。

于 2013-10-03T13:56:44.687 回答