2017-12-03 42 views
0

여기는 내 첫 번째 질문이지만 최근에이 문제가 발생하여 도움이 필요합니다. 나는 주말에 작은 작은 안드로이드 게임 프로그래밍 그리고 난 내 배의 총알은 적을 공격하고 모두 사라지게 만들기에 문제가있어Actionscript 3.0의 하위 항목 제거

...

내가 너희들에게 좀 설명해주지 내 코드 :

stage.addEventListener(Event.ENTER_FRAME, Update); 
LeftButton.addEventListener(TouchEvent.TOUCH_OVER, LBOn); 
LeftButton.addEventListener(TouchEvent.TOUCH_BEGIN, LBTouch); 
LeftButton.addEventListener(TouchEvent.TOUCH_OUT, LBOff); 
LeftButton.addEventListener(TouchEvent.TOUCH_END, LBRelease); 
RightButton.addEventListener(TouchEvent.TOUCH_OVER, RBOn); 
RightButton.addEventListener(TouchEvent.TOUCH_BEGIN, RBTouch); 
RightButton.addEventListener(TouchEvent.TOUCH_OUT, RBOff); 
RightButton.addEventListener(TouchEvent.TOUCH_END, RBRelease); 
BA.addEventListener(TouchEvent.TOUCH_BEGIN, Shoot); 

이것이 내 무대의 이벤트 수신기입니다. ...

function Shoot(TouchEvent) { 

     SpawnBullet(); 

    }; 

좋아, 간단한 모든 현재 EventListeners를,이 작은 부분에 매우 간단하고 그들은 내가 뭘하는지 괜찮 작동하지만 마지막 이벤트는 함수 촬영을 호출하고 일이 까다로운 곳이다 충분히. 나는를 실행하면

function SpawnBullet() { 

     var Bullet:Bullet1 = new Bullet1(); 
     stage.addChild(Bullet); 

      Bullet.x = Player.x; 
      Bullet.y = Player.y - (Player.height/2); 

       Bullet.addEventListener(Event.ENTER_FRAME, BulletUpdate); 

        function BulletUpdate(Event) { 

         Bullet.y -= 20; 

         if(Bullet.y <= 100) { 

          Bullet.removeEventListener(Event.ENTER_FRAME, BulletUpdate); 
          stage.removeChild(Bullet); 
          Bullet = null; 

         }; 

        }; 

    };  

: 거기 많이 해 내가 보는 방식, 내 총알을 산란하는 다른 함수를 호출 그냥 기능은 ...

이것은 내가 코드 실행을 시도하는 방법입니다 게임 난이 오류를 얻을 :

ReferenceError: Error #1069: Property ENTER_FRAME not found on flash.events.Event and there is no default value. 
at Function/Shooter_fla:MainTimeline/SpawnBullet/Shooter_fla:BulletUpdate()[Shooter_fla.MainTimeline::frame1:41] 

내가 가짜에 내 능력을 노력 아니에요을, 나는 내가 추가하고 차일 작업의 제거 및 이후 난 그냥있는 방법을 웹 검색 싫어하는 방법을 이해하지 못하는 것 같아 뭔가 일하는 방식을 배우지 않고 무언가를하려면 여기에 약간의 도움을 주러 왔습니다. 어떤 도움을 주셔서 미리 감사드립니다!

답변

1

오류는 어린이 추가/제거와 관련이 없습니다. 귀하의 실수는 클래스 이름과 동일한 이름의 함수 인수 이벤트을 선언하는 것입니다. 따라서 컴파일러는 혼란 스럽습니다. 또한, 보조 노트로, 함수 안에서 함수를 선언하는 것을 피하십시오. 그것은 고통과 공포를 환영하는 것과 같습니다.

function SpawnBullet():void 
{ 
    // With the "new" operator you can omit() if constructor has no arguments. 
    var aBull:Bullet1 = new Bullet1; 

    stage.addChild(aBull); 

    aBull.x = Player.x; 
    aBull.y = Player.y - (Player.height/2); 

    aBullet.addEventListener(Event.ENTER_FRAME, BulletUpdate); 
} 

function BulletUpdate(e:Event):void 
{ 
    // Get the reference to the bullet from the event. 
    // Alternately you might store it in a variable outside of both functions. 
    var aBull:Bullet1 = e.target as Bullet1; 

    aBull.y -= 20; 

    if (aBull.y <= 100) 
    { 
     aBull.removeEventListener(Event.ENTER_FRAME, BulletUpdate); 
     stage.removeChild(aBull); 
    } 
} 

추신 :

나는 당신의 코드는 다음과 같은 잘 될 것이라고 생각 코드를 철저히 형식화하지 마십시오. 그것은 그렇게 많이 보일지도 모릅니다. 그리고 곧 형식화 된 코드는 깨끗하고 읽기 쉽고 형식을 올바르게 지정하면 실수를 피할 수 있습니다.

+0

글쎄, 대단히 감사합니다! 지금 당장 샤워를하고 내 문제에 대한 해결책을 찾아 보겠습니다. 코드 포맷팅에 관해서는 모든 것을 블록으로 유지하려고 노력했기 때문에 어떤 부분에 관한 내용인지 쉽게 읽을 수 있습니다. 눈과 조직이 훨씬 쉽다고 생각하지만 함수 내부에서 함수를 선언하는 것이 좋지 않다는 것을 알지 못했습니다. , 그래서 나는 그것을 계속 염두에 둘 것이다. 또한, "Bullet1로서의 e.target"이 무엇인지 말해 주시겠습니까? 해야 할 것? 나는 "as"명령을 사용하지 않았다. 그래서 ... – Wobbufest

+0

@Wobbufest 그것은 타입 캐스팅이다. 기본적으로, 당신은 * "이 레퍼런스는 ** Bullet1 ** 클래스입니다. 항상 필요하지는 않습니다 (코드에서 ** aBull **을 ** DisplayObject **로 선언하는 것이 좋습니다.)하지만 컴파일러가 예상 한 것을 더 잘 알거나 때로는 객체에서 기대하지 않는 것이 좋을 때도 있습니다. 주소 지정. ** ** more ** : https://stackoverflow.com/questions/12390347/whats-the-significance-of-as-keyword-in-this-code https://stackoverflow.com/questions/에 대한 내용을 읽을 수 있습니다. 14268329/as3-cast-or-as – Organis

+0

우선 ** 감사의 말에 ** 감사합니다. 정말 도움이되었습니다. '기능 BulletUpdate (이벤트) { \t \t \t \t \t \t var에 ThisBullet : Bullet1 = Event.currentTarget로 둘째, 난 그냥 같은 문제로 실행 해요하고 코드를 시도, 여기 내 BulletUpdate 이벤트입니다 Bullet1; \t \t \t \t \t \t ThisBullet.y - = 20; \t \t \t \t \t \t \t 경우 (ThisBullet.y <= 100) { \t \t \t \t \t \t \t \t \t \t ThisBullet.removeEventListener (되어 Event.ENTER_FRAME, BulletUpdate); \t \t \t \t \t stage.removeChild (ThisBullet); \t \t \t \t \t \t \t \t \t}; \t \t \t \t \t} 아직 뭔가가 누락 되었습니까? PS .: e.target Bullet1이 작동하지 않는 것 같아서 Event.target으로 바 꾸었습니다. – Wobbufest