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

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

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

Регистрация: Feb 2014
Сообщений: 25
По умолчанию Пересечение объекта с другими объектами

Здравствуйте. Имеем одноколесный велосипед - состоит из сидушки и колеса. Колесо крутится при передвижении мыши как и сам велосипед целиком, только по горизонтали. Если есть препятствие на пути - велосипед его "переезжает" поднимаясь вверх на соответствующее расстояние, потом снова опускается. Реализовано с помощью hitTestObject()

Код AS3:
var vr:Number=cycle.y; // запоминаем координату велосипеда по оси ОУ
 
stage.addEventListener(Event.ENTER_FRAME,onFrameLoop);
 
function onFrameLoop(evt:Event):void
{
	cycle.x = mouseX; // велосипед по оси ОХ двигается за мышкой
	cycle.wheel.rotation = mouseX; // колесо велосипеда крутится от движения мышки
	if (cycle.hitTestObject(st)) // проверяем не столкнулся ли велосипед с объектом st, если да - "переезжаем"
	{
		cycle.y = vr-st.height ;
	} else {
		cycle.y = vr;
	}
}
не получается вставить .swf, вот скрин
Название: cycle.jpg
Просмотров: 760

Размер: 86.5 Кб

Вопрос: Как реализовать сценарий, чтобы велосипед "переезжал" произвольное количество препятствий, а не конкретно вбитое. Спс

Старый 02.02.2014, 12:50
КорДум вне форума Посмотреть профиль Отправить личное сообщение для КорДум Найти все сообщения от КорДум
  № 2  
Ответить с цитированием
КорДум
 
Аватар для КорДум

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Самое простое — загнать ссылки на столбы в массив и проверять столкновение в цикле. Это не оптимизированно, поэтому после наличия столкновения хотя бы break из цикла делайте и пройденные столбы из массива выкидывайте.
__________________
тут я

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

Регистрация: Feb 2014
Сообщений: 25
Спасибо за помощь
Код AS3:
var obj1:Array= new Array(); // Тут будут хранится все объекты которые мы видим на сцене
var obj2:Array= new Array(); // Тут только те, которые имеют класс Stone - это наши столбы, камни
 
for (var i:int = 0; i< this.numChildren; i++) // Проходим все дочернии объекты, если встречается объект класса Stone - закидываем его в массив obj2 с которым и будем работать
{
	obj1[i] = this.getChildAt(i);
	if (obj1[i] is Stone)
	{
		obj2.push(obj1[i]);
	}
}
 
var vr:Number = cycle.y;
 
stage.addEventListener(Event.ENTER_FRAME,onFrameLoop);
 
 
function onFrameLoop(evt:Event):void
{
	cycle.x = mouseX;
	cycle.wheel.rotation = mouseX;
    for (var j:int = 0; j< obj2.length; j++){
 
	if (cycle.hitTestObject(obj2[j]))
	{
	cycle.y = vr - obj2[j].height;
	break;
	}
	else
	{
	cycle.y = vr;
	}
   }
}
Цитата:
и пройденные столбы из массива выкидывайте
Вот тут даже не знаю или стоит делать, а если и стоит - то как реализовать, потому что велосипед ездит как вперед так и назад, и он может снова наехать на столб.

П.С. Да, это самый "прямой метод" над которым я и сначала думал, но... он очень ресурсозатратный, с каждым кадром нужно проходить цикл...

Можно ли как то реализовать столкновение как тут cycle.hitTestObject(st), но не с конкретным объектом st , а с классом объектов, например с классом Stone ?

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

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,783
Записей в блоге: 3
Цитата:
Можно ли как то реализовать столкновение как тут cycle.hitTestObject(st), но не с конкретным объектом st , а с классом объектов, например с классом Stone ?
Можно поместить все столбы в контейнер и проверять столкновение только с ним. Но вам это не подойдёт, так как высота столбов разная и в любом случае нужно искать конкретный столб, с которым столкнулись.

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
а с классом объектов, например с классом Stone ?
Нет, класс - штука невидимая и неосязаемая. Проверять столкновения можно только с его экземплярами. Идея с массивом никуда не уходит, просто добавляйте в массив только те столбы, которые видны на экране, и убирайте те, которые скрыты.
__________________
тут я

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

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

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


 


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


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