【问题标题】:Action Script 3 (AS3) how MovieClip(root).MyVariable works?动作脚本 3 (AS3) MovieClip(root).MyVariable 如何工作?
【发布时间】:2013-04-13 13:09:50
【问题描述】:

我是 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 中我制作了第二个空关键帧,现在它可以工作了,但我认为它不应该是这样,我做错了什么,任何如何在影片剪辑中不创建更多帧?

【问题讨论】:

    标签: actionscript-3 flash animation flash-cs6


    【解决方案1】:

    这听起来确实不对。我怀疑这是因为您在到达第一帧之前到达了跟踪语句。不过,我建议您现在放弃这种方法,开始养成更好的习惯。

    让子剪辑了解和操作层次结构中更高的对象是一个绝妙的捷径——导致无法维护的混乱。相反,您应该使它们上的 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):无效{ 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。

    【讨论】:

    • 你在第二个 if 语句中有错字 c1.addEventListener 应该是 c2.addEventListener
    • 谢谢:)。复制粘贴。但是这段代码无论如何都不会像键入的那样工作,因为它不包括导入语句等。
    • 谢谢,看来我必须开始为更大的项目使用类,比如游戏。当我尝试在主 Flash 时间范围内编写所有内容时,得到了这么多行,其中许多以奇怪的方式连接,以至于我迷失在自己的代码中,因此尝试将其中的一些移动到子影片剪辑中。现在要学习 as3 中的使用类,再次感谢!!! :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-15
    • 2010-12-20
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 2013-10-19
    • 2012-02-20
    相关资源
    最近更新 更多