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

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
По умолчанию PDParticleSystem vs CustomCamera

Всем удачи в своих делах.

Использую физический движок (nape) в связке с starling, архитектура - mvc.

Построение мира (карты) идёт за счёт обработчика событий столкновений.

Старт игры
- создаем землю
- генерим несколько платформ над землёй

Процесс игры
- когда персонаж, сталкивается с платформой срабатывает событие инициализации прокрутку мира
- обработчик просто смещает все объекты
Создаю модели, их отдаю контроллерам и вьюшкам.


Камера это дело всё скривает, она постоянно направленна на персонажа и смещает всю вьюшку.

Получается так, что на самом деле физ мир постоянно скачет, но на вьюшке всё гладко.
Так вот, если привязываться к координатам персонажу в физ. мире, то после смещения, сгенерированные частички ранее не получиться так же переоперделить (сместить), а если привязываться к localToGlobal от персонажа, то частички генерируются относительно стейджа, а не физ. мира. И получается что при движенни, частички распадаються относительно дисплея, нежели как должно быть, внутреннего мира.

Вот сижу думаю над велосипедом. Из мыслей, делать отдельный спрайт, и его двигать, пропуская смещения, но что-то доконца в голове не уложу. Может кто что посоветует, как лучше решить

Для наглядности, снял небольшое видео , на 22 секунде вывожу физ. мир в чёрном окне.


Камера
Код AS3:
protected function renderHandler(event:RenderHeroEvent):void
{
	var camera:Point = event.hero.clone(); // physic position
 
		camera.y -= _perspectiveOffset;
 
		camera.x -= screenWidth*.5;
		camera.x = rangeKX * ( camera.x / range );
 
		if ( Math.abs( camera.x ) > range ) {
			camera.x = range * ( ( camera.x > 0 ) ? 1 : -1 );
		}
 
		if ( camera.y > _perspectiveOffset ) camera.y = _perspectiveOffset;
 
		_view.y = -camera.y;
		_view.x = -camera.x;
 
		_world.dispatchEvent(
			new NapeGIDEvent(
				NapeGIDEvent.EMMITER,
				NapeGIDEvent.CAMERA, 
				new Rectangle( _view.x, _view.y)
			)
		);
		/**/ 
}
Добавлено через 6 минут
worldModel
Код AS3:
// метод генерации платформ
public function calc():void {
 
	var last:* = list[list.length-1]; // лист платформ
 
	if (last.position.y > _config.platformOffsetBuffer) { // проверка на смещение
 
		var platformParams:Point = _config.getPlatformParams();
 
		var countBlock:uint = Math.random()
				* ( platformParams.y - platformParams.x )
				+ platformParams.x ; // получение количество блоков в зависимости от высоты
 
		var body:Rectangle = new Rectangle(); // позиция и размеры новой платформы
 
			body.height = hSize;
			body.width = body.height*countBlock;
 
			body.x = Math.random( ) * ( _positionRange.x - body.width ) - _positionRange.y;
 
			body.y = last.position.y 
				- _config.platformOffset 
				+ _config.platformOffsetRandom.y 
				* Math.floor( Math.random() * _config.platformOffsetRandom.x ) ;
 
 
 
		if (list.length>1)  // генерация событий создания
		{	
			dispatchEvent(
				new NapeGIDEvent( 
					NapeGIDEvent.EMMITER, 
					NapeGIDEvent.NEW_SCOPE, 
					new Rectangle ( 
						.5* ( body.x
							+ body.width*.5
							+ last.position.x
							+ last.bounds.width*.5
						) , 
						.5* ( body.y
							+ last.position.y
						) 
					)  
				) 
			);
		}
 
 // генерация событий создания
		dispatchEvent(
			new NapeGIDEvent( 
				NapeGIDEvent.EMMITER,
				NapeGIDEvent.NEW_BODY, 
				body  
			) 
		);
 
		calc();
	}
 
}
 
// метод прокрутки мира
public function worldScroll(verticalScrolling:Number):void
{
	var worldList:BodyList = space.bodies;
	for (var i:int = 0; i < worldList.length; i++) {
 
		var obj:Body = worldList.at(i);
		if (!obj.userData.hasOwnProperty('border')) {
 
			if (obj.userData.ui && obj.userData.ui.type==NapeWorld.UI_BONUS) {
 
				obj.space = null;
				obj.position.y += verticalScrolling; // could be mouse location or whatever
				obj.space = space;
 
			} else {
				obj.position.y += verticalScrolling;
			}
		}
	}
 
	System.gc();
 
	dispatchEvent(new NapeGIDEvent(NapeGIDEvent.EMMITER,NapeGIDEvent.WORLD_OFFSET_COMPLETE, new Rectangle(verticalScrolling)));
}
__________________
return this...


Последний раз редактировалось AlexCooper; 25.07.2015 в 23:44.
Старый 26.07.2015, 08:15
ShockWave512 вне форума Посмотреть профиль Отправить личное сообщение для ShockWave512 Посетить домашнюю страницу ShockWave512 Найти все сообщения от ShockWave512
  № 2  
Ответить с цитированием
ShockWave512

Регистрация: Dec 2007
Адрес: NA
Сообщений: 741
Отправить сообщение для ShockWave512 с помощью Skype™
- ох, нехорошая на мой взгляд мысль тащить mvc в боевку игры, оно не для того, ( боевка запустилась -> работает как простая вьюха -> в конце уровня выкидываем во вьюху списка левелов или диалога победы/поражения )

- почему PDParticleSystem не добавлен на главный объект боевки(+Nape), это бы логично и правильно смещало любые частицы вместе со сценой, в citrus это сделано именно так, и там никаких проблем с камерой и физикой нет


Цитата:
Автор ограничил доступ к видео.

Сожалеем об этом.

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

Регистрация: Sep 2008
Адрес: Черкассы
Сообщений: 1,167
Записей в блоге: 1
Отправить сообщение для AlexCooper с помощью ICQ Отправить сообщение для AlexCooper с помощью Skype™
Цитата:
Сообщение от ShockWave512 Посмотреть сообщение
- ох, нехорошая на мой взгляд мысль тащить mvc в боевку игры, оно не для того, ( боевка запустилась -> работает как простая вьюха -> в конце уровня выкидываем во вьюху списка левелов или диалога победы/поражения )

- почему PDParticleSystem не добавлен на главный объект боевки(+Nape), это бы логично и правильно смещало любые частицы вместе со сценой, в citrus это сделано именно так, и там никаких проблем с камерой и физикой нет
Я в паттерне MVC пишу все свои программы. Есть своя либа, базовых контроллеров, моделей и вьюх (чтото на подобие роботлегса, только старт без "прогибов").
Проект создается в считанные минуты. Не вижу ничего плохого, но всеравно спасибо за мнение.

Если добавить PDParticleSystem в сцену главную вьюшку мира, то получим разрыв частиц, так как при смещении всего мира, координаты всех объектов смещаются. Объекты имеют тела в нейпе, частицы нет, они привязываются к персонажу, и соотвественно после скачка, всё будет отлично, кроме того что частички сгенерированные до "скачка", нельзя так же сдвинуть ( разве что сдигать не PDParticleSystem, а его контейнер )


p.s. видео открыл, втык

Добавлено через 25 часов 10 минут
Всё сделал.

Вопрос еще, как чёрный генерировать??
__________________
return this...


Последний раз редактировалось AlexCooper; 26.07.2015 в 19:57.
Создать новую тему Ответ Часовой пояс GMT +4, время: 12:26.
Быстрый переход
  « Предыдущая тема | Следующая тема »  
Опции темы
Опции просмотра

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

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


 


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


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