![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|
|
|||||
|
Регистрация: Nov 2013
Сообщений: 75
|
Здравствуйте, помогите пожалуйста?!
Вот код функции: CODE private function createJoint():void { var massObjStat:Array = new Array(); var massObjDyn:Array = new Array(); //Добавляю в массивы статические и динамические объекты которые расположены в клипе Level1 //lvl:Level1 = new Level1(); for (var i:int = 0; i < lvl.numChildren; i++) { switch(lvl.getChildAt(i).name) { case "Box_Dynamic": { massObjStat.push(lvl.getChildAt(i)); break; } case "Box_Static": { massObjDyn.push(lvl.getChildAt(i)); break; } } //Проверяю пересеклись ли объекты массивов между собой if (massObjDyn[i].hitTestObject(massObjStat[i])) { trace("Collise"); } } } Нужно чтобы функция определяла столкновения клипов. При этом коде выдаёт ошибку: TypeError: Error #2007: Параметр hitTestObject не должен быть равен нулю. at flash.display: isplayObject/_hitTest()at flash.display: isplayObject/hitTestObject()at Main1/createJoint() at Main1/parsing() at Main1/init() at Main1() |
|
|||||
|
Может дело в этой строчке))
А может дело в том, что либо . Попробуйте поставить проверку на null или, хотя бы trace этих объектов перед столкновением и посмотрите, что он выдаст.
__________________
Не стыдно спросить, стыдно не знать ! |
|
|||||
|
Проверку на столкновения, вам нужно делать только после того, как вы расфасовали все объекты по массивам. А у вас проверка идёт в цикле for. То-есть сразу же после первой итерации, вы лишь занесли в массив первый попавшийся элемент, а проверяете уже с ним столкновения с объектами из другого массива в котором ещё ничего нет.
|
|
|||||
|
Регистрация: Nov 2013
Сообщений: 75
|
Спасибо всем решил проблему.
Добавлено через 2 часа 8 минут А вот ещё такой вопрос как проверить пересечение одного массива с объектами с другим? |
|
|||||
|
Цитата:
Последний раз редактировалось ALeXVoz; 22.11.2013 в 02:09. Причина: ошибка |
|
|||||
|
Регистрация: Nov 2013
Сообщений: 75
|
Если проверять этим способом получится что для одного объекта в massObjDyn массиве и множеством объектов в massObjStat будет работать нормально, но как только в 1 массиве станет больше объектов то получится много одинаковых результатов.
|
|
|||||
|
Регистрация: Nov 2013
Сообщений: 75
|
На сцене 1 клип который заносится в массив massObjDyn и несколько клипов которые заносятся в массив massObjStat. Если проверить способом выше всё будет работать нормально, но если будет больше клипов в массиве massObjDyn, то работать программа уже будет неправильно.
|
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
artem2033, почему?
Вы берете каждый объект из первого массива и последовательно проверяете столкновения с объектами из второго массива. for(var k:int = 0; k < _staticObjects.length; k ++){ var staticObject:DisplayObject = _staticObjects[k] as DisplayObject; for(var j:int = 0; j< _dynamicObject.length; j ++){ var dynamicObject:DisplayObject = _dynamicObjects[j] as DisplayObject; trace("Check collision of " + staticObject + " and " + dynamicObject) } }
__________________
hauts.ru |
|
|||||
|
Регистрация: Nov 2013
Сообщений: 75
|
Да так и делаю но вместо 2 столкновений он показывает 4.
|
![]() |
![]() |
Часовой пояс GMT +4, время: 06:08. |
|
|
« Предыдущая тема | Следующая тема » |
|
|