Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 21.11.2013, 14:59
artem2033 вне форума Посмотреть профиль Отправить личное сообщение для artem2033 Найти все сообщения от artem2033
  № 1  
Ответить с цитированием
artem2033

Регистрация: Nov 2013
Сообщений: 75
По умолчанию Помогите с проверкой на столкновения

Здравствуйте, помогите пожалуйста?!
Вот код функции:
CODE
Код AS3:
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");
 }
}
}
В клипе Level1 расположены 2 клипа с именем Box_Static и 2 Box_Dynamic.
Нужно чтобы функция определяла столкновения клипов.
При этом коде выдаёт ошибку:
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()

Старый 21.11.2013, 17:08
mihael_p вне форума Посмотреть профиль Отправить личное сообщение для mihael_p Посетить домашнюю страницу mihael_p Найти все сообщения от mihael_p
  № 2  
Ответить с цитированием
mihael_p

Регистрация: Jul 2011
Сообщений: 249
Отправить сообщение для mihael_p с помощью Skype™
Код AS3:
//lvl:Level1 = new Level1();
Может дело в этой строчке))

А может дело в том, что
Код AS3:
 massObjDyn[i] == null
либо
Код AS3:
massObjStat[i] == null
.

Попробуйте поставить проверку на null или, хотя бы trace этих объектов перед столкновением и посмотрите, что он выдаст.
__________________
Не стыдно спросить, стыдно не знать !

Старый 21.11.2013, 17:24
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 3  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Проверку на столкновения, вам нужно делать только после того, как вы расфасовали все объекты по массивам. А у вас проверка идёт в цикле for. То-есть сразу же после первой итерации, вы лишь занесли в массив первый попавшийся элемент, а проверяете уже с ним столкновения с объектами из другого массива в котором ещё ничего нет.

Старый 21.11.2013, 17:54
artem2033 вне форума Посмотреть профиль Отправить личное сообщение для artem2033 Найти все сообщения от artem2033
  № 4  
Ответить с цитированием
artem2033

Регистрация: Nov 2013
Сообщений: 75
Спасибо всем решил проблему.

Добавлено через 2 часа 8 минут
А вот ещё такой вопрос как проверить пересечение одного массива с объектами с другим?

Старый 22.11.2013, 02:05
ALeXVoz вне форума Посмотреть профиль Отправить личное сообщение для ALeXVoz Посетить домашнюю страницу ALeXVoz Найти все сообщения от ALeXVoz
  № 5  
Ответить с цитированием
ALeXVoz
 
Аватар для ALeXVoz

Регистрация: Nov 2008
Адрес: Ukraine, Kyiv
Сообщений: 94
Отправить сообщение для ALeXVoz с помощью Skype™
Цитата:
Сообщение от artem2033 Посмотреть сообщение
Спасибо всем решил проблему.

Добавлено через 2 часа 8 минут
А вот ещё такой вопрос как проверить пересечение одного массива с объектами с другим?
В 2х вложенных циклах.
Код AS3:
for (var s0:int = 0; s0 < massObjStat.length; s0++) {
    for (var s1:int = 0; s1 < massObjDyn.length; s1++) {
        if (massObjDyn[s1].hitTestObject(massObjStat[s0])) {
            trace('BOOM!!!');
        }
    }
}


Последний раз редактировалось ALeXVoz; 22.11.2013 в 02:09. Причина: ошибка
Старый 22.11.2013, 10:43
artem2033 вне форума Посмотреть профиль Отправить личное сообщение для artem2033 Найти все сообщения от artem2033
  № 6  
Ответить с цитированием
artem2033

Регистрация: Nov 2013
Сообщений: 75
Если проверять этим способом получится что для одного объекта в massObjDyn массиве и множеством объектов в massObjStat будет работать нормально, но как только в 1 массиве станет больше объектов то получится много одинаковых результатов.

Старый 22.11.2013, 11:07
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 7  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
artem2033, запятых не хватает для понимая вашего потока мыслей.
__________________
hauts.ru

Старый 22.11.2013, 11:14
artem2033 вне форума Посмотреть профиль Отправить личное сообщение для artem2033 Найти все сообщения от artem2033
  № 8  
Ответить с цитированием
artem2033

Регистрация: Nov 2013
Сообщений: 75
На сцене 1 клип который заносится в массив massObjDyn и несколько клипов которые заносятся в массив massObjStat. Если проверить способом выше всё будет работать нормально, но если будет больше клипов в массиве massObjDyn, то работать программа уже будет неправильно.

Старый 22.11.2013, 12:00
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 9  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
artem2033, почему?

Вы берете каждый объект из первого массива и последовательно проверяете столкновения с объектами из второго массива.

Код AS3:
 
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

Старый 22.11.2013, 12:49
artem2033 вне форума Посмотреть профиль Отправить личное сообщение для artem2033 Найти все сообщения от artem2033
  № 10  
Ответить с цитированием
artem2033

Регистрация: Nov 2013
Сообщений: 75
Да так и делаю но вместо 2 столкновений он показывает 4.

Создать новую тему Ответ Часовой пояс GMT +4, время: 06:08.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 06:08.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.