2010-08-20 5 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; 어쨌든, 클래스 이름을 언급 해 주셔서 감사합니다 –

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()을 호출해야합니다. –

관련 문제