我是AS3的新手,试图学习它。尝试创建游戏,主要时间线和许多动画片段。我在主时间轴中有一些变量,我想通过点击每个不同的动画片段来改变它们。比方说,我有舞台坐标cx和cy,然后我点击任何movieclip我想把这些变化改为动画片的坐标。我在这做了什么:
主要时间表
import flash.events.MouseEvent;
import fl.motion.Color;
import fl.motion.MotionEvent;
import fl.transitions.Tween;
import fl.transitions.easing.*;
import flash.display.InterpolationMethod;
var cx:int; //stage coordinate x;
var cy:int; //stage coordinate y;
var tx:int; //table coordinate x;
var ty:int; //table coordinate y;
c1.addEventListener(MouseEvent.CLICK, tracing);
c2.addEventListener(MouseEvent.CLICK, tracing);
function tracing(e:MouseEvent):void {
e.currentTarget.gotoAndPlay(1);
trace(cx,cy,tx,ty);
}
第一帧上的c1 movieclip(符号名称mc1)代码:
MovieClip(root).cx=0;
MovieClip(root).cy=0;
MovieClip(root).tx=0;
MovieClip(root).ty=0;
第一帧上的c2 movieclip(符号名称mc2)代码:
MovieClip(root).cx=85;
MovieClip(root).cy=85;
MovieClip(root).tx=85;
MovieClip(root).ty=85;
问:我总是得到我点击的第一个动画片段的价值。
我有点找到解决方案,但我不认为它应该是这样的,在每个mc1和mc2我做了第二个空关键帧,现在它的工作,但我不认为它应该像这样,我做错了什么,任何没有在动画片段中创建更多帧的方法吗?
答案 0 :(得分:0)
实际上听起来不对。我怀疑是因为你在到达第一帧之前进入了trace语句。但是,我鼓励你现在放弃这种方法,开始养成更好的习惯。
让儿童片段知道并操作更高层次的物体是一个奇妙的捷径 - 一个难以维护的混乱。相反,您应该使其上可用的cx,cy,tx,ty属性被读取或从中发送一个事件,从中可以推断出这些值。
以下是一个如何完成此任务的简单示例:
class MainDocument extends MovieClip { //presume these are stage instances public var c1:MovieClip; public var c2:MovieClip; public var valueRegistry:Dictionary = new Dictionary(); protected var cx:int; protected var cy:int; protected var tx:int; protected var ty:int; function MainDocument () { super(); if (c1) { valueRegistry[c1] = {cx:0, cy:0, tx:0, ty:0}; c1.addEventlistener(MouseEvent.CLICK, tracing); } if (c2) { valueRegistry[c2] = {cx:85, cy:85, tx:85, ty:85}; c2.addEventlistener(MouseEvent.CLICK, tracing); } } protected function tracing(e:MouseEvent):void { var mc:MovieClip = e.currentTarget as MovieClip; mc.goToAndPlay(1); var values:Object = valueRegistry[mc]; if (values) { cx = values[cx]; cy = values[cy]; tx = values[tx]; ty = values[ty]; } trace(cx, cy, tx, ty); } }
请注意现在你可以将这些mc变成任何东西 - 无论有没有自己的代码。我建议的一个优化是,如果cx,cy,tx,ty总是与仅使用该值而不是Object的值相同。