【问题标题】:Record movements in adobe flash cs5在 adobe flash cs5 中记录动作
【发布时间】:2012-03-19 15:10:30
【问题描述】:

有人可以在拖动对象时帮助录制动作吗?当对象被放下时,录制事件将停止,录制的动作将通过“播放”按钮进行动画处理。

【问题讨论】:

    标签: flash flash-cs5


    【解决方案1】:

    设置一个数组来存储记录的信息:

    var recording:Array = [];
    

    设置一个向这个数组添加信息的方法:

    function record(target:MovieClip):void
    {
        recording.push(new Point(target.x, target.y));
    }
    

    开始拖动对象时执行此操作:

    recording.length = 0;
    
    addEventListener(Event.ENTER_FRAME, _record);
    function _record(e:Event):void
    {
        record(yourObject);
    }
    

    当您停止拖动对象时执行此操作:

    removeEventListener(Event.ENTER_FRAME, _record);
    

    点击回放时执行此操作:

    recording.reverse();
    
    addEventListener(Event.ENTER_FRAME, _playRecording);
    function _playRecording(e:Event):void
    {
        var step:Point = recording.pop();
    
        yourObject.x = step.x;
        yourObject.y = step.y;
    
        if(recording.length < 1)
            removeEventListener(Event.ENTER_FRAME, _playRecording);
    }
    

    存储您记录的数据以备后用:

    您可以使用此方法将您的recording 数组转换为字符串:

    function collapse(data:Array):String
    {
        var joined:Array = [];
    
        for each(var point:Point in data)
        {
            joined.push(Math.round(point.x) + ":" + Math.round(point.y));
        }
    
        return joined.join("$");
    }
    

    最终会是这样的:

    trace(collapse(recording)); // 48:47$29:19$4:26$20:35$1:48$3:16$12:24$27:30$0:24$19:48
    

    然后您就可以使用它来创建您的 recording 数组:

    function expand(data:String):Array
    {
        var out:Array = [];
        var base:Array = data.split("$");
    
        for each(var fragment:String in base)
        {
            var coords:Array = fragment.split(":");
            var point:Point = new Point(coords[0], coords[1]);
    
            out.push(point);
        }
    
        return out;
    }
    

    像这样工作:

    var previousData:String = "48:47$29:19$4:26$20:35$1:48$3:16$12:24$27:30$0:24$19:48";
    var recording:Array = expand(previousData);
    
    trace(recording); // (x=48, y=47),(x=29, y=19),(x=4, y=26),(x=20, y=35),(x=1, y=48),(x=3, y=16),(x=12, y=24),(x=27, y=30),(x=0, y=24),(x=19, y=48)
    

    【讨论】:

    • 谢谢 Marty 先生,我目前正在为我的期末项目开发我的篮球剧本应用程序。您能否帮助我捕捉当前的屏幕状态并使用按钮..这样我就可以加载和保存播放
    • 所以您正在寻找一种将保存文件存储为稍后可以加载的字符串的方法?
    • 先生,我可以发送我的项目吗?以便您可以看到我的申请?
    • 先生,我刚刚遇到函数 _record(e:Event) 的错误:void { record(yourObject);场景 1,图层“动作”,第 1 帧,第 328 行 1046:找不到类型或不是编译时常量:事件。感谢您的帮助
    • 你需要import flash.events.Event;
    猜你喜欢
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多