Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 如何正确测试两个旋转物体?(避免边界框的方法)_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 如何正确测试两个旋转物体?(避免边界框的方法)

Actionscript 3 如何正确测试两个旋转物体?(避免边界框的方法),actionscript-3,flash,Actionscript 3,Flash,这学期我在大学里上了一门入门级的flash课程,我们的最终任务是制作一个迷你flash游戏。 我必须制作一个白日梦类型的游戏,其中有许多关卡,在每个关卡中,你必须对齐管道,以便水流,然后你可以进入下一关卡 我成功地上了第一级,但上了第二级, 我在那里放置了很多弯管(我所说的弯管是指所附图片:![curved Pipe]:()) 我发现我用来决定某个级别何时完成的方法工作不正常 我使用的是HitTestObject,基本上,我是在测试两个对象Pipe_1和Pipe_2是否相交。如果所有管道以正确的

这学期我在大学里上了一门入门级的flash课程,我们的最终任务是制作一个迷你flash游戏。 我必须制作一个白日梦类型的游戏,其中有许多关卡,在每个关卡中,你必须对齐管道,以便水流,然后你可以进入下一关卡

我成功地上了第一级,但上了第二级, 我在那里放置了很多弯管(我所说的弯管是指所附图片:![curved Pipe]:()) 我发现我用来决定某个级别何时完成的方法工作不正常

我使用的是HitTestObject,基本上,我是在测试两个对象Pipe_1和Pipe_2是否相交。如果所有管道以正确的方式相交,则允许进入下一层

我发现的问题是flash为您制作的电影剪辑提供了边界框,而HitesObject使用边界框来测试点击率。因此,当您旋转leftpipe使其不接触屏幕上的直管时,边界框仍会接触,并且当它实际上不在屏幕上接触时,它会返回“碰撞”

我查了一下,发现可以使用HitTestPoint,但我不知道如何创建动态变量(对象旋转时会发生变化),在leftpipe上存储一个或两个特定的点,比如它的两端

一旦我知道了如何将这些值正确地输入到变量中,那么我就可以知道如何执行HitTestpoint

此外,我知道LocaltoGlobal函数,但无论我尝试了什么,它都会不断出现:

场景1,层“层1”,第1帧,第30 1118行:将静态类型对象的值隐式强制到可能不相关的类型flash。geom:Point

这意味着我不知道将x和y坐标存储为动态变量的正确代码

编辑:好的,自从有人问起,我从网上找到了这段代码,这就是我想玩的代码,但没有用:

如何对2个矩形使用HitTest,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计算将与我想象的完全不同

上面的代码给出了与我之前发布的相同的错误:

将静态类型对象的值隐式强制为可能不相关的类型flash.geom:Point


它在第r1行给出它。localToGlobal(p1)

不使用对象,而需要使用点,如下所示:

var p1:Point = new Point(r1width/2, r1width/2);

张贴您试图如何存储积分的代码。还有几个用于碰撞检测的库(以及许多好文章),您不能使用其中的一些吗?这是一个相当新的:好吧,我添加了我试图使用的东西,但没有用。看看这篇精彩的Mike Chambers文章。在本文中,他使用Bitmap.hitTest,但它在任何情况下都是有用的Mike Chambers Bitmap one非常优秀,但我还不够好,无法完全理解它并将其应用到我自己的游戏中。。。我从没想过这么简单的任务会这么复杂。