当前位置: 首页 > 知识库问答 >
问题:

画布获取图像触摸事件

松灿
2023-03-14

我正在写一个基于SurfaceViewObject的小2D机器人游戏,所以我把整个游戏绘制在画布上。我将球设计为png,并使用以下方法在画布上绘制:

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

现在我的问题是,我不知道如何接收这个球的触摸事件。我的png是64x64像素,但是球只有32x32像素,并且在图像的中间。我只想在球(32x32)被触摸时接收触摸事件,而不是位图(64x64)。我该怎么做?我可以为< code>SurfaceView注册一个< code>OnTouchListener,但是我如何检测球的接触呢?

另一个问题是球是一个简单的物体。如果我有一些不规则的物体,不能用半径或其他东西来描述呢?我是否使用了png的正确“技术”来构建画布控件,或者有没有更好/更简单的方法?

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

共有2个答案

闻人浩波
2023-03-14

只是一个想法,因为我有一个类似的游戏。我所做的是在脚本中捕获鼠标输入。然后对您想要的物体进行碰撞检测,根据其位置将物体的宽度和高度用于测试。因此,如果用户单击/触摸画布上的任意位置,请检查是否适合画布上的对象区域。

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;
        }

编辑

对于圆的逻辑:圆碰撞检测HTML5画布

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

如果你的物体是不规则的,需要一个不同的形状来进行冲突检测,而这不能用圆形或盒子来解决,请看这个问题:不规则形状的碰撞检测和我在这里发现的一些东西,但看起来都不是一个明确的解决方案。我会选择一个最适合物体的圆形或盒子,但不确定你的物体会有多不规则。

朱运诚
2023-03-14

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

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

 类似资料:
  • 触摸操作概述 浏览器的触摸 API 由三个部分组成。 Touch:一个触摸点 TouchList:多个触摸点的集合 TouchEvent:触摸引发的事件实例 Touch接口的实例对象用来表示触摸点(一根手指或者一根触摸笔),包括位置、大小、形状、压力、目标元素等属性。有时,触摸动作由多个触摸点(多根手指)组成,多个触摸点的集合由TouchList接口的实例对象表示。TouchEvent接口的实例对

  • 我正在写一个小烧瓶应用程序来识别手写数字(0-9)。我写了几乎所有的元素(机器学习模型、web应用等),但我在捕捉图像(使用画布绘制)时遇到了问题,比如: 我想获取图像并将其保存到临时文件中。我懂Python,但从未使用过JavaScript,这是使用Canvas所必需的。 HTML: JS: 函数使用浏览器保存管理器保存图像,但我想将其保存到临时文件,稍后再使用图像。

  • 触摸事件是手机游戏中最重要的事件,它易于创建,还能提供多种多样的功能。 让我们先了解一下什么是触摸事件,当你触摸移动设备的屏幕时,设备感受到被触摸,了解到被触摸的位置,同时取得触摸到的内容,然后你的触摸被回答。 这就是触摸事件。 如果你希望通过触摸控制屏幕下层的对象,那可以通过 优先级,达成这种需求,优先级高的对象能先处理事件。 创建触摸事件监听器: // Create a "one by on

  • 问题内容: 我试图在触摸gridview时选择该项目,但我无法使用onClick,因为它会启动另一个活动。我要实现的目标是能够在gridview中移动项目,并且由于我找不到解决方法,因此我想尝试一种方法。 所以,是的。有没有一种方法可以使“触摸”的项得到解决,我尝试使用Rect并无法正常工作。 (我能否详细说明一下。我不能为此使用onItemClick。) 任何帮助将是巨大的,谢谢!:) 问题答案

  • 主要内容:jQuery Mobile 点击,实例,jQuery Mobile 点击不放(长按),实例,jQuery Mobile 滑动,实例,jQuery Mobile 向左滑动,实例,jQuery Mobile 向右滑动,实例触摸事件在用户触摸屏幕(页面)时触发。 触摸事件同样可应用与桌面电脑上:点击或者滑动鼠标! jQuery Mobile 点击 点击事件在用户点击元素时触发。 如下实例:当点击 <p> 元素时,隐藏当前的 <p> 元素: 实例 $("p").on("tap",functio

  • 我想知道是否有可能在GLSurfaceView上进行ImageView并获得两者各自的触摸事件。我的问题是,我想知道ImageView何时被按下(因此我将使用OnTouchListener)。但是,我仍然希望能够获得我的glsurfaceview的触碰事件。 提前感谢, 编辑:这是我的activity_main.xml