0

假设将我的示例作为 PIANO 图像..在其键盘上的每次按键时我都想执行不同的事件..现在我无法找到从哪里开始..如何在 android 中执行此操作..

拍下图:

在此处输入图像描述

正如您在图像中看到的那样,我有一个钢琴图像..并以某种形状绘制了红色和蓝色线条..现在我想为这个图像上的每个形状执行不同的事件..我怎么能在 android 编程中做到这一点..

4

1 回答 1

0

这似乎是一个基本的碰撞检测问题。

基本上你想要做的当然是听屏幕触摸并接收触摸位置的 X 和 Y。(你当然可以使用多点触控,只要记住每次触控都这样做)

containsRectanglePoint当触摸出现时,您将为图像上的每个键计算一堆。

所以基本上你会把图像分成很多这样的矩形。

图片
(来源:gyazo.com

然后检查该点是否包含任何矩形。

  • 如果触摸 X 和 Y 在 1 或 2 内,则执行该键的事件。
  • 如果触摸 X 和 Y 在 3、4 或 5 之内,则执行该键的事件。
  • 如果触摸 X 和 Y 在任一 6 内,则执行该键的事件。
  • 如果触摸 X 和 Y 在任一 7 内,则执行该键的事件。

您当然会为所有键执行此操作。

因此,当发生碰撞时,您会仔细查看所有内容。

简单矩形与点碰撞检测

以下代码检查矩形和点之间的碰撞检测。如果该点在矩形范围内,则该方法将返回 true。如果不是,则返回 false。

public static boolean containsRectanglePoint(double x, double y, double w, double h, double px, double py)
{
    if (px < x) { return false; }
    if (py < y) { return false; }
    if (px > (x + w)) { return false; }
    if (py > (y + h)) { return false; }
    
    return true;
}
  • x= 矩形 X(或 AABB 最小 X)
  • y= 矩形 Y(或 AABB 最小 Y)
  • w= 矩形宽度(或 AABB 最大 X - AABB 最小 X)
  • h= 矩形高度(或 AABB 最大 Y - AABB 最小 Y)
  • px= 点 X
  • py= Y 点

在你的情况下px&py是触摸的位置。

你也可以使用 Java 的标准Rectangle2D类来存储和计算碰撞,但这需要创建大量的类实例,而且当我们谈论内存时,它会便宜很多,只存储坐标然后使用我提供给您的功能。

于 2013-08-17T11:50:45.237 回答