我在这个问题上花了14个小时。这是一个基本的碰撞检查器,可以在发生碰撞时设置MovieClip动画播放。该剪辑是如何停止在Flash CS6 AS3中播放动画片段(使用Box2D)
currentBallObject.clip。
它的工作原理。剪辑播放。但它一遍又一遍地重复着。
private function checkCollisions():void
{
var i = balls.length;
while (i--)
{
var currentBallObject = balls[i];
if (currentBallObject.contact)
{
//condition hits ground
if (currentBallObject.ground)
{
currentBallObject.body.SetPosition(new b2Vec2(currentBallObject.startX/PIXELS_TO_METRE, currentBallObject.startY/PIXELS_TO_METRE));
currentBallObject.body.SetLinearVelocity(new b2Vec2(0, 0));
currentBallObject.body.SetAngularVelocity(0);
//currentBallObject.texture.pop();
}
else // it hit player
{
// assign clip texture to current position
currentBallObject.clip.x = currentBallObject.body.GetPosition().x * PIXELS_TO_METRE;
currentBallObject.clip.y = currentBallObject.body.GetPosition().y * PIXELS_TO_METRE;
// whisk old object away
currentBallObject.body.SetPosition(new b2Vec2(currentBallObject.startX/PIXELS_TO_METRE, currentBallObject.startY/PIXELS_TO_METRE));
currentBallObject.body.SetLinearVelocity(new b2Vec2(0, 0));
currentBallObject.body.SetAngularVelocity(0);
currentBallObject.contact = false;
}
}
}
}
我加入这个代码删除影片剪辑或以某种方式摆脱它,它已经通过一次打后。 (42帧)。我也尝试添加一个frameListener和至少一打其他建议。当我添加
stop()
动画不能播放。它只是加载最后一帧。我现在的代码是:
private function updateClips():void
{
var i = balls.length;
while (i--)
{
var currentBallObject = balls[i];
if(currentBallObject.clip)
{
var frame:int = currentBallObject.clip.currentFrame;
//trace(currentBallObject.clip.currentFrame);
if(frame == 42)
{
currentBallObject.clip._visible = false;
currentBallObject.clip.removeMovieClip();
currentBallObject.clip.enabled = -1;
}
}
}
}
我试着计算框架,把它一次性执行的功能,架出口听众,我的想法。我只是想让一个MovieClip运行一次。我也尝试在时间轴上放置stop(),然后动画不播放。它只是加载最后一帧。
现在碰撞工作,但动画永远留在屏幕上,永远循环。
编辑:我得到了帕特里克的代码运行没有错误。
我添加事件侦听器与其他这样的:
_input = new Input(stage);
...
addEventListener(Event.ENTER_FRAME, oEF);
addEventListener(Event.ENTER_FRAME, update);
time_count.addEventListener(TimerEvent.TIMER, on_time);
time_count.start();
}
然后创建了一个功能:
private function oEF(e:Event):void{
var i = balls.length;
while (i--)
{
var currentBallObject = balls[i];
if (currentBallObject.clip.currentFrame >= currentBallObject.clip.totalFrames)
{
currentBallObject.clip.stop();
currentBallObject.clip.removeEventListener(Event.ENTER_FRAME, oEF);
if (currentBallObject.clip.parent) currentBallObject.clip.parent.removeChild(currentBallObject.clip);
}
}
}
但我仍然得到同样的问题,因为任何其他结果。 MovieClip在联系中消失而不会发生动画。
通过调试我学到了更多。 currentFrame的值从1-40开始,然后在剩下的执行过程中保持在40。 因此,MovieClip始终位于每个对象的最后一帧。
谢谢。但我得到这些错误。 未定义的方法addEventListener通过ref。静态类型的类。 访问未定义的属性oEF。 正在使用像“lightball.addEventListener(Event.ENTER_FRAME,oEF” 轻球是库中的剪辑名称,我不明白如何让我的剪辑成为'这个'。 – 2015-02-24 22:31:25