在使用 Flash 8 多年后,我将在工作中转向 CS3。我知道我必须学习 AS 3.0,所以,有人对主要/最显着的变化有任何好的参考或总结吗?此外,闪存环境是否有任何提示/技巧?在 CS3 中花了几分钟后,我注意到你不能直接将 actionscript 附加到按钮,这对我来说是新的。还有其他类似的陷阱需要注意吗?
3 回答
大约 3 个月前,我进行了彻底的转变,以下是一些帮助我快速提升的事情:
1)在类文件中做所有事情
那里的许多 AS3 教程只处理粘贴在时间线上的代码(我无法忍受,因为现在你必须寻找你需要的导入),但对于快速的小东西来说很好。从长远来看,最好主要在类文件中工作。学习 Classes 的工作方式为我打开了一扇大门,这与我第一次在 AS2 中发现 Functions 时的感受/体验相同 :)
2) 将图形保存在库中并远离工作区
例如,您有一个刚刚导入库的 jpg、gif、png 文件。制作了一个movieClip并给它一个类名(MyButton
)。现在下面的代码将为您将图形放入工作区:
var myButton:MovieClip = new MyButton();
myButton.x = 6;
myButton.y = 22;
myButton.buttonMode = true;
addChild(myButton);
3) 习惯 AS3 中的新按钮代码
这是我们所有新皈依者都必须痛苦地处理的事情,但现在它是小菜一碟:)
myButton.addEventListener(MouseEvent.MOUSE_UP, clickThis);
function clickThis(event:MouseEvent):void
{
navigateToURL(new URLRequest("form.html"), "_self");
//navigateToURL(request, '_self');
}
4) 确保在使用后移除事件监听器
我花了一点时间来解决这个问题……为什么要删除它们?哦,它们仍在后台运行,当我再次收听时,我会收到各种变异错误。
private function volDown(e:MouseEvent):void
{
masker.width = volControl.mouseX;
userVolume = (masker.width / 100) * 1;
volControl.addEventListener(MouseEvent.MOUSE_MOVE, volMove);
}
private function volUp(e:MouseEvent):void
{
lastVolPoint = masker.width;
setVolume(userVolume);
e.updateAfterEvent();
volControl.removeEventListener(MouseEvent.MOUSE_MOVE, volMove);
}
5) 不要忘记传递事件
我不是一名程序员,这造成了如此多的悲痛,我很高兴我已经摆脱了这种分娩的痛苦:
myButton.addEventListener(MouseEvent.MOUSE_UP, clickThis);
由于 clickThis 函数是通过事件启动的,因此您必须将:传递event:MouseEvent
给它,如下所示:
function clickThis(event:MouseEvent):void
因为下面的代码会抛出可怕的 AS3“未定义属性访问”错误,新的 AS3 人总是会遇到。
function clickThis():void
6) 阅读并在 StackOverflow 上发布问题......很多!
顺便说一句,我仍然是一个菜鸟,最初是一名设计师,然后是 AS2 开发人员,我仍然不知道为什么我们将 :void 放在函数名称后面。如果我们有相似的编码背景,我希望这一切都会有所帮助:)
获取 Actionscript 3 IDE。例如 Flash Builder、FlashDevlop 或 FDT。这将迫使你学习得非常快。
我建议您查看Adobe devnet 上的ActionScript 语言迁移页面。它提供了很多关于 ActionScript 3 的关键变化的文章。
要回答您对按钮操作的问题,这不再有效(并且已经使用 ActionScript 2 不是最好的方法)。AS3 要求代码集中在时间线上。因此,为了给按钮一些操作,您需要给它一个实例名称并为 CLICK 事件添加一个事件侦听器,如下所示:
function doSomething ( event:MouseEvent ):void
{
trace( "test" );
}
myButton.addEventListener( MouseEvent.CLICK, doSomething );