2014-01-15 2 views
-1

이 오류를 해결할 수없고 다른 오류가 발생합니다. 열쇠 "71"을 치고 무비 클립의 새로운 인스턴스를 무대에 추가 할 수 있기를 원합니다. 어떤 제안? ... 그래서 아마 실수를 많이줄 108 t 1136 : 잘못된 인수 수입니다. 예상 1 1

패키지를 초보자 임 {

import flash.display.MovieClip; //imports needed 
import flash.display.Sprite; 
import flash.events.MouseEvent; 
import flash.events.Event; 
import flash.text.engine.EastAsianJustifier; 
import flash.events.KeyboardEvent; 
import flash.display.Stage; 
public class myJellyFish extends MovieClip { 

    private var startScaleX:Number; 
    private var startScaleY:Number; 
    //private var cliqued:Number; 
    private var stayonscreenLeft:Number; 
    private var stayonscreenRight:Number; 
    private var stayonscreenTop:Number; 
    private var stayonscreenBottom:Number; 

    private var moveDirection:Number; 
    private var speed:Number; 
    private var turnspeed:Number; 


    public function myJellyFish() { 



     startScaleX = this.scaleX; 
     startScaleY = this.scaleY; 
     stayonscreenBottom = 400; 
     stayonscreenRight = 500; 
     stayonscreenLeft = 5; 
     stayonscreenTop = 5; 
     moveDirection = .5; 
     speed = Math.random()*10; 
     turnspeed = 25; 

     this.addEventListener(MouseEvent.ROLL_OVER, scrolledOver); 
     this.addEventListener(MouseEvent.ROLL_OUT, scrolledOff); 
     this.addEventListener(MouseEvent.CLICK, directionChange); 
     this.addEventListener(Event.ENTER_FRAME, life) 


     trace("custom class be a working"); 
     // constructor code 
    } 

    function myMethod() { 
     trace("method also be a workin'"); 
     } 

    private function scrolledOver(Event:MouseEvent):void{ 
     this.alpha = .5; 
     } 

    private function scrolledOff(Event:MouseEvent):void{ 
     this.alpha = 1; 
     } 
    private function directionChange(e:Event):void{ 
     moveDirection = moveDirection * -1; 
     } 
    private function life(e:Event):void{ 
     if (moveDirection > 0){ 
      Hmovement(); 
      } 
     if (moveDirection < 0){ 
      Vmovement(); 
      } 
     } 
    private function Vmovement():void{ 
     this.y += speed; 

     if(this.y <= stayonscreenBottom){ 
      speed = speed * -1; 
      this.startScaleY * -1; 
      } 
     if(this.y >= stayonscreenTop){ 
      speed = speed * -1; 
      this.startScaleY * -1; 
      } 
     } 
     private function Hmovement():void{ 
      this.x += speed; 

      if(this.x >= stayonscreenRight){ 
       speed = speed * -1; 
       } 
      if(this.x <= stayonscreenLeft){ 
       speed = speed * -1; 
       } 
      } 
     private function generate(e:KeyboardEvent):void{ 

      var movieClip:myJellyFish = new myJellyFish(); 
      addChild(movieClip); 
      movieClip.x = (Math.random() * 200) + 20; 
      movieClip.y = (Math.random()*200) + 20; 
      movieClip.name = "jellyfish"; 
      } 



     public function moreClips (event:KeyboardEvent){   //if that key is "F" it will play the tween 
      trace(event.keyCode); 

      if (event.keyCode == 71){ 
      generate(); 
      } 

     } 

    }//end class 

}//end package 

답변

1

첫째는, 인수 오류가있을 것입니다.

둘째, 키보드 이벤트를 수신하려면 KeyboardEvent(ref) 수신기를 추가해야합니다.

키보드 이벤트를 수신하는 가장 쉬운 방법은 Stage에 리스너를 추가하는 것입니다 (KeyboardEvents가 트리거 된 위치에 관계없이 스테이지에 거품이 생기기 때문입니다). 스테이지에 대한 참조를 얻으려면 MovieClip이 DisplayList에 추가 될 때까지 기다리십시오 (myJellyFish의 인스턴스가 어딘가에 자식으로 추가되었을 때).

Event.ADDED_TO_STAGE 이벤트를 청취하면됩니다.

// Your constructor 
public function myJellyFish() { 
    // ... 
    // Add event listener which will trigger when 
    // the MovieClip has been added to the DisplayList 
    this.addEventListener(Event.ADDED_TO_STAGE, handleAddedToStage); 
} 

protected function handleAddedToStage(e:Event):void { 
    // Remove event listener since it's no longer needed 
    this.removeEventListener(Event.ADDED_TO_STAGE, handleAddedToStage); 

    // You now have a reference to the stage, let's add the KeyboardEvent listener 
    stage.addEventListener(KeyboardEvent.KEY_DOWN, moreClips); 
} 

편집 : removeEventListener의 고정 된 오타.

+0

장면 1, 레이어 '작업', 프레임 361, 라인 7 \t 1120 : 정의되지 않은 속성에 대한 액세스 moreClips. 지금 그리고 만약 내가 무언가에 추가한다면 : Line 54 \t 1119 : 정적 유형 Class를 가진 참조를 통해 아마도 정의되지 않은 속성 인 addedToStage에 접근 할 수 있습니다. –

+0

@ user3200134'Event.ADDED_TO_STAGE' 이벤트 ('Event.addedToStage')를 제거 할 때 오타가 수정되었습니다. 그것은 두 번째 문제를 해결해야합니다. ** 첫 번째 문제는 ** 내가 작성한 코드를 위에 게시 한 것과 동일한 수업에 추가해야합니다. 따라서 이벤트 리스너는 생성자의 나머지 코드에 추가되어야하며 handleAddedToStage 함수가 클래스에 추가되어야합니다. 오류에서 마치 프레임에 코드를 추가 한 것처럼 보입니다. –

0

귀하의 1 개 인자 느릅 나무가 전자 인 기능을 가지고 생성 : KeyboardEvent입니다, 당신은 alredy으로 KeyboardEvent을 가지고 기능 moreClips이 있기 때문에, 당신은 돈 ' generate 함수에 대한 인수가 필요하지 않습니다.

기본적으로 당신이 지금하고있는 일은 argument없이 generate() 함수를 호출하는 것입니다. 함수에서 인수를 제거하면됩니다. 린은 말했다로 generate 함수를 호출 할 때

private function generate():void{ 
     var movieClip:myJellyFish = new myJellyFish(); 
     addChild(movieClip); 
     movieClip.x = (Math.random() * 200) + 20; 
     movieClip.y = (Math.random()*200) + 20; 
     movieClip.name = "jellyfish"; 
}