![]() |
как можно проверять столкновение объекта одного класса с объектом другого класса?
как можно проверять столкновение объекта одного класса с объектом другого класса?
|
Столкновение классов вы проверять не можете. Вы можете проверять столкновение геометрических форм, описываемых классами. По поводу столкновения геометрии: все зависит от того, что с чем сталкиваете, в статике или в движении. В общем случае погуглите "collision detection"
|
|
а как тогда в классе проверять столкновение с разными объектами у которых нет имени. например: этим объектам присвоить какойнибуть 1 тип и смотреть, когда другой объект с другим типом столкнется сними.
про hitTestObject я знаю, я не знаю как реализовать т.к. с классами я знаком недавно. |
Предположим ваши геометрические фигуры сохранены в массиве. Пробегаетесь по массиву и делаете им хтиТестОбжект с какой-нибудь другой фигурой.
|
я бы давно так сделал, проблема в том что неизвестно сколько точно будет проверятся предметов на столкновение. их может быть 10 или 12. если делать так, то будут вылазить ошибки.
|
Цитата:
Проверяйте в цикле. Берете первую форму и проверяете со всеми остальными. Берете вторую и делаете то же самое. Нет универсального встроенного волшебного метода для проверки столкновений чего-хотите, сколько-хотите и как-хотите. Все руками делается. И головой. |
Если есть массив с объектами и вы незнаете находятся ли эти объекты в данный момент в контейнере с объектами можно заранее проверить их наличие:
Код AS3:
|
как можно заполнить массив (созданный в классе) с главной линии времени, а потом управлять элементами массива из класса?
Добавлено через 50 минут помогите пожалуйста |
Никак.
Делайте так: 1) У вас есть игровое поле. Оно владеет всеми фигурами. 2) Поле создает фигуры и сохраняет ссылки на них в массиве. 3) Поле же инициирует проверки на столкновение. Скажем, после каждого передвижения объектов. |
вот я создаю массив и управляю им:
Код AS3:
Код AS3:
Код:
TypeError: Error #1010: Термин не определен и не имеет свойств. |
1) Не создавайте публичный полей никогда. Массив должен быть приватным.
2) Сделайте публичный метод в MyFirstClass, скажем такой: addFigure(figure: DisplayObject) В этом методе добавляейте переданные объекты в массив. 3) В конструкторе MyFirstClass вы манипулируете элементом массива ar[0], но при этом массив у вас еще пустой. Чем в итоге вы манипулируете? 4) Задайте классу имя, которое характеризует его область ответственности. |
у меня возникла новая проблема...
вот код: Код AS3:
здесь я проверяю столкновение двух классов. но не работает. почему и как исправить? |
MyFirstClass у вас пустой. Соответственно объектов, которые могут столкнуться нет? Не совсем понял что не получается.
1) Заполняем поле(MyFirstClass. Переименуйте его уже) объектами. 2) Каким-то образом двигаем объекты. 3) Вызываем в MyFirstClass проверку на столкновение для каждого объекта. Давайте по порядку. Сначала заполните поле объектами которые могут столкнуться. И покажите код. |
я создаю объекты не кодом и в "редакторе", а потом присваиваю классу эти обьекты.
|
1) Покажите как присваиваете
2) Покажите код присваивания в MyFirstClass Мы так долго будем. Но писать за вас не хочу :) |
Цитата:
я думал что если присвоить объекту класс то этот объект и объекты внутри автоматически становятся этим классом и можно просто проверять столкновение совершенно всех объектов в классе. я не совсем понимаю как присваивать. вот мои попытки: Код AS3:
Код AS3:
Код AS3:
Код AS3:
Код:
TypeError: Error #2007: Параметр hitTestObject не должен быть равен нулю. |
Код AS3:
Container в своем конструкторе создает 10 фигур, добавляет их в список отображения, добавляет их в массив. |
что это за строчка?
Код AS3:
класс Figure, его я так понял можно оставить пустым ? |
Это объявление переменной. Ей пользуюсь в цикле для хранения ссылки на объекты Figure - объект, на который ссылается переменная, меняется с каждым циклом.
Вы ведь работаете во Flash CS? Если так то класс Figure можно не создавать. Просто прописать Figure в linkage библиотечного символа, а IDE сама создаст пустой класс. |
Цитата:
Код AS3:
|
Действительно. Автоматизм дело наказуемое. Еще в объявлении счетчика так же накосячил. Поправил код.
|
Вложений: 1
ничего не появляется на экране...
что я не так делаю? |
У меня на работе нету flash. У вас Container на сцене стоит? Если нет - сделайте в качестве document class - Container.
|
всё получилось, спасибо. я вот так вызывал:
Код AS3:
буду ставить вам плюсики в репутацию столько, сколько ваших сообщений в этой теме) Добавлено через 32 секунды щас поэкспериментирую над столкновениями а как можно добавить в массив символ, который находится на сцене? |
Цитата:
Цитата:
Любому объекту, который вы в IDE выставляете на сцену, можно в IDE же назначить name. Далее мы можем обратиться к объекту который непосредственно содержит в себе именованный объект: getChildByName("имяОбъекта"); |
пытался добавить так:
Код AS3:
Код:
TypeError: Error #2007: Параметр child не должен быть равен нулю. |
trace прямо выводит 0? По-хорошему именно там должно падение случиться.
Код AS3:
Далее вы передаете null в getChildIndex: Код AS3:
Подумайте еще. Сейчас не успею написать развернутый ответ. |
вот код:
Код AS3:
|
Для каждого объекта строчка
Код AS3:
Когда объект должен передвигаться. |
знаю, но почему объект не передвигается ?
|
Он и не должен передвигаться.
В общем случае, объекты отрисовываются один раз за один кадр. Вы присвоили координату объекту, потом изменили координату. А потом с новым кадром это все отрисовалось. Какое передвижение вы хотите? Плавное втечение некоторого времени из одной точки в другую? |
нет, не плавное. просто задать объекту координату например x=100 и всё. но объект не отрисовывается в новых координатах.
|
Прикрепите swf-ку к сообщению.
|
зачем ? на сцене ничего не происходит. это тоже самое что белый лист кинуть.
Добавлено через 2 минуты не могли бы вы показать код который проверяет столкновение дисплей обжектов? |
Видимо я должен был догадаться, что ничего не отображается по словам "но объект не отрисовывается в новых координатах"? Значит он и в старых не отрисовывается? А что вы хотите сталкивать, если у вас еще ничего не отображается? Надо же сначала добиться отображения объектов на сцене. Будем дальше пытаться?
Вот ссылочку нашел http://www.ilike2flash.com/2009/06/s...nscript-3.html |
это я умею. мне нужно точно такое же, только в классе чтобы проверять столкновение многих объектов.
Добавлено через 8 минут возможно вы знаете (или не знаете) браузерную флэш игру - "starquake" (http://www.starquake.ru/). там чтоб поставить модули на корабль нужно зажать мышку на нужном модуле, перетащить на свободную клетку в корабле, отпустить мышку и модуль ставится в ту самую клетку, в которую его перетащили. вот именно это мне надо. Добавлено через 35 минут итак, вот план: выберем предмет из списка зажимаем его перетаскиваем на нужную клетку отпускаем мышку предмет из списка всаёт на эту клетку (например все клетки загнать в массив и проверять столкновение с этим массивом) все обьекты - дисплей обжекты. Добавлено через 36 минут блин, я всё тока что осознал. пойду писать код |
Результаты выкладывайте - мне интересно какое у вас понимание получилось.
|
вот код, которым я перемещаю обьект из массива:
Код AS3:
Код AS3:
|
Цитата:
1. GUNS - так называют только константы. Переменная должна называться guns 2. Зачем вы засунули определение функций в цикл? С какой целью? Думаете они будут каждый раз создаваться? Нет, функция определяется один раз. Лучше всего в самом верху кода. 3. Внутри функций не надо писать GUNS[f], это все равно работать не будет. Знаете почему? Потому что когда сработает функция, от любого объекта, то переменная f будет равна своему последнему значению в цикле, то есть GUNS.length - 1. 4. Внутри функции нужно использовать e.target. И да, называть аргумент e - плохая практика. Нужно давать осмысленное название - event Что имеем на выходе? Код AS3:
|
| Часовой пояс GMT +4, время: 15:36. |
Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.