我有一个带有跳过框架标签的MC。目前,我可以检测它何时启动新标签,但我还希望能够重新启动操作,如果使用gotoAndPlay()调用当前标签,而不使用ENTER_FRAME每秒调用30次。知道如何过滤掉它吗?
private function onNewFrame(e:Event) {
if(e.target.currentLabel != _currentLabel) {
// started new label (working)
trace("New label: "+ e.target.currentLabel);
}else if(e.target.currentFrame == _currentFrame && e.target.isPlaying) {
// repeated frame (doesn't work)
trace("Repeated label: "+ e.target.currentFrame);
}
_currentFrame = e.target.currentFrame;
_currentLabel = e.target.currentLabel;
}
答案 0 :(得分:0)
据我了解,你需要知道接下来的两件事: 1)。当movieclip使用新的帧标签前进到下一帧时; 2)。当下一帧与前一帧具有相同的标签时。
首先,MovieClip没有“isPlaying”属性。这听起来不切实际,但没有内置方法来检查MC是否正在播放。所以e.target.isPlaying总是会返回false;因此,您的第二个“if”语句也将始终返回false。
此外,您根本不需要“isPlaying”检查,因为MovieClip仅在播放时调度Event.ENTER_FRAME。
所以这会奏效:
var testMc:TestMC = new TestMC();
testMc.addEventListener(Event.ENTER_FRAME, onNewFrame);
testMc.play();
private function onNewFrame(e:Event):void
{
if (e.target.currentLabel != _currentLabel)
{
// started new label (working)
trace("New label: " + e.target.currentLabel);
}
else if (e.target.currentFrame !== _currentFrame)
{
// started frame with the same label
trace("New frame with same label: " + e.target.currentFrame);
}
_currentFrame = e.target.currentFrame;
_currentLabel = e.target.currentLabel;
}
但也许我不明白你的问题?
答案 1 :(得分:0)
我最终通过在类构造函数中手动存储帧标签索引来解决此问题。 MovieClip属性currentFrameLabel应该处理这个问题,但是我的测试显示总是未定义。
public class DynamicMC extends MovieClip {
private var _currentLabel:String;
private var _currentFrame:int;
private var _labels:Object = {};
public function DynamicPlanComparison() {
super();
findLabels();
}
private function findLabels():void {
for(var i:uint = 0; i < currentLabels.length; i++) {
var l:FrameLabel = currentLabels[i];
_labels[l.name] = l;
}
}
private function onNewFrame(e:Event) {
if(e.target.currentLabel != _currentLabel) {
// started new label
trace("New label: "+ e.target.currentLabel);
}else if(_labels[e.target.currentLabel].frame == e.target.currentFrame) {
// repeated label
trace("Repeated label: "+ e.target.currentLabel);
}
_currentFrame = e.target.currentFrame;
_currentLabel = e.target.currentLabel;
}
}