2013-04-13 45 views
0

我是AS3的新手,試圖學習它。試圖創造遊戲,主要時間線和許多影片剪輯。我在主時間線上有一些變量,並且我想通過單擊每個不同的動畫片段來每次更改它們。讓我說,我有舞臺座標cx和cy,然後我點擊任何movieclip我想改變這些變量的movieclip座標。在這裏我做了什麼:動作腳本3(AS3)MovieClip(root).MyVariable的工作方式?

主時間軸

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我做了第二個空關鍵幀,現在它的工作,但我不認爲它應該是這樣的,我做錯了什麼,有什麼辦法可以在movieclip中創建更多的幀?

回答

0

實際上聽起來不對。我懷疑這是因爲在到達第一幀之前你已經看到了跟蹤語句。不過,我鼓勵你現在放棄這種方法,並開始建立更好的習慣。

有孩子的剪輯知道和操作對象更高的對象是一個奇妙的捷徑 - 一個難以維繫的混亂。相反,您應該使它們上可用的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); 
    } 

}

注意您可以現在怎麼讓那些三菱商事的是什麼字面上 - 帶或不帶自己的代碼。我建議的一個優化是,如果cx,cy,tx,ty總是與使用該值而不是Object的值相同。

+0

如果語句'c1.addEventListener'應該是'c2.addEventListener',那麼在第二行中有一個錯字。 – rcdmk

+0

謝謝:)。複製粘貼。但是這個代碼無論如何都不能像輸入那樣工作,因爲它不包括導入語句等。 –

+0

謝謝,看來我必須開始使用類來進行更大的項目,比如遊戲。當我試圖在主閃存時間框架中編寫所有內容時,出現了很多線條,其中很多都是以怪異的方式連接的,我迷失在自己的代碼中,因此試圖將其中的一部分移至子視頻片段。現在要在as3中學習使用類,並再次感謝! :) –