ActionScript 3.0 中的 Flash 游戏。有一个旋转的鼓,通过单击停止,您需要找出哪个扇区掉了下来。我不想重新发明轮子。通常是怎么做的?
鼓对象绘制完成,扇区大小不一,顺序不一。有一个想法将控制点固定在扇区的交点上,但是有一个问题。对于每个点,您都需要指定它负责的扇区的值。这些点可能可以在绘制鼓后从库中添加 - 在正确的位置。有没有办法为从库中添加的对象指定属性?
想到的只是给实例起个名字,最后加上想要的参数(例如,item_1、item_5)。这是一个非常粗略的方法吗?另外,两个点可以具有相同的值,因为扇区是重复的。
我怎么看:
- 鼓是拉出来的
- 控制点被撞到正确的位置(同一类的对象,从库中获取)。每个点都有一个包含参数的名称。
- 当您将鼓本身添加到舞台时,所有控制点都会以某种方式收集在一个数组中。现在他们有了可用的坐标,现在可以通过坐标计算卷轴的位置并确定掉落的扇区。
- 获取此扇区的值(来自对象的名称)。如何从代码中访问它?
我自己已经很困惑了)主要问题是如果鼓被绘制并且所有扇区都不同,如何获得扇区值?
附言 鼓的位置也可以通过旋转来计算,大概,但是它可以旋转很长时间并且那里的值很疯狂。
附言 找到了 hitTestPoint() 方法。如果真的是按形状计算交集,而不是按框架计算交集,那么就更容易找出哪个扇区掉了。但如何传达绘制扇区的价值的问题仍然存在。如果将它放在一个扇区内的文本字段中,它可以被读取吗?
我要求一些提示)
绘制了一个鼓,将其转换为一个 MovieClip,在鼓的中心有一个转换点(配准)。鼓的旋转通过旋转属性发生。
生成的旋转角度将在 -180 到 180 的范围内,因此不会有大的值。滚筒旋转:
hitTestPoint 方法计算我记得在框架上的碰撞。为了计算圆的形状,您可以使用计算点之间距离的公式并与半径进行比较。
总计,沿圆形轮廓的碰撞:
即圆心到点击位置的距离必须小于半径。
更新 1。
最好通过最初测量来存储每个扇区的度数范围。例如
var sectors = [-180,-80,20,60,180]
。然后只需要了解角度的范围。UPD 2.您也可以通过稍微优化上面的代码来尝试从空白处取角。
为应用绘制我们的鼓
接下来,我选择了要操纵的线条作为方向。
好吧,剩下的就是将它们放在鼓上(当然,您可以通过将它们发送到下面的层或执行 Arrange->Send To Back 来将它们隐藏在鼓下)。通过在旋转工具的帮助下同时设置所需的角度并以某种方式命名
rotate1, rotate2, rotate3 [...]
。好吧,那么获得角落是技术问题