2011-07-30 19 views
0

我有一些在Flash Professional CS5中可視化創建的類,將繪製的結果轉換爲MovieClip並將符號敲入AS代碼。現在,我想爲課程添加一些屬性。更具體地說,我創建了Ball類,並且想要添加代表垂直和水平速度的變量。我如何編輯課程才能做到這一點?另外,當我想爲類添加一些可見的外部元素時,起初我決定在代碼本身中添加MovieClip屬性,但後來調用了方法.addChild(),這對我來說非常合適。現在,我無法對不可見的屬性進行同樣的操作。那麼,使用.addChild()添加可見元素並將它們添加到代碼本身之間有什麼區別?如何在代碼本身中添加任何內容?在AS3中編輯視覺創建的類

回答

1

您應該避免將物理與實際視覺表示混合。嘗試製作一個球類,其中包含velocityX,velocityY以及對MovieClip的引用。使球類持有update(),這可能會是這個樣子:

public function update() : void { 
    ballMovieClip.x += velocityX; 
    ballMovieClip.y += velocityY; 
} 

在主類,你可以使用Event.ENTER_FRAME -event調用ball.update();

這種方式可以獨立更新你球的圖形和物理代碼。

1

您可以通過擴展或包裝容器類來修改Flash導入的類。

這個包裝是我在我的兩款遊戲中選擇的方法。我用它來添加各種繪製相關的屬性或附加對象。

public class WrapperOverSprite extends Sprite 
{ 
    private var instanceFromFlash: SomeClassTypeFromFlashViaSWC: new SomeClassTypeFromFlashViaSWC(); 
    //Add whatever other variables you wish. 

    public function WrapperOverSprite () 
    { 
    //Do stuff to your object. 
    } 

    //Can add whatever functions you wish... 
} 

不用說,這種方法,我用的通過,我在Flash/Flex Builder中導入的SWC文件導出從Flash對象。

2

您需要做的是創建一個外部ActionScript文件來保存類定義。做一個文件,把它Ball.as,並與

package { 
    import flash.display.*; 
    import flash.events.*; 

    public class Ball extends MovieClip { 

     public var vx:Number = 0; 
     public var vy:Number = 0; 

     // add more variables here 

     public function Ball() { 

     } 

     // add more functions here. 

    } 

} 

填補它在這一類中,你可以把所有你想要的函數和變量,並能夠從時間軸代碼訪問它們。將它放在與.fla相同的文件夾中,然後將球的MovieClip導出爲Ball,並將其擴展爲flash.display.MovieClip。 Flash將找到該類的定義並用它來代替生成的類。

注:

  • 如果/當你添加更多的功能或變量,不要忘記添加訪問修飾符。 (公共,私人,受保護)
  • 如果您更改與.fla相關的文件夾,則需要更改軟件包,因此,如果您爲遊戲的所有源創建了com/mygame文件夾,你可以將第一行改爲「package com.mygame {」,並將MovieClip導出爲「com.mygame.Ball」。
  • 您可能必須將類更改爲動態類,方法是在public和class之間添加關鍵字「dynamic」。這意味着您可以在運行時向該類添加屬性,但速度會受到影響。

我不明白你的意思是「添加不可見的屬性」。addChild()函數應該適用於所有DisplayObjectContainer(Sprite和MovieClip,特別是)的子類,並且應該適用於DisplayObject的所有子類(包括Sprite,MovieClips,Bitmap,TextFields和Shapes)

+0

這是要走的路。 +1 – pkyeck