2014-11-28 1 views
-1

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

есть ли другой способ сделать это? Я новичок в as3, просто делаю это в течение 2 недель. благодаря

import flash.events.KeyboardEvent; 

var char:mario = new mario(); 

addChild(char); 

char.x = 300; 

char.y = 720; 

var money:coin = new coin(); 

var Coin:Array = new Array(money,money,money,money,money); 

addChild(Coin[2]); 

trace(Coin[2]); 

for(var b:int = 0; b<5; b++) 

{ 
    addChild(Coin[b]); 
    Coin[b].x = 300; 
    Coin[b].y = 100*b; 

} 

stage.addEventListener(KeyboardEvent.KEY_DOWN,movement); 


var a:int; 
function movement(e:KeyboardEvent) 
{ 
    if(e.keyCode == 38) 
    { 
     char.y -= 5; 
    } 

    if(e.keyCode == 40) 
    { 
     char.y += 5; 
    } 

    if(e.keyCode == 37) 
    { 
     char.x -= 5; 
    } 

    if(e.keyCode == 39) 
    { 
     char.x += 5; 
    } 

    if(Coin.hitTestObject(char)) 
    { 

     Coin[b].y = -5000; 
     a++; 

    } 
    trace("coins= " + a); 
} 

ответ

1

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

Ваши экземпляры/переменные должны быть в нижнем регистре. Названия ваших классов должны быть в верхнем регистре. не

Так не

var Coin:coin = new coin(); 

Но

var coin:Coin = new Coin(); 

Когда вы сделаете это if(Coin.hitTestObject(char)) вы в основном ищете метод на вашем экземпляре массива под названием hitTestObject. Массив не имеет этого метода. Вам нужно указать индекс для него (Coin[1].hitTestObject(...)); поэтому он использует экземпляры монет (и вы должны делать это за цикл, для каждой монеты). Теперь я могу только предположить, что ваши классы «mario» и «coin» расширяют некоторый экранный объект, поэтому у них действительно есть метод hitTestObject.