2013-02-02 4 views
0

안녕하세요들 인스턴스 메소드이어야 :(누군가가 그것을 어떻게 말해 줄 수플래시 AS3 : 생성자 함수를 내가 문제와 그것을 해결하는 방법을 모르고있다

생성자 함수는 인스턴스 메서드 여야합니다

?.

그래서 여기 내 코드입니다.

package 
{ 
    import com.coreyoneil.collision.CollisionList; 
    import flash.events.Event; 
    import flash.display.Sprite;  

    public class terrain extends Sprite 
    { 
     private var wheel:Ball; 
     private var collisionList:CollisionList; 
     private var speed:Number; 

     private const GRAVITY:Number = .75; 
     private const FRICTION:Number = .98; 
     private const IMMOVABLE:Number = 10000; 


     public function terrain():void 
     { 
      if(stage == null) 
      { 
       addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true); 
       addEventListener(Event.REMOVED_FROM_STAGE, clean, false, 0, true); 
      } 
      else 
      { 
       init(); 
      } 
     } 

     private function init(e:Event = null):void 
     { 
      collisionList = new CollisionList(terrain); 

      wheel = new wheel(10); 
      wheel.mass = IMMOVABLE * 2; 
      addChild(wheel); 
      collisionList.addItem(wheel); 
      wheel.x = 30; 
      wheel.y = 10; 

      speed = 0; 

      terrain.graphics.lineStyle(15); 

      addEventListener(Event.ENTER_FRAME, updateScene); 
     } 


     private function updateScene(e:Event):void 
     {   
      var collisions:Array = collisionList.checkCollisions(); 

      if(collisions.length) 
      { 
       var collision:Object = collisions[0]; 
       var angle:Number = collision.angle; 
       var overlap:int = collision.overlapping.length; 

       var sin:Number = Math.sin(angle); 
       var cos:Number = Math.cos(angle); 

       var vx0:Number = wheel.vx * cos + wheel.vy * sin; 
       var vy0:Number = wheel.vy * cos - wheel.vx * sin; 

       // Unlike the other examples, here I'm choosing to calculate the amount 
       // of bounce based on the objects' masses, with a default mass of 10000 (IMMOVABLE) 
       // being used for the drawing the wheel is colliding with. As such, the only 
       // real variable in play here is the current vector of the wheel. 
       vx0 = ((wheel.mass - IMMOVABLE) * vx0)/(wheel.mass + IMMOVABLE); 
       wheel.vx = vx0 * cos - vy0 * sin; 
       wheel.vy = vy0 * cos + vx0 * sin; 

       wheel.vx -= cos * overlap /wheel.radius; 
       wheel.vy -= sin * overlap/wheel.radius; 

       wheel.vx += speed; 
      } 
      trace("down"); 
      wheel.vy += GRAVITY; 
      wheel.vy *= FRICTION; 
      wheel.vx *= FRICTION; 

      wheel.x += wheel.vx; 
      wheel.y += wheel.vy; 

      if(wheel.x > stage.stageWidth) wheel.x = stage.stageWidth; 
      if(wheel.x < 0) wheel.x = 0;          
      if(wheel.y > stage.stageHeight - (wheel.height >> 1)) 
      { 
       wheel.y = 10; 
       wheel.x = 30; 
       wheel.vx = wheel.vy = 0; 
      } 

     } 

     private function clean(e:Event):void 
     { 
      removeEventListener(Event.ENTER_FRAME, updateScene); 
     } 




    } 
    } 

그냥 내가 예를 사용하고 그것을 무시 ... 코드에서 몇 가지 의견이 있습니다

+0

무엇이 문제입니까? 너는 무엇에 문제가 있니? – poepje

+0

생성자가'if (stage == null)'체크를 할 필요가 없습니다. 왜냐하면 현재 생성이 완료되기 전에 스테이지에 추가 될 수없는 새로운 객체가 생성되기 때문입니다. 따라서 스테이지 속성은 항상 생성자에서 null입니다. 리스너를 추가하기 만하면됩니다. 어쨌든 else 부분은 평가되지 않습니다. –

답변

3
collisionList = new CollisionList(terrain); 
terrain.graphics.lineStyle(15); 

이것은 생성자가 정적이거나 사적인 경우 또는 식별자로 사용되는 경우에도 throw되는 오류 1026입니다. terrain.graphics 대신 this.graphics를 사용하거나 graphics.etc (지형 제거)를 사용하고 'CollisionList'의 매개 변수로 'this'를 전달하십시오.
(관련 없음 : 대문자 "Terrain"으로 시작하는 수업의 이름을 지정하는 것이 더 좋습니다)

+0

조언을 주셔서 감사합니다,하지만 내가 이것을 사용한다면 여전히 3 번째 줄에서 같은 오류가 발생합니다. (어디에서 가져 오기 시작합니까?) – Andrey

+0

오, 그래, 또 하나 있습니다 : "collisionList = 새로운 CollisionList (지형);", 또한 새로운 것으로 변경하십시오 CollisionList (이). 기본적으로 클래스 이름은 식별자가 정적 속성 또는 메서드를 가지고 있고 다른 클래스의 클래스 이름을 사용해야합니다. 그렇지 않으면 'this'또는 클래스의 내용이 없습니다. – chadiik