我对 ActionScript 3 很陌生,我一直在尝试在类文件中执行以下操作。我试图在网上寻找解决方案,但找不到合适的答案,可能是因为我没有寻找正确的搜索词等。
无论如何,我正在尝试在 Adobe Animate CC 中的 FLA 文件“Campfire.FLA”中制作基本动画,其中在 Campfire 上按下鼠标会导致附着在悬浮棒上的一块煤炭发光,然后冷却松开鼠标按钮。在主时间线上,我可以很好地执行它,但我想将信息传输到类文件/文档文件中,但无济于事。
该代码是我在 FLA 的主时间轴第 1 帧上使用的代码,它在下面工作得非常好:
stop();
/* Instance names:
Fire = Instance of "FireButton"; simplebutton.
STween = Instance of "Stick Tween"; MovieClip, simple tween animation the object, "MarshmallowStick" moving.
Stick = Instance of "Marshmallow Stick"; MovieClip.
CoalRock = Instance of "Coal"; MovieClip.
*/
Fire.addEventListener(MouseEvent.MOUSE_DOWN, RockHot)
function RockHot(e: MouseEvent): void {
stopPlayReverse();
// Causes Coal and Stick to play their animation upon clicking Fire.
STween.Stick.play();
STween.Stick.CoalRock.play();
}
Fire.addEventListener(MouseEvent.MOUSE_UP, RockCold)
function RockCold(e: MouseEvent): void {
STween.Stick.CoalRock.addEventListener(Event.ENTER_FRAME, playReverse, false, 0, true);
STween.Stick.gotoAndPlay(1);
// Upon letting go of mouse button, it causes the coal to cool down/ play reverse. Stick resets to Frame 1.
}
function playReverse(e: Event): void {
if (STween.Stick.CoalRock.currentFrame == 1) {
stopPlayReverse();
// If Coal is back on Frame 1, it stops.
} else {
STween.Stick.CoalRock.prevFrame();
// If Coal is not on Frame 1 it continues going reverse where it left off.
}
}
function stopPlayReverse(): void {
if (STween.Stick.CoalRock.hasEventListener(Event.ENTER_FRAME)) {
STween.Stick.CoalRock.removeEventListener(Event.ENTER_FRAME, playReverse);
// Stops the function playreverse()
}
}
但是,在尝试将信息迁移到 ActionScript 文件时,我遇到了几个问题。首先,我尝试为上面的每个对象创建一个 ActionScript 3 类文件,其中大部分信息都是空白的,因为我不知道如何在它们之间通信事件处理程序。MovieClips 的大部分信息都没有信息,“MarshmallowStick”如下:
package {
import flash.display.MovieClip;
public class MarshmallowStick extends MovieClip {
public function MarshmallowStick() {
// Empty, no constructor code.
}
}
}
对于“火”类文件,我尝试了类似的东西:
package {
import flash.display.*;
import flash.events.*;
import Coal;
public class FireButton extends SimpleButton {
public var CoalRock = Coal;
public function FireButton() {
Coalrock = new Coal ();
this.addEventListener(MouseEvent.CLICK, RockHot)
function RockHot(e: MouseEvent): void {
CoalRock.play();
trace("OK");
trace(CoalRock);
}
}
}
}
然而,经测试发现,该文件似乎只是创建了一个名为 CoalRock 的新对象,与主舞台上的对象无关。因此,单击 FireButton 只会播放新对象。
我尝试在名为“Main.as”的文件中创建如下所示的文档类:
package {
import flash.display.*;
import flash.events.*;
public class Main extends MovieClip {
public var Fire: FireButton;
public var CoalRock: Coal;
public var Stick: MarshmallowStick;
public var STween: StickTween;
public function Main() {
CoalRock = new Coal();
Fire = new FireButton();
Stick = new MarshmallowStick();
/*
addChild(Fire);
addChild(CoalRock);
addChild(Stick);
addChild(STween);
*/
// RIP, well it's pretty much the same code as above. Just without the nested symbols/ objects.
Fire.addEventListener(MouseEvent.MOUSE_DOWN, RockHot)
function RockHot(e: MouseEvent): void {
stopPlayReverse();
//Eye + Emblem glow
Stick.play();
CoalRock.play();
trace("OK");
}
Fire.addEventListener(MouseEvent.MOUSE_UP, RockCold)
function RockCold(e: MouseEvent): void {
CoalRock.addEventListener(Event.ENTER_FRAME, playReverse, false, 0, true);
Stick.gotoAndPlay(1);
}
function playReverse(e: Event): void {
if (CoalRock.currentFrame == 1) {
stopPlayReverse();
} else {
CoalRock.prevFrame();
}
}
function stopPlayReverse(): void {
if (CoalRock.hasEventListener(Event.ENTER_FRAME)) {
CoalRock.removeEventListener(Event.ENTER_FRAME, playReverse);
}
}
}
}
}
addChild()
但事实证明,据我测试,它只影响通过井添加的对象。但这样做的主要目的是让脚本影响主舞台/场景中已经存在的对象。
如果您想查看它的播放方式/假设播放方式,您可以获取主时间线代码并将其粘贴到 FLA 文件中,其中包含提供的实例。
我不知道 Stack 将如何格式化它。// 假设是多行注释。