2015-06-20 6 views
1

У меня есть игра, в которой игрок движется вперед (полу) случайных плит. Я хочу hittest, когда игрок попадает на определенную плитку.Как может hitTestObject работать для многих объектов?

Однако, когда шар попадает на один из порожденных в floor2, ничего не происходит.

Я думаю, что это потому, что на сцене есть несколько «пол2» мувиклипов?

Когда я отслеживаю границы «getBounds» для floor2, позиции, которые он показывает, все равно меняются на Hitest со всеми из них?

function handleCollision(e:Event):void {  
if(char.hitTestObject(floor2)){ 
trace("hit detected"); 
} 

Это, как игрок нерестится в:

var char:Char = new Char(); 
char.x = 275; 
char.y = 786; 
cam.addChild(char); 

Это, как floor2 размножается в:

if (randomRounded > 10 && randomRounded <= 50){ 
floor2 = new Floor2(); 
floor2.x = -8.45; 
floor2.y = 786 - tileCounter; 
cam.addChildAt(floor2, stage.numChildren-1); 

Дополнительно: (RandomRounded является случайным числом), (есть a 'Var floor2: Floor2;')

, пожалуйста, помогите :(

ответ

1

Переменная может ссылаться только на одно значение. Таким образом, ваша переменная floor2 может ссылаться только на объект Floor2. Если вы присвоите новое значение, переменная будет ссылаться на это значение.

Что вы должны сделать, это использовать Array, который может содержать много объектов.

var floors:Array = []; 

if (randomRounded > 10 && randomRounded <= 50){ 
    floor2 = new Floor2(); 
    floor2.x = -8.45; 
    floor2.y = 786 - tileCounter; 
    cam.addChildAt(floor2, stage.numChildren-1); 
    floors.push(floor2); // add the reference to the array, now floor2 can safely be overwritten by a new value without losing the previous one 
} 

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

function handleCollision(e:Event):void 
{ 
    for (var i:uint = 0; i< floors.length; ++i) 
    {  
     if(char.hitTestObject(floors[i])) 
     { 
      trace("hit detected"); 
     } 
    } 
} 
+0

спасибо, есть в любом случае для меня, чтобы проверить весь массив в handleCollision не просто сказать этажей [2], но все, что проталкивается к нему – Woolff

+0

@Woolff Вы должны перебирать его, цикл for - это один из способов сделать это. Пожалуйста, проверьте мой отредактированный ответ для примера. – null

+0

Я не могу вас поблагодарить! Проблема решена: D! – Woolff

 Смежные вопросы

  • Нет связанных вопросов^_^