0

我是 AS3 的新手,正在努力学习它。尝试创建游戏,其中包含主要时间线和许多电影剪辑。我在主时间轴中有一些变量,我想每次都通过单击每个不同的影片剪辑来更改它们。比方说,我有舞台坐标 cx 和 cy,然后我单击任何我想将这些变量更改为电影剪辑的坐标的影片剪辑。这是我所做的:

主要时间线

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 影片剪辑(符号名称 mc1)代码:

MovieClip(root).cx=0;
MovieClip(root).cy=0;
MovieClip(root).tx=0;
MovieClip(root).ty=0;

第一帧上的 c2 影片剪辑(符号名称 mc2)代码:

MovieClip(root).cx=85;
MovieClip(root).cy=85;
MovieClip(root).tx=85;
MovieClip(root).ty=85;

问题是我总是得到我点击的第一个电影剪辑的价值。我找到了解决方案,但我认为它不应该是这样,在每个 mc1 和 mc2 中我制作了第二个空关键帧,现在它可以工作了,但我认为它不应该是这样的,我做错了什么,任何在movieclips中不创建更多帧的方法?

4

1 回答 1

0

这实际上听起来不太对劲。我怀疑这是因为您在到达第一帧之前到达了跟踪语句。但是,我鼓励您现在放弃这种方法并开始养成更好的习惯。

让子剪辑了解并操作层次结构中更高的对象是一个绝妙的捷径——导致无法维护的混乱。相反,您应该使它们上的 cx、cy、tx、ty 属性可供读取,或者从它们分派一个事件,从中可以推断出这些值。

这是一个简单的示例,说明您如何完成此操作:

类 MainDocument 扩展 MovieClip {
   //假设这些是舞台实例
   公共变量 c1:MovieClip;
   公共 var c2:MovieClip;
   public var valueRegistry:Dictionary = new Dictionary();
   受保护的 var cx:int;
   受保护的 var cy:int;
   受保护的 var tx:int;
   受保护的变量:int;
   函数 MainDocument () {
       极好的();
       如果(c1){
           valueRegistry[c1] = {cx:0, cy:0, tx:0, ty:0};
           c1.addEventlistener(MouseEvent.CLICK, tracking);
       }
       如果(c2){
           valueRegistry[c2] = {cx:85, cy:85, tx:85, ty:85};
           c2.addEventlistener(MouseEvent.CLICK, 追踪);
       }
   }
   受保护的函数跟踪(e:MouseEvent):void {
      var mc:MovieClip = e.currentTarget as MovieClip;
      mc.goToAndPlay(1);
      变量值:对象 = valueRegistry[mc];
      如果(值){
         cx = 值[cx];
         cy = 值[cy];
         tx = 值[tx];
         ty = 值[ty];
      }
      跟踪(cx,cy,tx,ty);
   }

}

请注意,现在您可以如何使这些 mc 成为任何东西——无论有没有他们自己的代码。我建议的一种优化是,如果 cx、cy、tx、ty 始终是相同的值,则仅使用该值而不是 Object。

于 2013-04-13T16:36:36.790 回答