PDA

Просмотр полной версии : hitTest по-взрослому :)


SADoff
14.01.2009, 20:08
итак вопрос такой....
В первой своей игре прикосновения я делал путём перебора существующих объектв, поскольку их было всего 120 штук -поэтому это было не сложно ни для меня ни для компа,а вот как сделать автоматическую проверку прикосновения к ЛЮБОМУ объекту - не известно
Кто не в курсе - надо указать имя целевого мувика и к которому он должен прикоснутся
Вот вопрос; возможно ли впринципе сделать проверку на соприкосновение со всеми мувиками и чтоб hitTest возвращал имя(идентификатор) мувика с которым столкнулся
PS может можно применять звёздочку или там воросики как в полноценных языках

chingachgoog
14.01.2009, 21:19
for in - перебор объектов в объекте (например в руте).

gloomyBrain
14.01.2009, 21:22
нет, вопросики и звездочки не применяются
можно перебрать все объекты циклом:

for(item in this){
if( myMC.hitTest( this[item] ) ){
trace("есть контакт!")
}
}

где, понятное дело проверяется пересечение myMC со всеми объектами

А как еще? Можно все, что будет проверяться заносить в массив и потом делать сходный с данным цикл по элементам массива

Однако принципиально иного метода, где объекты не перебираются нет

AlexCooper
14.01.2009, 21:28
for (element in MovieClipPredok)
if (element == MovieClip && movie.hitTest(element)) addToMassive(element) где MovieClipPredok - клип или ссылка на котором располагаються тестирование клипы на хитТест
element == MovieClip проверка на то что это не что инное как Мувик
movie.hitTest(element) проверка на хитТест
addToMassive(element) запись в миссив либо вызов функции в которую передаёться имя мувика который попал в хитЗону

P.S. Код написан не под требования компилятора а для размишления над алгоритмом.

SADoff
14.01.2009, 21:30
спасибо большое!
Буду проверять

AlexCooper
14.01.2009, 21:31
Памятка: hitTest просит глобальных координат

SADoff
14.01.2009, 22:12
Я тут вот про что ещё подумал...
В конце концов любой способ упирается в ресурсы...
Дак вот ещё вопрос Какой из 2 способов лучше:
1) создание массива всех нужных мувиков и проверять соответствие каждого десятка из них в кадре(тут надо перечитать сложная формулировка)
on Enterframe(){
For (i=0;i==10;i++){
MC.hitTest("targetMC"+i)
}

2) или задействовать for(item in this) . Но тут огромные сомнения т.к. в каждом кадре проверять соответствие это ваще комп лопнет (ну если мувиков штук 500)

PS в пользу первого варианта то , что интересующие мувики имеют порядковые номера типа grunt0 grunt1
PSS и кстати пример первого варианта я использовал в соей игре вот тут её можно посмотреть http://www.kongregate.com/games/sadoff/invasion-from-hell
Там если пехотинца выбрать - у него зона поражения -она и тестирует соприкосновение со врагами

dimarik
14.01.2009, 22:17
http://lab.polygonal.de/2007/09/09/quadtree-demonstration/

SADoff
14.01.2009, 23:09
http://lab.polygonal.de/2007/09/09/quadtree-demonstration/

я конечно инженер по профессии но от этого у меня ум за разум заходит
Я конечно попробую разобраться , но чувствую что буду искать чего -нить попроще

etc
14.01.2009, 23:13
я конечно инженер по профессии но от этого у меня ум за разум заходит
Я конечно попробую разобраться , но чувствую что буду искать чего -нить попроще
А в чем проблема? Поле делится на ячейки, каждый объект проверяет столкновение с объектами только в тех ячейках, в которых он сам находится.

SADoff
14.01.2009, 23:16
А в чем проблема? Поле делится на ячейки, каждый объект проверяет столкновение с объектами только в тех ячейках, в которых он сам находится.

Это как раз ясно но вот само осуществление какое то заумное
Я просто стараюсь создавать как можно меньше объектов и даже массивов а там всё какое то враждебное для меня
Может завтра с утра полегче будет , а то сегодня баги весь день устранял в своей игре, вот и запарился

gloomyBrain
15.01.2009, 00:16
Быстрее будет метод с массивами
Еще быстрее будет метод по ссылке

Оба метода делают, по сути, одно и то же: "отрезают" лишнее
Минимизируя количество вычислений - увеличиваем FPS (аксиома, я знаю) =)