为什么我无法在此代码(AS3)中设置位置?

时间:2010-08-20 02:42:06

标签: actionscript-3 flash

首先,我是AS3的新手。我要做的是制作球,以圆形形式旋转。这是我目前的代码: 这是Circular.as

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;
    }
}

对不起,我忘了提到我现在面临的问题。我现在面临的问题是,球没有移动。有什么想法吗?

2 个答案:

答案 0 :(得分: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不变。

答案 1 :(得分:0)

您的构造函数应与您的类具有相同的名称。这里,当构造函数名为Circular()时,它的名称为Oval()。 Circular类没有构造函数,因此在调用Oval()方法

之前不会发生任何事情
        //your class should be 
        public class Circular extends Sprite {

        //variables declarations

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

如果需要,您可以使用Oval类扩展Circular类。

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

如果需要在Oval类中访问它们,可能必须将一些循环变量从private更改为protected