本学期我在大学里参加了一个介绍级别的flash课程,我们最后的任务是制作一个迷你flash游戏。 我必须制作一个管道式游戏,其中有许多级别,在每个级别你必须对齐管道以便水流动然后你可以传递到下一个级别。
我成功进入了第一级,但是在进入第二级时, 我放置了很多弯曲的管道(通过弯曲的管道,我的意思是附图:![弯曲的管道] :( http://imgur.com/mwpXAMn)) 我发现用于确定某个级别何时完成的方法无法正常工作。
我正在使用HitTestObject,基本上,我正在测试2个对象Pipe_1和Pipe_2是否相交。如果所有管道都以正确的方式相交,则授予下一级别的游行。
我发现的问题是flash为你制作的电影剪辑设置了边界框,HitestObject使用边界框来测试命中。因此,当您旋转左管以使其不接触屏幕上的直管时,边界框仍会触摸并返回“碰撞”,而实际上它实际上并未在屏幕上触摸。
我查了一下,发现你可以使用HitTestPoint,但我无法弄清楚如何以某种方式制作动态变量(在物体旋转时改变),在左管上存储一个或两个特定点,比如两端它。
一旦我弄清楚如何正确地将这些值变为变量,那么我就可以弄清楚如何做HitTestpoint。
另外,我知道LocaltoGlobal功能,但无论我尝试了什么,它都会不断提出:
“场景1,图层'第1层',第1帧,第30行1118:使用静态类型Object将值隐式强制转换为可能不相关的类型flash.geom:Point。”
意思是我不知道将x和y坐标存储为动态变量的正确代码。
编辑:好吧,因为一个人问,我在网上搜索了这段代码,这是我试图玩的那个,但无济于事:
如何将HitTest用于2个矩形,r1为矩形1 r2为矩形2.
var r1width:Number = 135.0; //width of retangle 1 whith rotation 0
var r2width:Number = 93.0; //width of retangle 2 whith rotation 0
var p1:Object = {x:(r1width/2), y:(r1width/2)};
var p2:Object = {x:(-r1width/2), y:(r1width/2)};
var p3:Object = {x:(-r1width/2), y:(-r1width/2)};
var p4:Object = {x:(r1width/2), y:(-r1width/2)};
r1.localToGlobal(p1);
r1.localToGlobal(p2);
r1.localToGlobal(p3);
r1.localToGlobal(p4);
var p5:Object = {x:(r2width/2), y:(r2width/2)};
var p6:Object = {x:(-r2width/2), y:(r2width/2)};
var p7:Object = {x:(-r2width/2), y:(-r2width/2)};
var p8:Object = {x:(r2width/2), y:(-r2width/2)};
r2.localToGlobal(p5);
r2.localToGlobal(p6);
r2.localToGlobal(p7);
r2.localToGlobal(p8);
if((r2.hitTest(p1.x, p1.y, true))||(r2.hitTest(p2.x, p2.y, true))||(r2.hitTest(p3.x,
p3.y, true))||(r2.hitTest(p4.x, p4.y, true)))
{
trace('collision');
}
if((r1.hitTest(p5.x, p5.y, true))||(r1.hitTest(p6.x, p6.y, true))||(r1.hitTest(p7.x,
p7.y, true))||(r1.hitTest(p8.x, p8.y, true)))
{
trace('collision');
}
我没有编写此代码但它不起作用。我不确定“对象”是什么,因为我之前从未使用它,我假设在这种情况下它有点像坐标对。
此外,这段代码是针对2个矩形的,而我使用的是L形管,因此x / y计算与我想象的完全不同。
上面的代码给出了我之前发布的相同错误:
使用静态类型Object将值隐式强制转换为可能不相关的类型flash.geom:Point。
它首先在r1.localToGlobal(p1);
上给出它答案 0 :(得分:0)
您需要使用Point,而不是使用Object:
var p1:Point = new Point(r1width/2, r1width/2);