2010-08-20 116 views
0

首先,我是AS3的新手。我想要做的是製作球,以圓形旋轉。這是我當前的代碼: 這是Circular.as爲什麼我不能在此代碼中設置位置(AS3)?

public class Circular extends Sprite { 

    private var ball:Ball; 

    private var centerX:Number = stage.stageWidth/2; 
    private var centerY:Number = stage.stageHeight/2; 
    private var radiusX:Number = 500; 
    private var radiusY:Number = 500; 
    //private var temp:Number = 180; 
    private static const speed:Number = 0.1; 

    public function Oval() { 
     init(); 
    } 

    private function init():void { 
     ball = new Ball(40,0x00ff00,180.0); 
     addChild(ball); 
     ball.addEventListener(Event.ENTER_FRAME, startMoving(ball,ball.getAngle())); 
    } 

    private function startMoving(object:Ball, angle:Number) { 
     return function(evt:Event){ 
       onStart(object,angle); 
     } 
    } 

    private function onStart(object:Ball,angle:Number){ 
     object.x = centerX + Math.sin(angle) * radiusX; 
     object.y = centerY + Math.cos(angle) * radiusY; 
     ball.setAngle(speed); 
     //trace(ball.getAngle()); 
    } 

} 

,這是Ball.as類文件

public class Ball extends Sprite { 

    private var _radius:Number; 
    private var _color:uint; 
    private var _angle:Number; 

    public function Ball(radius:Number,color:uint, angle:Number) { 
     _radius = radius; 
     _color = color; 
     _angle = angle; 
     init(); 
    } 

    public function init():void { 
     graphics.beginFill(_color); 
     graphics.drawCircle(0,0,_radius); 
     graphics.endFill(); 
    } 

    public function getAngle():Number{ 
     return _angle; 
    } 

    public function setAngle(speed:Number){ 
     _angle += speed; 
    } 
} 

我很抱歉,我忘了提,我現在面臨的問題。我現在的問題是,球沒有移動。有任何想法嗎?

回答

0

您的構造函數應該與您的類具有相同的名稱。在這裏,當它的名字應該是Circular()時,你的構造函數被命名爲Oval()。 Circular類不具備構造函數,因此什麼都不會發生,直到調用橢圓形()方法

 //your class should be 
     public class Circular extends Sprite { 

     //variables declarations 

       //Your constructor 
       public function Circular() { 
       init(); 
       } 
     //etc.... 

如有必要,你可以用一個橢圓類擴展的通知類。

 public class Oval extends Circular 
     { 
      public function Oval() 
      { 
       super(); 
      } 
     } 

您可能需要一些私人的循環變量的改變來保護的,如果你需要的橢圓形類中訪問它們

+0

謝謝。但我自己解決了這些問題。它不是類名,我忘了在這裏改變它:P我所做的是更改爲:object.x = centerX + Math.sin(object.getAngle())* radiusX; 無論如何,感謝提到類名稱 – 2010-08-20 03:00:28

1

好吧,在你的第一課,你不應該有一個類圓形的和一個橢圓形的構造函數。

問題是肯定與你的ENTER_FRAME,你是如何通過角度/獲取新的角度,等等。這是一個更新,適合我。動畫可以平滑,並且你可以做一些幫助,但這是有效的。請確保您的舞臺尺寸足夠大,具體取決於您的radiusX/radiusY,必須降低它以供我的示例真正瞭解發生了什麼,但現在球移動了一圈。

Circular.as

import flash.display.Sprite; 
import flash.events.Event; 
import Ball; 

public class Circular extends Sprite { 

    private var ball:Ball; 

    private var centerX:Number = stage.stageWidth/2; 
    private var centerY:Number = stage.stageHeight/2; 
    private var radiusX:Number = 200; 
    private var radiusY:Number = 200; 
    //private var temp:Number = 180; 
    private static const speed:Number = 0.1; 

    public function Circular() { 
     init(); 
    } 

    private function init():void { 
     ball = new Ball(40,0x00ff00,180.0); 
     addChild(ball); 
     ball.addEventListener(Event.ENTER_FRAME, moveBall); 
    } 

    private function moveBall(e:Event){ 
     ball.x = centerX + Math.sin(ball.getAngle()) * radiusX; 
     ball.y = centerY + Math.cos(ball.getAngle()) * radiusY; 
     ball.setAngle(speed); 
     //trace(ball.getAngle()); 
    } 

} 

Ball.as不變。

+0

這是正確的,你只是調用ball.getAngle()一次,角度總是相同的。你必須在每一幀中調用getAngle() – 2010-08-20 12:37:43

相關問題