2010-08-20 117 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

相关问题