当经典补间在第一秒不使用 stop() 时如何解决?

Posted

技术标签:

【中文标题】当经典补间在第一秒不使用 stop() 时如何解决?【英文标题】:How to solve when a classic tween is not working with stop() at the first second? 【发布时间】:2019-08-24 02:52:16 【问题描述】:

如何在使用 stop() 命令的动作脚本编码中使用经典补间运动来解决对象不移动的问题?在我的时间线上,我的对象在经典补间动画中运行良好。但是当我按下 ctrl enter 时,对象并没有随着动作移动。

我已经尝试过“gotoAndStop”和“gotoAndPlay”命令。

下面的代码是第一个场景编码,有一个按钮。按下按钮,会进入场景二。


import flash.events.MouseEvent;

stop();

GWbtn.addEventListener(MouseEvent.CLICK, China);
function China(e:MouseEvent):void
    gotoAndPlay(1, 'Scene 2');


在场景二中,我在时间轴中为一个对象创建了一个经典的补间,我在编码中包含了 stop() 命令,如下所示。当 ctrl 进入时,补间不起作用。

import flash.events.Event;
import flash.events.MouseEvent;

stop();

nextbtn1.addEventListener(MouseEvent.CLICK, next1);
function next1(event:MouseEvent):void
    gotoAndPlay(17);


我希望我的对象的输出随着经典补间和 stop() 命令移动。

【问题讨论】:

我会说这是预期的行为 - 因为您在场景 2 的第一帧放置了 stop() 命令,并且在单击中国时帧头移动到那里。这个 stop() 命令的目的是什么? 【参考方案1】:

问题在于场景 2 帧 1 有一个 stop();在你的代码中。这样做可以在第 16 帧停止补间:

import flash.events.Event;
import flash.events.MouseEvent;

//stop(); //remove this line

addEventListener(Event.ENTER_FRAME, checkFrame);
function checkFrame(event:Event):void 
    if (currentFrame == 16) 
        removeEventListener(Event.ENTER_FRAME, checkFrame);
        stop();
    


nextbtn1.addEventListener(MouseEvent.CLICK, next1);
function next1(event:MouseEvent):void
    nextbtn1.removeEventListener(MouseEvent.CLICK, next1);  //also kindly add this, its good practice
    removeEventListener(Event.ENTER_FRAME, checkFrame);
    gotoAndPlay(17);

【讨论】:

感谢您的帮助@user1234567

以上是关于当经典补间在第一秒不使用 stop() 时如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

在flash如何制作一个的鼠标跟随特效

如何在使用 pop 时重新加载或调用一些函数 initState()

如何在按钮按下时通过动画进行文本转换?

当第一次调用 stop() 方法时,计步器插件会出错

在Vue中使用GSAP完成动画(三)动画事件

一秒内诊断 Linux 服务器的性能