Actionscript 3 为什么我不能在此代码(AS3)中设置位置?
首先,我是AS3的新手。我想做的是让球以圆形旋转。这是我当前的代码: 这是通告Actionscript 3 为什么我不能在此代码(AS3)中设置位置?,actionscript-3,flash,Actionscript 3,Flash,首先,我是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
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;
}
}
对不起,我忘了提我现在面临的问题。我现在的问题是,球没有移动。有什么想法吗?你的构造函数应该和你的类同名。在这里,当构造函数应命名为Circular()时,它被命名为Oval()。循环类没有构造函数,因此在调用Oval()方法之前不会发生任何事情 如果需要,可以使用椭圆类扩展圆形类
public class Oval extends Circular
{
public function Oval()
{
super();
}
}
如果需要在Oval类中访问某些循环变量,您可能必须将其从private更改为protected。好的,在第一个类中,您不应该有一个循环类和Oval构造函数 问题肯定出在你的输入框上,以及你是如何通过角度/获得新角度的,等等。这里有一个适用于我的更新。动画可以平滑,你可以做很多事情来帮助它,但这是可行的。确保你的舞台尺寸足够大,这取决于你的半径x/radiusY,在我的例子中,必须降低它才能真正看到发生了什么,但现在球在一个圆圈中移动 圆形。如
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不变。谢谢。但问题是我自己解决的。这不是类名,我忘了在这里更改它:P我所做的是更改为:object.x=centerX+Math.sin(object.getAngle())*radiusX;无论如何,谢谢你提到类名。没错,你只调用了ball.getAngle()一次,角度总是一样的。必须在每个帧中调用getAngle()
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());
}
}