Actionscript 3 动作脚本3。在gotoAndStop()之后永远循环动画,并且在角色发生碰撞时在动画期间具有滞后
我正在制作简单的flash游戏。我有一个问题,在我使用gotoAndStop()之后,动画会一直循环,如果角色与地面或任何舞台发生碰撞(如果在空中飞行的角色没有任何延迟),则在动画期间会出现延迟 以下是冲突列表:Actionscript 3 动作脚本3。在gotoAndStop()之后永远循环动画,并且在角色发生碰撞时在动画期间具有滞后,actionscript-3,flash,animation,actionscript,collision-detection,Actionscript 3,Flash,Animation,Actionscript,Collision Detection,我正在制作简单的flash游戏。我有一个问题,在我使用gotoAndStop()之后,动画会一直循环,如果角色与地面或任何舞台发生碰撞(如果在空中飞行的角色没有任何延迟),则在动画期间会出现延迟 以下是冲突列表: var myCollisionList:CollisionList = new CollisionList(Hero); myCollisionList.addItem(ground); myCollisionList.addItem(ground3); myCollisionList
var myCollisionList:CollisionList = new CollisionList(Hero);
myCollisionList.addItem(ground);
myCollisionList.addItem(ground3);
myCollisionList.addItem(ground5);
myCollisionList.addItem(ground4);
这是我的代码部分,在这里用动画跳跃
if(Hero.y_speed>0 && myCollisionList.checkCollisions().length > 0 )
{
Hero.y_speed=0;
Hero.x_speed=0;
if(space)
{
if (ground.hitTestPoint(Hero.x + 28, Hero.y+20, true))
{
Hero.gotoAndStop("attack");
stop();
Hero.y_speed = -20;
}
}
}
更新:
地图截图:
更新2:
这是将角色向左(向右)移动的部分代码,我知道这很糟糕,但我不知道如何使其更好
pakopos-冲突列表的名称
fonas-背景
您的代码非常神秘,因此在没有实际调试的情况下很难说出发生了什么,但我猜每次发布的代码运行时,您都会多次检查冲突。您应该检查所使用的
checkCollisions()
函数的文档,因为它似乎返回一个结果数组。它可能会为您提供在冲突列表中的对象中找到的所有冲突,这样您就不必直接调用hitTestPoint()
编辑:
我不熟悉您在代码中使用的CDK,但它返回一个碰撞结果数组,其中每个结果都有碰撞对象、它们的角度以及它们是否重叠。对于您试图做的事情,这似乎有些过分,但正如我所说,我对它不熟悉-它可能比hitTestPoint()
快得多
我建议只使用一次命中测试方法-使用CDK或使用hitTestPoint()
,但不能同时使用两者。两者都将为您提供像素完美的检测结果。如果使用CDK,请阅读有关checkCollisions()
工作原理的文档。你必须这样做:
...
var oResults:Array = pakopos.checkCollisions();
var nCount:int = oResults.length;
if (nCount > 0)
{
for ( var i:int = 0; i <nCount; i++ )
{
var oHit:Object = oResults[i];
// TODO check `oHit.object1` and `oHit.object2` to see which objects
// collided and do something based on that
// You may have multiple results since your hero may collide with
// 'ground' and 'ground4' at the same time.
}
}
。。。
var-oResults:Array=pakopos.checkCollisions();
var nCount:int=oResults.length;
如果(n计数>0)
{
对于(var i:int=0;i),如果代码位于类文件(.as)中,则不需要stop()
call。在我的另一个回答中,它在那里,因为代码在时间线上,并且环绕着。\sp代码会重复。地面有多大?ground
?它是位图还是矢量图像?是的,我的代码在.as文件中,所以我如何停止它?我只需要一次动画。地面是(640x60)位图。如果替换如果(地面.命中测试点(英雄.x+28,英雄.y+20,真))
和if(真)
?它仍然滞后吗?你发布的代码似乎还可以-它似乎不是你滞后的根源。如果你在舞台上只有几个物体,它不应该滞后,除非背景中有什么东西。你的帧速率是多少?在简单的“走”过程中,这里也有滞后动画。这意味着跳跃可以解决问题。我不知道帧速率。我以前也没有什么延迟,因为碰撞出了问题,正如您之前所说,可能代码检查碰撞次数过多。pasterlink.me/dl/9546d1这里是link.Script.as是我的主代码,但我不知道您是否会使用它站在我的代码后面…我不知道如何正确地使用checkCollisions()
而不使用hitTestPoint()
@RimantėBaltiejūtė我更新了我的答案并提供了更多信息。谢谢你的回答,但我还不太明白如何使用它。你能给我写一个例子让我向左移动吗?现在我使用它:(var i:int=0;如果玩家在地面上不能向左或向右移动,我和现在将出现问题,因为他们与地面发生碰撞。@RimantėBaltiejūtė在代码中查看CDK.as文件-findCollisions()
函数就是checkCollisions()
调用的函数。你也可以向制作CDK的人发帖提问。
...
var oResults:Array = pakopos.checkCollisions();
var nCount:int = oResults.length;
if (nCount > 0)
{
for ( var i:int = 0; i <nCount; i++ )
{
var oHit:Object = oResults[i];
// TODO check `oHit.object1` and `oHit.object2` to see which objects
// collided and do something based on that
// You may have multiple results since your hero may collide with
// 'ground' and 'ground4' at the same time.
}
}