2015-01-09 1 views
-1

현재 FlashDevelop에서 2 차원 게임을 만들고 있는데 코드에서 어떤 문제인지 파악할 수 없습니다. 게임을 실행하려고하면 다음과 같은 오류 메시지가 나타납니다.2D Flashdevelopment 게임; src Main.as (301) : col : 27 오류 : 정의되지 않은 속성의 액세스 mapIndex.loadMap (doors [d] .dest, mapIndex);

src\Main.as(94): col: 4 Error: Access of undefined property mapIndex. mapIndex = 0;

src\Main.as(218): col: 4 Error: Access of undefined property mapIndex. mapIndex = index;

src\Main.as(301): col: 27 Error: Access of undefined property mapIndex. loadMap(doors[d].dest,mapIndex);

나를 도와 줄 수있는 사람이 있습니까?

package 

{ 
    import flash.display.InteractiveObject; 
    import flash.display.MovieClip; 
    import flash.display.Sprite; 
    import flash.events.Event; 
    import flash.events.KeyboardEvent; 
    import flash.events.MouseEvent; 
    import flash.events.TextEvent; 
    import flash.text.TextField; 
    import flash.text.TextFormat; 

    /** 
    * ... 
    * @author Umeer 
    */ 
    public class Main extends Sprite 
    { 
     private var cam:MovieClip = new MovieClip(); 
     private var aDown:Boolean = false; 
     private var dDown:Boolean = false; 
     private var spaceDown:Boolean = false; 
     private var char:Player = new Player(); 
     private var bullets:Array = []; 
     private var blocks:Array = []; 
     private var coins:Array = []; 
     private var enemies:Array = []; 
     private var keys:Array = []; 
     private var doors:Array = []; 
     private var ladders:Array = []; 
     private var climbing:Boolean = false; 
     private var hp:HealthBar = new HealthBar(0x00FFFF); 
     private var enhp:HealthBar = new HealthBar(0xFF6600); 
     private var score:int = 0; 
     private var keyCount:int = 0; 
     private var current:int = 0; 
     private var textBox:TextField = new TextField(); 
     private var textStyle:TextFormat = new TextFormat("Arial", 18); 
     private var enemyNameBox:TextField = new TextField(); 
     private var keyTextBox:TextField = new TextField(); 
     private var maps:Array = [ 
     [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 901], 
     [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [1, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1], 
     [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0], 
     [1, 1, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 4], 
     [1, 1, 1, 1, 0, 3, 0, 0, 3, 0, 0, 1, 0, 0, 0, 1]], 
     [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], 
     [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 1, 0, 3, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1], 
     [0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
     [0, 0, 0, 900, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4], 
     [1, 1, 1, 1, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 1]] 
     ]; 
     private var enemyNames:Array = ["Enemy 1" , "Enemy 2" , "Enemy 3" ]; 
     public function Main():void 
     { 
      addChild(cam); 
      hp.x = 150; 
      hp.y = 23; 
      addChild(hp); 
      textBox.x = 10; 
      textBox.y = 10; 
      textBox.defaultTextFormat = textStyle; 
      addChild(textBox); 
      enemyNameBox.x = 300; 
      enemyNameBox.y = 35; 
      enemyNameBox.defaultTextFormat = textStyle; 
      enemyNameBox.width = 300; 
      keyTextBox.x = 400; 
      keyTextBox.y = 10; 
      addChild(keyTextBox); 
      keyTextBox.defaultTextFormat = textStyle; 
      addChild(enemyNameBox); 
      char.x = 400; 
      char.y = 300; 
      cam.addChild(char); 
      enhp.x = 300; 
      enhp.y = 23; 
      addChild(enhp); 
      loadMap(0, -1); 
      mapIndex = 0; 
      stage.addEventListener(Event.ENTER_FRAME, check); 
      stage.addEventListener(KeyboardEvent.KEY_DOWN, keysDown); 
      stage.addEventListener(KeyboardEvent.KEY_UP, keysUp); 
      stage.addEventListener(MouseEvent.MOUSE_DOWN, mDown); 
      cam.setChildIndex(char, cam.numChildren - 1); 
     } 
     public function loadMap(index:int,current:int) 
     { 
      if (cam.numChildren > 1) 
      { 
       while (cam.numChildren > 0) 
        cam.removeChildAt(0); 
      } 
      if (current != -1) 
      { 
       var newArr:Array = []; 
       for (var i:int = 0; i < maps[current].length; i++) 
        newArr.push([]); 
       for (var s:int = 0; s < maps[current].length; s++) 
       { 
        for (var h:int = 0; h < maps[current][0].length; h++) 
         newArr[s].push(0); 
       } 
       for (var b:int = 0; b < blocks.length; b++) 
        newArr[(blocks[b].y - 25)/50][(blocks[b].x - 25)/50] = 1; 
       for (var c:int = 0; c < coins.length; c++) 
        newArr[(coins[c].y - 25)/50][(coins[c].x - 25)/50] = 2; 
       for (var l:int = 0; l < ladders.length; l++) 
       { 
        if (ladders[l].top) 
         newArr[(ladders[l].y - 25)/50][(ladders[l].x - 25)/50] = 6; 
        else 
         newArr[(ladders[l].y - 25)/50][(ladders[l].x - 25)/50] = 5; 
       } 
       for (var d:int = 0; d < doors.length; d++) 
       { 
        if (doors[d].unlocked) 
         newArr[(doors[d].y - 25)/50][(doors[d].x - 25)/50] = 1000+doors[d].dest; 
        else 
         newArr[(doors[d].y - 25)/50][(doors[d].x - 25)/50] = 900 + doors[d].dest; 
       } 
       maps[current] = newArr; 
      } 
      bullets = []; 
      blocks = []; 
      coins = []; 
      enemies = []; 
      keys = []; 
      doors = []; 
      ladders = []; 
      char.floor = 450; 
      for (var i:int = 0; i < maps[0].length; i++) 
      { 
       for (var j:int = 0; j < maps[0][0].length; j++) 
       { 
        if (maps[index][i][j] == 1) 
        { 
         var block:Block = new Block(); 
         block.x = j * 50 + 25; 
         block.y = i * 50 + 25; 
         blocks.push(block); 
         cam.addChild(block); 
        } 
        if (maps[index][i][j] == 2) 
        { 
         var coin:Coin = new Coin(); 
         coin.x = j * 50 + 25; 
         coin.y = i * 50 + 25; 
         coins.push(coin); 
         cam.addChild(coin); 
        } 
        if (maps[index][i][j] == 3) 
        { 
         var enem:Enemy = new Enemy(enemyNames[enemies.length]); 
         enem.x = j * 50 + 25; 
         enem.y = i * 50 + 25; 
         enemies.push(enem); 
         cam.addChild(enem); 
        } 
        if (maps[index][i][j] == 4) 
        { 
         var key:Key = new Key(); 
         key.x = j * 50 + 25; 
         key.y = i * 50 + 25; 
         /*cam.addChild(key);*/ 
         keys.push(key); 
        } 
        if (maps[index][i][j] == 5) 
        { 
         var ladder:Ladder = new Ladder(false); 
         ladder.x = j * 50 + 25; 
         ladder.y = i * 50 + 25; 
         cam.addChild(ladder); 
         ladders.push(ladder); 
        } 
        if (maps[index][i][j] == 6) 
        { 
         var ladder:Ladder = new Ladder(true); 
         ladder.x = j * 50 + 25; 
         ladder.y = i * 50 + 25; 
         cam.addChild(ladder); 
         ladders.push(ladder); 
        } 
        if (maps[index][i][j] >= 1000) 
        { 
         var door:Door = new Door(maps[index][i][j]-1000); 
         door.x = j * 50 + 25; 
         door.y = i * 50 + 25; 
         door.unlocked = true; 
         cam.addChild(door); 
         doors.push(door); 
        }else 
        if (maps[index][i][j] >= 900) 
        { 
         var door:Door = new Door(maps[index][i][j]-900); 
         door.x = j * 50 + 25; 
         door.y = i * 50 + 25; 
         cam.addChild(door); 
         doors.push(door); 
        } 
       } 
      } 
      cam.addChild(char); 
      mapIndex = index; 
     } 
     public function mDown(e:MouseEvent) 
     { 
      var ang:Number = 0; 
      if (mouseX > 400) 
       ang = (Math.atan(((mouseY - cam.y) - char.y)/((mouseX - cam.x) - char.x))); 
      else 
       ang = -1 * (Math.atan(((mouseY - cam.y) - char.y)/((mouseX - cam.x) - char.x))); 
      var xSpeed:Number = Math.cos(ang) * 45; 
      var ySpeed:Number = Math.sin(ang) * 45; 
      if(mouseX<400) 
       xSpeed *= -1; 
      var bullet:Bullet = new Bullet(char.x, char.y, xSpeed, ySpeed); 
      cam.addChild(bullet) 
      bullets.push(bullet) 
     } 
     public function check(e:Event):void 
     { 
      textBox.text = "Score: " + score; 
      keyTextBox.text = "Keys: " + keyCount; 
      hp.scaleX = char.health/100; 
      if (enemies.length > 0) 
      { 
       enhp.scaleX = enemies[current].health/100; 
       enemyNameBox.text = enemies[current].name2; 
      } 
      else 
      { 
       enhp.scaleX = 0; 
       enemyNameBox.text = "All enemies cleared"; 
      } 
      var prevX:int = char.x; 
      var prevY:int = char.y; 
      if (aDown) 
       char.x -= 5; 
       /*cam.x += 5;*/ 
      if (dDown) 
       char.x += 5; 
       /*cam.x -= 5; the camera moves along with the ball but it keeps meoving when the ball hits the wall*/ 
      char.adjust(); 
      for (var i:int = 0; i < blocks.length; i++) 
      { 
       blocks[i].CheckObj(char, i); 
       for (var s:int = 0; s < enemies.length; s++) 
        blocks[i].CheckObj(enemies[s], i); 
      } 
      for (var j:int = enemies.length-1; j >= 0; j--) 
      { 
       var result:int = enemies[j].CheckObj(char, bullets); 
       if(result== -1) 
       { 
        cam.removeChild(enemies[j]) 
        enemies.splice(j, 1); 
        current = 0; 
        score += 10; 
       }else 
       if (result != -2) 
       { 
        cam.removeChild(bullets[result]); 
        bullets.splice(result, 1); 
        current = j; 
       } 
      } 
      for (var k:int = 0; k < bullets.length; k++) 
      { 
       bullets[k].check(); 
      } 
      /*cam--; this code moves the screen to the right*/ 
      for (var s:int = coins.length-1; s >= 0; s--) 
      { 
       if (coins[s].CheckObj(char)) 
       { 
        cam.removeChild(coins[s]); 
        coins.splice(s, 1); 
        score++; 
       } 
      } 
      for (var d:int = 0; d < doors.length; d++) 
      { 
       if (!doors[d].unlocked) 
        keyCount--; 
       doors[d].unlocked = true; 
       loadMap(doors[d].dest,mapIndex); 

      } 
      for (var w:int = 0; w < keys.length; w++) 
      { 
       if (keys[w].CheckObj(char, enemies) == 1) 
       { 
        cam.addChild(keys[w]); 
        keys[w].vis = true; 
       } 
       if (keys[w].CheckObj(char,enemies)==2) 
       { 
        cam.removeChild(keys[w]); 
        keys.splice(w, 1); 
        keyCount++; 
       } 
      } 
      for (var l:int = 0; l < ladders.length; l++) 
      { 
       (ladders[w].CheckObj(char, 1, climbing)); 
      } 
      cam.x -= char.x - prevX; 
      cam.y -= char.y - prevY; 
      spaceDown = false; 
     } 
     public function keysDown(e:KeyboardEvent):void 
     { 
      if (e.keyCode == 65) 
       aDown = true; 
      if (e.keyCode == 68) 
       dDown = true; 
      if (e.keyCode == 87&&char.y+char.width/2==char.floor) 
       char.grav = -15; 
     } 
     public function keysUp(e:KeyboardEvent):void 
     { 
      if (e.keyCode == 65) 
       aDown = false; 
      if (e.keyCode == 68) 
       dDown = false; 
     } 
    } 

} 

답변

0

mapIndex은 선언되지 않은 변수입니다.

프로그램에서 클래스 Main은 클래스 Sprite을 확장하므로 먼저 해당 변수 또는 속성을 Sprite에서 상속받을 수 있는지 봅시다. 문서는 여기에 있습니다 : 귀하의 브라우저에서

http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/Sprite.html

mapIndex에 대한 검색을 실행하고 당신은 해당 페이지에 아무데도 것을 볼 수 있습니다. 따라서 클래스 SpritemapIndex이라는 변수 또는 속성이 있어도 private이되므로 Main에는 여전히 선언이 없습니다.

그래서 상속 된 클래스 변수/속성은 아니지만 로컬 변수이거나 클래스 Main에 특별히 추가 된 것일 수 있습니다. var mapIndex에 대한 검색은 함수에 대한 매개 변수가 될 수 있기 때문에 실제로 작동하지 않습니다. mapIndex:에 대한 검색 실행은 ActionScript 3.0에서 변수, 속성 또는 함수에 유형/반환 유형이 필요 없으므로 작동하지 않습니다. 그래서 당신은, mapIndex에 대한 검색을 실행하는 각각의 자리에서보고, 그 중 하나가 선언되어 있는지 확인해야합니다 :이 중 어느 것도 선언이다

1: mapIndex = 0; 
2: mapIndex = index; 
3: loadMap(doors[d].dest,mapIndex); 

있지만 각 변수/속성을 참조하는 동적이지 않은 방식으로 즉, 이 아니라 this["mapIndex"]이 아닙니다.이 방법으로 액세스하려고하면 선언이 필요하므로 코드가 손상됩니다.

+0

나에게 설명해 주셔서 감사합니다. – Umeer

관련 문제