首先,我是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;
}
}
对不起,我忘了提到我现在面临的问题。我现在面临的问题是,球没有移动。有什么想法吗?
答案 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