часть вопросов здесь пропадет, если авторы изучат алгоритмы и отладку до того, как задавать вопросы.

м классе программирования

Мне нужно создать игру Tiles с AS3 (например, Zelda).

На карте тайлы инициализируются черным в массиве, и после этого они меняются случайным образом каждый раз, когда левый пик песни достигает определенного значения.

Когда плитки меняются, мне нужно обновить массив с новым значением. На самом деле, я всегда получаю сообщение об ошибке # 1010: термин не определен и не имеет свойств.

Вот как инициализируются плитки:

переменная

    private var grid: MovieClip;
    private var nbRow: int = 6; 
    private var nbCol: int = 12; 
    private var oneTiles: Tiles;
    private var t: Tiles;

    public var tMap: Array = [
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
        [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
    ];

Создание карты

     private function createGrid(): void {
          grid = new MovieClip();
          addChild(grid);

          for (var r: int = 0; r < nbRow; r++) {
               for (var c: int = 0; c < nbCol; c++) {
                   t = new Tiles();
                   t.x = t.width * c;
                   t.y = t.height * r;
                   grid.addChild(t);
               }
         }
     }

Установить плитки

    private function displayTiles(): void {
        var i: int = 0;
        for (var r: int = 0; r < nbRow; r++) {
            for (var c: int = 0; c < nbCol; c++) {
                var t: Tiles;
                t = Tiles(grid.getChildAt(i));
                t.gotoAndStop(tMap[r][c]);
                i++;
            }
        }
    }

Эта функция вызывается каждый раз, когда значение leftpeak достигает значения

    private function resetTiles(): void {
        for (var i: int = 0; i < grid.numChildren; i++) {
            oneTiles = grid.getChildAt(i) as Tiles;

            oneTiles.getTiles();
            //30% chance gotoAndStop(1) black tiles
            //70% chance gotoAndStop(2) white tiles
       }
    }

Это источник проблемы: чтобы обновить массив, я добавил это в цикл for resetTiles (). Я всегда получаюОшибка # 1010: термин не определен и не имеет свойств. :

            private var posX: uint = 0; //global
            private var posY: uint = 0; //global

            tMap[posX][posY] = oneTiles.getFrame();

            if(posX == 11 && posY != 5){
                posX = 0;
                posY++;
            }else if(posX == 11 && posY == 5){
                posX = 0;
                posY = 0;
            }else{
                posX++;
            }
            trace(posX);
            trace(posY);

        }
Так в чем же проблема? Обычно, с этим кодом, каждый раз, когда плитка изменяется, хорошая плитка в tMap должна обновляться.Я провел некоторое тестирование, и источником проблемы является линияtMap [posX] [posY] = oneTiles.getFrame (); Тем не менее, я не могу понять, почему
public function getFrame():void{
            this.currentFrame;
    }

Ответы на вопрос(1)

Решение Вопроса

как бороться с такой проблемой. Как только вы узнаете, что конкретная линия доставляет вам неприятности, вам необходимо понять всю картину. Вы должны узнать текущее состояние и значение каждого задействованного объекта, что-то вроде этого:

import flash.utils.getQualifiedClassName;

function hyperTrace(prefix:String, target:*):void
{
    trace("");
    trace("Name:", prefix);
    trace("Value:", target);
    trace("Type:", typeof(target));
    trace("Class:", getQualifiedClassName(target));
}

И тогда вы начинаете учиться:

// Expected result: instance of Tiles class
hyperTrace("oneTiles", oneTiles);

// Expected result: Function
hyperTrace("oneTiles.getFrame", oneTiles.getFrame);

// Expected result: Array
hyperTrace("tMap", tMap);

// Expected result: Array
hyperTrace("tMap[" + posX + "]", tMap[posX]);

// Expected result: int
hyperTrace("tMap[" + posX + "][" + posY + "]", tMap[posX][posY]);

Затем вы ищете тот, который не соответствует ожидаемому результату. Какой-то объект не тот, который вы ожидали там (включая значенияPosX а такжебукет цветов индексы), и это является источником ошибки. Теперь, когда вы узнали, в чем проблема, вы должны выяснить, что именно пошло не так с вашим предыдущим кодом или логикой разработки, чтобы это дало неожиданные результаты.

Не копаясь глубоко, я думаю, что либоoneTiles оказалось неопределенным, илиPosX а такжебукет цветов имеет неправильные значения, такTMAP [PosX] не определено

 Organis22 дек. 2017 г., 22:33
@Brian Используется раньшеДокументация раздел, но удалил его (вероятно, он не служил своей цели). Я думаюЗДОРОВО часть вопросов здесь пропадет, если авторы изучат алгоритмы и отладку до того, как задавать вопросы.
 Brian22 дек. 2017 г., 20:53
Вы должны почти опубликовать общее "Как мне отладить в AS3?" вопрос и ответь на это :)

Ваш ответ на вопрос