2015-08-21 53 views
0

我是AS3的新手。我有2個文件:Var錯誤地重置自己在AS3

main.as:

package 
{ 
    import flash.display.*; 
    public class Main extends Sprite 
    { 
     public function Main() 
     { 
      var f0:Flower = new Flower("rose"); 
      var f1:Flower = new Flower("daisy");  
     } 
    } 
} 

Flower.as:

package 
{ 
    public class Flower 
    { 
     public var namex:String; 
     public function Flower(name:String) 
     { 
      trace("Previous public var name: " + namex); 
      namex = name; 
     } 
    } 
} 

基本上,我得到了我的輸出2個零點。第一個我明白爲什麼;當我第一次觸發

var f1:Flower = new Flower("rose"); 

它調用花的函數,並要求一個尚未設置的var的跟蹤,所以我們得到一個null。跟蹤後,它設置變量與

namex = name; 

這是值字符串上升。但是當我觸發花雛菊時,我認爲(在我看來)接收到這個信息:「以前的公開變種:玫瑰花」,因爲當我們觸發玫瑰花時,我們告訴他將公共變種namex設置爲我們第一個的值主要提供(玫瑰)。 那麼,爲什麼我會得到2個空值而不是1個空值,而不應該是另一個「以前的公共變量:玫瑰」;

另一件事,我能得到什麼

var f1:Flower = new Flower("rose"); 

不會完全解釋清楚?它創建一個對象嗎?一個實例?或者它只是爲flower.as中的函數提供一個值(玫瑰)?

+0

閱讀AS3 OOP教程。這是基本的面向對象的東西。只有靜態變量在類實例之間共享。你的namex變量沒有被設置爲static ...所以對於Flower類的每個實例它都是不同的。 – Iansen

+0

這些實例是否曾經在main.as中觸發過的地方保存過?什麼是實例?價值「上漲」?正如我所說,我是一名初學者;這對我來說不是基本的。順便說一句我把公共變量設置爲「公共靜態變量」,現在我得到一個錯誤:null。 – RunningFromShia

回答

1

您的代碼:
var f1:Flower = new Flower("rose");

創建Flower類型的對象的一個​​新實例,並將其分配給變量f1。它將字符串「rose」傳遞給Flower類的構造函數。

正如蘭森所說,Flower的每個實例都將擁有自己的namex變量,並具有獨立的值。

在這一點上,我認爲,如果你退後一步,學習面向對象編程的一些基礎知識,而不是撞你的頭靠在你的東西沒有一個基本的瞭解,將更有效率。這本書是一個很好的開始:Essential ActionScript 3.0

+0

加上1爲書推薦。獲取使用的副本可能是一個好主意。 – null

+0

我會看看那本書,但是輸入「Flower」是什麼意思?我的意思是,我知道有些類型叫做「MovieClip」,「Button」,「Graphic」等等......只是不確定當你給對象名稱一個同名的類型時它會發生什麼。 – RunningFromShia

0

but what does type "Flower" mean? I mean, I know there are types called "MovieClip" etc... just not sure what it does when you give the object name a type with the same name

它可能更有意義給你,如果你的代碼就這個樣子。 。?

import flash.display.*; 
import Flower; 

但「進口」花是這裏沒有必要那麼它仍然有效。一切存在爲代碼因此,在幕後想象當您製作新的MovieClip類型變量時,Flash會使用「MovieClip.as」文件。高級編碼器甚至可以用自己定製的相同名稱來覆蓋內置函數等。

所以典型的代碼是:variable Name : Type = new Type();

托架/ 2型括號();告訴我們它的一個功能,所以現在代碼將運行一個與Type相同名稱的函數,它在您的代碼中表示執行此操作。「我的變量f1Flower.as通過函數public function Flower (name:String)生成」。在這裏,您正在「初始化」變量/類型,以便您可以從現在開始在不同的引用名稱下創建多個AND「唯一」相同代碼的實例。

看看這個例子的代碼可以幫助你......(還展示瞭如何通過&您兩類
Main.as之間獲取信息的基本方法

package 
{ 

import flash.display.*; 

public class Main extends Sprite 
{ 
    public var f0 : Flower = new Flower("rose"); 
    public var f1 : Flower = new Flower("daisy"); 

    public function Main() 
    { 
     Do_Something1(); //runs a function called... 
    } 

    public function Do_Something1() : void 
    { 
     //trace namex directly from Flower class 
     trace("new f0 namex: " + f0.namex); 
     trace("new f1 namex: " + f1.namex); 

     //now change the contents of "namex" String in Flower class 
     f0.namex = "violet"; f1.namex = "bluebell"; 

     //run function from each instance of Flower class 
     f0.check_renamed_Flower(); 
     f1.check_renamed_Flower(); 

    } 

} //end class Main 
} //end package 

Flower.as

package 
{ 
    public class Flower 
    { 
     public var namex : String; 

     public function Flower(F_name:String) : void 
     { 
      trace("Previous public var name: " + F_name); 
      namex = F_name; 
     } 

     public function check_renamed_Flower() : void 
     { 
      trace("changed var name: " + namex);   
     } 
    } 
} 

希望它能幫助。