假设将我的示例作为 PIANO 图像..在其键盘上的每次按键时我都想执行不同的事件..现在我无法找到从哪里开始..如何在 android 中执行此操作..
拍下图:
正如您在图像中看到的那样,我有一个钢琴图像..并以某种形状绘制了红色和蓝色线条..现在我想为这个图像上的每个形状执行不同的事件..我怎么能在 android 编程中做到这一点..
假设将我的示例作为 PIANO 图像..在其键盘上的每次按键时我都想执行不同的事件..现在我无法找到从哪里开始..如何在 android 中执行此操作..
拍下图:
正如您在图像中看到的那样,我有一个钢琴图像..并以某种形状绘制了红色和蓝色线条..现在我想为这个图像上的每个形状执行不同的事件..我怎么能在 android 编程中做到这一点..
这似乎是一个基本的碰撞检测问题。
基本上你想要做的当然是听屏幕触摸并接收触摸位置的 X 和 Y。(你当然可以使用多点触控,只要记住每次触控都这样做)
containsRectanglePoint
当触摸出现时,您将为图像上的每个键计算一堆。
所以基本上你会把图像分成很多这样的矩形。
(来源:gyazo.com)
然后检查该点是否包含任何矩形。
您当然会为所有键执行此操作。
因此,当发生碰撞时,您会仔细查看所有内容。
以下代码检查矩形和点之间的碰撞检测。如果该点在矩形范围内,则该方法将返回 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
= 点 Xpy
= Y 点在你的情况下px
&py
是触摸的位置。
你也可以使用 Java 的标准Rectangle2D
类来存储和计算碰撞,但这需要创建大量的类实例,而且当我们谈论内存时,它会便宜很多,只存储坐标然后使用我提供给您的功能。