2012-10-19 6 views
0

저는 ActionScript 3에 새로 추가되었지만 점차적으로 작은 "탱크 (Tanks)"와 같은 슈팅 게임을 제작 해 왔으며 현재 총알 촬영을 추가 할 시점에 있습니다 이 작업을 수행하기 위해 나는 새로운 AS3 클래스를 만들어 그것을 가져온 등, 내가 게임을 실행할 때 나는 오류 얻을 :AS3 - "정의되지 않은 메소드 호출"

Call to a possibly undefined method turretShot

이 일어나는 이유를 찾는 데 도와주십시오. 이 오류는 내 컴파일러 오류에 두 번 표시하고 대한의 선이 매우 유사, 여기에 코드의 부분이 영향을받습니다 (클래스 파일)

package resources 
{ 
    import flash.display.*; 
    import flash.events.*; 

    public class turretShot extends MovieClip 
    { 
     var enemy_mc:MovieClip; 
     public function turretShot(enemy_mc:MovieClip) 
     { 
      var xSpeed:Number; 
      var ySpeed:Number; 
      var angle:Number; 
      public var shotSpeed:Number; 
      speed = 30; 
      var gravity:Number = 1; 
      var thisShot:MovieClip; 
      var platform1_mc:MovieClip; 
      var platform2_mc:MovieClip; 
      var thisParent: *; 
      enemy_mc = enemy; 
      this.addEventListener(Event.ADDED, initialize); 
     } 
     function initialize(event:Event):void 
     { 
      this.addEventListener(Event.ENTER_FRAME, moveShot); 
      thisParent = event.currentTarget.parent; 
      platform1_mc = thisParent.platform1_mc; 
      platform2_mc = thisParent.platform2_mc; 
      thisShot = MovieClip(this.parent.getChildByName(this.name)); 
      angle = this.rotation/180 * Math.PI; 
      xSpeed = Math.cos(angle) * speed; 
      ySpeed = Math.sin(angle) * speed; 
     } 
     function moveShot(event:Event):void 
    } 
} 

나는이를 가져온

shootTurret.as을 내 에 필요한 프레임 게임 .FLA의 액션 스크립트 : 내 클래스 파일로

import resources.*; 

게임의 디렉토리에있는 "자원"폴더에 있습니다. 이제

, 그들하거나 클래스와 함께 할 아무것도하지만 그들이 있다면 ... 확실하지 이러한 오류를 던지고있다 코드의 두 섹션 :

(4 선)

var shot_mc:MovieClip; 
if (keyPressed == Keyboard.SPACE && spaceKeyDown == false) 
{ 
    shot_mc = new turretShot(enemy_mc); 
    shot_mc.x = user_mc.x + user_mc.turret_mc.x; 
    shot_mc.y = user_mc.y + user_mc.turret_mc.y; 
    shot_mc.rotation = user_mc.turret_mc.rotation; 
    addChild(shot_mc); 
    spaceKeyDown = true; 
} 

하고 (첫 번째 줄) : 어떤 도움을 주시면 감사하겠습니다

var shot_mc:MovieClip = new turretShot(user_mc); 
shot_mc.x = enemy_mc.x + enemy_mc.enemyTurret_mc.x; 
shot_mc.y = enemy_mc.y + enemy_mc.enemyTurret_mc.y; 
shot_mc.rotation = enemyTargetRotation; 
shot_mc.speed = Math.random() * 15 + 15; 
addChild(shot_mc); 

.

답변

1

터렛 샷 (TurretShot) 클래스에는 컴파일러가보고하는 오류가 몇 가지 있습니다. 문제를 해결하면이 메시지가 사라집니다.

생성자 내부에서 정의하는 변수는 var enemy_mc:MovieClip;과 함께 그 외부에서 정의해야합니다. 또한 코드 논리에 따라 public, private 또는 protected으로 만드는 것이 좋습니다.

또한 enemy_mc = enemy;은 존재하지 않는 변수 enemy을 참조합니다. 아마도 생성자가 public function turretShot(enemy:MovieClip)이 될 것입니다.

내가 데리러 가지 않은 코드에 다른 오류가있을 수 있습니다.

+0

답장을 보내 주셔서 감사합니다. 필자가 설명한 두 가지 이외의 컴파일러 오류에는 아무 것도 없습니다. "public function turretShot (enemy_mc : MovieClip)"이되도록 의도되었습니다. 나는 실수로 enemy = enemy_mc를 잘못 입력했습니다. 틀린 길을 돌았 다. 그리고 나는 그것을 수정했다. 그리고 여전히 나의 코드로 같은 2 개의 에러를 얻고있다. 나의 코드를위한 수정이 만족 스러울 것이다. 나는 이것에 정말로 새롭다. – user1637318

+0

컴파일러에서이 클래스에 대한 오류가 발생하지 않으면 The_asMan이 제시 한 바와 같이 주 스크립트에서 가져 오지 않았을 수 있습니다. 이렇게하면이 코드의 나머지 버그 대부분을 찾아 낼 수 있습니다. –

+0

@ the-asman 도움을 요청 해 주셔서 다시 한번 감사드립니다. 그러나 여전히 ... 같은 두 가지 오류는 이미 "가져 오기 리소스. *;"로 가져 왔습니다. 그 파일은 resources 디렉토리에있는 모든 AS 파일을 가져오고 심지어 정확한 클래스 파일을 대상으로 삼았을 때도 마찬가지입니다. 정말 여기에서 고투,이 작업을해야합니다 : ( – user1637318

0

마찬가지로 Dave Hart는 많은 오류가 있음을 언급했지만 FLA에 클래스를 가져 오지 않았기 때문에 묻는 특정 오류가있는 것입니다.

import resources.turretShot; 
0

이 클래스의 구문을 수정하여 다른 질문에 대한 의견 섹션에서 내가 무엇을 의미하는지 확인할 수 있습니다. 나는 모든 변수에 public 범위와 private 범위의 메소드를 주었지만 필요에 맞게 이것을 변경하십시오.

게시 한 코드에는 구문 오류가 많으며 전체 게임을 코딩하기 전에 ActionScript3 및 OOP에 대한 확신을 가져야합니다. AS3와 클래스에이 튜토리얼 (또는 다른)을 연구하십시오 : 보조 노트에 kirupa tutorial on Classes in ActionScript 3

, 클래스 이름은 일반적으로 UpperCamelCase로 작성됩니다.

package resources 
{ 
    import flash.display.*; 
    import flash.events.*; 

    public class TurretShot extends MovieClip 
    { 
     public var enemy_mc:MovieClip; 
     public var xSpeed:Number; 
     public var ySpeed:Number; 
     public var angle:Number; 
     public var shotSpeed:Number; 
     public var speed:Number = 30; 
     public var gravity:Number = 1; 
     public var thisShot:MovieClip; 
     public var platform1_mc:MovieClip; 
     public var platform2_mc:MovieClip; 
     public var thisParent: *; 

     public function TurretShot(enemyParam:MovieClip) 
     { 

      enemy_mc = enemyParam; 
      this.addEventListener(Event.ADDED, initialize); 
     } 

     private function initialize(event:Event):void 
     { 
      this.addEventListener(Event.ENTER_FRAME, moveShot); 
      thisParent = event.currentTarget.parent; 
      platform1_mc = thisParent.platform1_mc; 
      platform2_mc = thisParent.platform2_mc; 
      thisShot = MovieClip(this.parent.getChildByName(this.name)); 
      angle = this.rotation/180 * Math.PI; 
      xSpeed = Math.cos(angle) * speed; 
      ySpeed = Math.sin(angle) * speed; 
     } 

     private function moveShot(event:Event):void 
     { 
      //do stuff every frame 
      trace("enter frame"); 
     } 


    } 
} 

희망이 도움) 이것은 대부분의 액션 스크립트 (자바 등) 프로그래머 다음 대회이고 당신이 그것에 충실하면 코드가 더 읽을 수 따라서 당신에게 다음 시간을 돕기 위해 쉽게해야한다 !

관련 문제