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

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

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

Регистрация: May 2011
Сообщений: 221
Question Как определить объект класса?

Есть мувик класса Player. Он один. Есть класс Wall. И у него много чайлдов. Что один, что другие помещены на сцену ручками, т.е. не програмно.

Как узнать что игрок столкнулся с объектом который является представтелем класса Wall? Я так понимаю, что для начала необходимо вобще в принципе зафиксировать коллизию и узнать с чем мы стлкнулись, после чего проверить класс объекта, но как это реализовать уже битый час не могу понять, hitTestObject возвращает только сам факт наличия коллизии, но не имя самого объекта.

Да, можно было бы написать в классе Wall, что если мы столкнулись с игроком то, тогда [список команд]. Но проблема в том, что игроков может быть несколько и писать так для каждого - не лучшая затея.


Последний раз редактировалось Фенёк; 02.11.2011 в 17:12.
Старый 02.11.2011, 17:12
carrotoff вне форума Посмотреть профиль Отправить личное сообщение для carrotoff Найти все сообщения от carrotoff
  № 2  
Ответить с цитированием
carrotoff
 
Аватар для carrotoff

Регистрация: May 2010
Сообщений: 543
Код AS3:
if(object is Wall){
     doSomething();
}
__________________
Вы грабите бедных людей. Парень со свирелью накажет вас. Хонгильдон (с)

Старый 02.11.2011, 17:12
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 3  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
для этого нужно знать имя объекта, разве нет?

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
if (collisator is Wall) { trace("Кажется, я разшиб лоб..") }
Добавлено через 59 секунд
опоздал.
ну так узнавайте, иначе когда Вы будете спрашивать, Wall он или не Wall.
__________________
Reality.getBounds(this);

Старый 02.11.2011, 17:15
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 5  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
Не, про оператор is я знаю. Проблема в том, чтобы определить имя объекта с корорым столкнулись и после этого только проверить принадлежит ли он классу

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

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
hitTestObject возвращает только сам факт наличия коллизии, но не имя самого объекта.
Интересно. А с чем же Вы делаете хитТест тогда?

Добавлено через 1 минуту
Забудьте про "имя", оно никому не интересно. То что нужно, называется "ссылка".
Покажите, как Вы делаете хитТест. Код.
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 02.11.2011 в 17:19.
Старый 02.11.2011, 17:24
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 7  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
Это пока тоже представляет определенную проблему ) вот допустим куча стенок есть wall1, wall2, wall3..wall100. Так, условно. На каждый шаг гонять циклом не возникла ли коллиция с каждой из этих стенок мягко говоря не очень продуктивно. Возможно ли узнать имя объекта в которым происходит наложение?

Один момент, сейчас приедет код )

Код AS3:
if (MovieClip(root).player.hitTestObject(Object is Wall)){
				trace("collision");
			}
при это Object разумеется неопределен, я тешил себя надеждой на то, что он сам как-нибудь отловится )


Последний раз редактировалось Фенёк; 02.11.2011 в 17:27.
Старый 02.11.2011, 17:33
Vektor вне форума Посмотреть профиль Отправить личное сообщение для Vektor Найти все сообщения от Vektor
  № 8  
Ответить с цитированием
Vektor
 
Аватар для Vektor

Регистрация: May 2008
Адрес: Новокузнецк
Сообщений: 219
Записей в блоге: 1
Код AS3:
var Array=[wall1, wall2, wall3..wall100]
for (var i:uint=0; i<=Array.length-1; i++) {
if(Array[i].hitTestObject(mcPlayer) {
trace(Array[i]);
break;
}
}
Можно, поделить карту на зоны, и в зависимости от зоны, проверять столкновения wall.
__________________
Книги и желание лучшие учителя.


Последний раз редактировалось Vektor; 02.11.2011 в 17:36.
Старый 02.11.2011, 17:49
Фенёк вне форума Посмотреть профиль Отправить личное сообщение для Фенёк Найти все сообщения от Фенёк
  № 9  
Ответить с цитированием
Фенёк

Регистрация: May 2011
Сообщений: 221
Код AS3:
			for(var i = 0; i < MovieClip(root).numChildren; i++){
				var obj = MovieClip(root).getChildAt(i);
				if (obj is Wall) {
					if (MovieClip(root).player.hitTestObject(obj)){
						trace("wut");
					}
				}
			}
Ок, всем спасибо )

Старый 02.11.2011, 18:15
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 10  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
MovieClip(root) сохрани в переменной, пожалей процессор и время игрока.
__________________
Reality.getBounds(this);

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

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

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


 


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


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