2014-03-30 84 views
0

對於類和東西,我還是很新的東西。所以,我試圖做到這一點,我得到一個錯誤:訪問未定義的屬性。 爲什麼speedX和speedY var仍然錯誤,儘管我已經在主類的public var中定義了它?Actionscript 3無法訪問空對象引用的屬性或方法

謝謝!

編輯:我試過從main.speedX和main.speedY調用其他類的變量但它有錯誤:無法訪問空對象引用的屬性或方法。 波爾/ moveBall()

這是主代碼:

package 
    { 
import flash.display.MovieClip; 
import flash.events.Event; 

public class Main extends MovieClip 
{ 

    public var speedX:Number = 5; 
    public var speedY:Number = 5; 
    public var speedMax:Number = 10; 
    private var ball:MovieClip = new Ball(); 
    private var paddle:MovieClip = new Paddle(); 

    public function Main() 
    { 
     paddle.addEventListener(Event.ENTER_FRAME, movePaddle); 

     addChild(ball); 
     addChild(paddle); 
      } 

} 

}

這是球影片剪輯代碼:

package 
{ 
import flash.display.MovieClip; 
import flash.events.Event; 

public class Ball extends MovieClip 
{ public var main:Main; 

    public function Ball() 
    {addEventListener(Event.ENTER_FRAME, moveBall); 
     main= new Main(); 
    } 
    public function moveBall(e:Event):void 
    { 
     x += main.speedX; 
     y += main.speedY; 
    } 

} 

}

+0

傳遞的值,因爲你沒有存儲球值不起作用。 aduch answer是有效的,因爲它傳遞值並將它們存儲在Ball中。澄清一下,公共變量不是全局變量。它們允許你從課堂外訪問一個班級的值,但你仍然需要參考班級。所以如果你通過了一個主要的參照球,你可以在球中做「_main.speedX」,但是在球中單獨的「speedX」將無能爲力。 – Dave

+0

我編輯了代碼。通過使用main.speedX引用Main類來使用其他類中的var。但後來我得到了一個錯誤。我想我一直在失去一些東西。任何想法?謝謝! – user3411184

+0

你得到什麼錯誤? Actionscript的一個很好的參考是Colin Moock的Essential Actionscript 3.0。 – Dave

回答

0

這裏是另一種可能的解決方案,您將通過main傳遞球以使用存儲在Main中的速度值。

public class Main extends MovieClip 
{ 
    public var speedX:Number = 5; 
    private var ball:MovieClip; 
    public function Main() 
    { 
     ball=new Ball(this); 
     addChild(ball); 
    } 

} 

public class Ball extends MovieClip 
{ 
     private var _main:Main; 
     public function Ball(main:Main) 
     { 
      _main=main; 
      addEventListener(Event.ENTER_FRAME, moveBall); 
     } 

     public function moveBall(e:Event):void 
     { 
      x += _main.speedX; 
     } 
    } 
} 
+0

它工作得很好!非常感謝。但我仍然對一些事情感到困惑。首先定義「球=新球」有什麼區別?在var和主要功能?其次,「ball = newBall(this)」中的「(this)」是做什麼的?我經常在教程中找到它,但我從不明白它是什麼以及它做了什麼。你能解釋一下嗎?再次感謝 – user3411184

+0

通常最好只在變量定義中定義簡單的值,就像您對速度所做的一樣。在課堂上應該做更復雜的定義。在這種情況下,Main的「this」在變量定義中還不存在,因此無法分配。而且,在他們的定義中定義變量會減慢你的代碼。 「這個」是指封閉的東西。所以在這種情況下,這是對由Main類創建的對象的引用,即對其自身的引用。 – Dave

+0

好吧我瞭解第一個。但關於「(這個)」,我可以得出的結論是:「(this)」用於表示球來自主類;以便將ball類中的變量(speedX)賦予球所指定的類中定義的變量。這是對的嗎?謝謝!我從你教過的東西中得到很多東西。 – user3411184

1

這因爲你的類Ball不能在事件回調中訪問speedX和speedY。爲什麼不直接添加speedXspeedY到您的Ball類?

public class Ball extends MovieClip 
{ 
    public var speedX:Number; 
    public var speedY:Number; 

    public function Ball(sX:Number = 0, sY:Number = 0) 
    { 
     this.speedX = sX; 
     this.speedY = sY; 

     addEventListener(Event.ENTER_FRAME, moveBall); 
    } 

    public function moveBall(e:Event):void 
    { 
     x += speedX; 
     y += speedY; 
    } 
} 
+0

感謝它的工作!我現在明白了一點。但是,是否需要在每個班級中定義變量?我們可以在主類中爲其他類中的其他類定義它嗎? (就像我以前那樣)。謝謝 – user3411184

+0

那麼它很大程度上取決於你想要達到的目標,如果你需要它爲其他類,你可能會想到解決問題的另一種方法。 – axelduch

+0

所以我不能只在主類中寫公共var用於其他課程?我想我需要嘗試很多東西。謝謝 – user3411184

相關問題