Action Script 3.0 from 2.0 Falling Randomly Places Objects 和倒数计时器

Posted

技术标签:

【中文标题】Action Script 3.0 from 2.0 Falling Randomly Places Objects 和倒数计时器【英文标题】:Action Script 3.0 from 2.0 Falling Randomly Placed Objects and a countdown timer 【发布时间】:2016-02-25 04:35:13 【问题描述】:

在我教给学生的 Flash 动画课程中寻求帮助。 对代码不是太熟悉,我基本上可以做到这一点

我的动画有四个图层。背景、雪景、计时器和动作脚本。

我的雪层上有以下代码(上面有一个简单的白色椭圆)

onClipEvent (load) 
    movieWidth=550;
    movieHeight=400;

    i=1+Math.random()*2;
    k = -Math.PI+Math.random()*Math.PI;

    this._xscale = this._yscale=50+Math.random()*100;
    this._alpha = 60+Math.random()*100;
    this._x = -10+Math.random()*movieWidth;
    this._y = -10+Math.random()*movieHeight;



onClipEvent (enterFrame)

    rad += (k/180)*Math.PI;
    this._x -= Math.cos(rad);
    this._y += i;
    if(this._y>=movieHeight)
        this._y = -5;
    
    if((this._x>=movieWidth) || (this._x<=0))
        this._x = -10+Math.random()*movieWidth;
        this._y = -5;
    

这在我的动作脚本层

this.onEnterFrame = function()

    var today:Date = new Date();
    var currentYear = today.getFullYear();
    var currentTime = today.getTime();
    var targetDate:Date = new Date(currentYear, 11, 25);
    var targetTime = targetDate.getTime();
    var timeLeft = targetTime - currentTime();
    var sec = Math.floor(timeLeft/1000);
    var min = Math.floor(sec/60);
    var hours = Math.floor(min/60);
    var days = Math.floor(hours/24);

    sec = String(sec % 60);
    if(sec.length < 2)
        sec = "0" + sec;
    

    min = String(min % 60);
    if(min.length < 2)
        min = "0" + min;
    

    hours = String(hours % 24);
    if(hours.length < 2)
        hours = "0" + hours;
    

    days = String(days)
    var counter:String = days + " Days\n" + hours + ":" + min + ":" + sec;
    time_txt.text = counter;



for (k=0; k<100; k++)
    duplicateMovieClip(this.snow, "snow"+k, k);

我知道这以前在 AS2 中有效,但我无法让它工作。

目前遇到一个语法错误,当我使用旧版本时不存在该错误

非常感谢任何帮助

谢谢

【问题讨论】:

你的代码看起来不错,除了这一行:var timeLeft = targetTime - currentTime(); 应该是:var timeLeft = targetTime - currentTime;currentTime 是一个 var 而不是一个函数... 如果你用它来教学,最好在 AS3 中重新打包 - 摆脱时间线代码并向他们展示如何设置,他们会在哪里找到更多示例自己探索。 Gone3D - 这是给获得代码的学生的“学期最后一周”活动。对他们来说,看看在 Flash 中可以实现什么是一件很有趣的事情。不幸的是,我的专长仅限于 Motion Tween 和 Shape Tween 以及一些用于制作简单动画的点点滴滴。以前有圣诞节倒数计时器的学生喜欢这样做(虽然,我将使用星球大战作为我的例子)正在这样做的学生是 11/12 岁,并且对“键入”代码的经验也有限 @OLi 你看到我的第一条评论了吗?!您的 ActionScript 2 代码很好,除了以下行:var timeLeft = targetTime - currentTime(); ...我也不知道您为什么在问题中提到了 ActionScript 3?! @akmozo 感谢您的耐心等待。当它支持AS2时,我用旧版本的Flash制作了这个,我拥有的新版本,它根本不起作用。它不支持任何 AS3。 【参考方案1】:

您正在使用带有 flash player 5 元素的 flash player 6 语法(onClipEvent() 处理程序可分配给时间轴上的影片剪辑)。我不认为人们现在可能期望看到这样的东西......因为它在 2001 年底开始变得过时,当时出现了(几乎)完全符合 ECMA262 的 ActionScript 1.0 的 FP 6。

无论如何,您可以在将File -&gt; Publish Settings... -&gt; Script 选项设置为ActionScript 1.0 或ActionScript 2.0 后进行编译。您的代码确实以这种方式工作,我复制并粘贴它以确保。请注意将onClipEvent() 代码放在雪夹上,而不是放在时间轴框架上。这是处理事件的 FP5 方式。其余代码进入时间线框架(我想这就是你所做的)。

您可能还需要更改目标 Flash Player 版本,以防您的 IDE 不允许您在没有此功能的情况下将脚本版本设置为 1.0(对于 Flash Pro CS6,情况并非如此)。

工作示例(在 CS5 或更高版本中打开):snowCS5.fla

【讨论】:

我查看了您建议的路径,我无法将输出从 3.0 更改为 2.0。还有其他建议吗?感谢您抽出宝贵时间回复 @OLi 我已经更新了答案,希望对您有所帮助...因为您的代码虽然古老,但确实有效。 :) 如果无法编译,请提供错误文本。 没有错误,因为我的版本不允许我选择除 AS1 之外的任何其他脚本虽然,我确实收到错误消息,指出第 1 行中预期缺少括号... @OLi 抱歉,您之前说您无法从 3.0 更改版本,现在您说 1.0 是您唯一可用的选项。 A 在我的答案中添加了一个工作 fla 文件,不知道我还能在这里做什么。 感谢您这样做并为错误道歉。我在学校里忙着做其他事情!我的意思是我只能在 AS3 上进行设置!!!很抱歉造成混乱!

以上是关于Action Script 3.0 from 2.0 Falling Randomly Places Objects 和倒数计时器的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flash CC/Action Script 3.0 中创建自定义 MovieClip 边界?

如何在 Adob​​e Flash Professional CS6 Action Script 3.0 中阻止可移动对象(通过箭头键移动)离开舞台

清理WordPress 3.0+头部

Cocos2d 3.0 中的 3D Action Effects 发生了啥变化?

自动挡换手动挡:在 ASP.NET Core 3.0 Middleware 中手动执行 Controller Action

Action Script 3. 如何在 Flash 中访问 Movie Clip 中的按钮?