Ошибка ActionScript 3.0 № 1009: невозможно получить доступ к свойству или методу пустой ссылки на объект - PullRequest
0 голосов
/ 26 марта 2011

Для моего первого проекта во флеш-памяти я решил сделать небольшую футбольную игру. Он работал всякий раз, когда я идентифицировал каждый отдельный объект, но затем, так как я хотел добавить больше маленьких игроков ИИ, я попытался заставить движение работать с некоторыми массивами, содержащими объекты, но затем он возвратил это сообщение об ошибке. Любая помощь?

function movers(event:Event):void
{
  for (var qwerty:int=0;qwerty<=(ALIEN.length);qwerty++) {
    var run:Object=ALIEN[qwerty];
    run.rotation=Math.atan2(bc.y-run.y,bc.x-run.x)/(Math.PI/180);
    run.x+=Math.cos(sym.rotation*Math.PI/180)*SPD;
    run.y+=Math.sin(sym.rotation*Math.PI/180)*SPD;
  }

  if (ftblFLY) {
    ftbl.x+=Math.cos(ftbl.rotation*Math.PI/180)*7;
    ftbl.y+=Math.sin(ftbl.rotation*Math.PI/180)*7;
  }

  for (var wer:int=0;wer<=(team.length);wer++) {
    if (ftbl.hitTestObject(wer)) {
      if (wer!=bc) {
        bc=wer;
        ftblFLY=false;
      }
    }
  }

  if (bc!=wr) {
    wr.x+=Math.cos(wr.rotation*Math.PI/180)*SPD;
    wr.y+=Math.sin(wr.rotation*Math.PI/180)*SPD;
  }

  for (var asdf:int=0;qwerty<=(ALIEN.length);asdf++) {
    var runner:Object=ALIEN[asdf];
    if (runner.hitTestObject(bc)) {
      stage.removeEventListener(Event.ENTER_FRAME,movers);
      stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyers);
      stage.removeEventListener(MouseEvent.CLICK,clicko);
      texter.text="Tackled!!!";
    }
  }

  bc.x+=Math.cos(bc.rotation*Math.PI/180)*(SPD*playaRD);
  bc.y+=Math.sin(bc.rotation*Math.PI/180)*(SPD*playaRD);
  bc.rotation=bc.rotation+(turno*playaTD);

  ftbl.rotation=bc.rotation;
  ftbl.x=bc.x;
  ftbl.y=bc.y;

  if (bc.y<=0) {
    stage.removeEventListener(Event.ENTER_FRAME,movers);
    stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyers);
    stage.removeEventListener(MouseEvent.CLICK,clicko);
    texter.text="Touchdown!!!";
  }
}

Ответы [ 2 ]

1 голос
/ 26 марта 2011

должно быть < ALIEN.length не <= то же самое с wer </p>

примерно так:

for (var qwerty:int=0;qwerty<(ALIEN.length);qwerty++) {

for (var wer:int=0;wer<(team.length);wer++) {

for (var asdf:int=0;qwerty<(ALIEN.length);asdf++) {

Допустим, у вас есть массив х из 10 объектов, тогда ваш

х. Длина 10 но ваш массив будет начинаться с 0, поэтому вы будете иметь значения из x [0] - x [9] поэтому, если вы делаете: для (var i: int = 0; i <= (x.length); i ++) {</strong>вы не получите значение для x [10], и вы получите ошибку ссылки на нулевой объект.

1 голос
/ 26 марта 2011

Ваши соглашения по кодированию делают ваш код трудным для понимания ...

Вы инициализировали свой массив ALIEN [] вне своей функции или для цикла for? Если вы этого не сделали, Flash выдаст ошибку, которую вы видите. Вы не можете использовать переменную, пока не инициализируете ее.

Если нет, вы можете использовать

var ALIEN:Array = new Array();

или

var ALIEN:Array = [];

По мере продвижения вы можете захотеть взглянуть на Векторы, которые предлагают некоторые преимущества в итерации.

Удачи!

...