|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
PDParticleSystem vs CustomCamera
Всем удачи в своих делах.
Использую физический движок (nape) в связке с starling, архитектура - mvc. Построение мира (карты) идёт за счёт обработчика событий столкновений. Старт игры - создаем землю - генерим несколько платформ над землёй Процесс игры - когда персонаж, сталкивается с платформой срабатывает событие инициализации прокрутку мира - обработчик просто смещает все объекты Создаю модели, их отдаю контроллерам и вьюшкам. Камера это дело всё скривает, она постоянно направленна на персонажа и смещает всю вьюшку. Получается так, что на самом деле физ мир постоянно скачет, но на вьюшке всё гладко. Так вот, если привязываться к координатам персонажу в физ. мире, то после смещения, сгенерированные частички ранее не получиться так же переоперделить (сместить), а если привязываться к localToGlobal от персонажа, то частички генерируются относительно стейджа, а не физ. мира. И получается что при движенни, частички распадаються относительно дисплея, нежели как должно быть, внутреннего мира. Вот сижу думаю над велосипедом. Из мыслей, делать отдельный спрайт, и его двигать, пропуская смещения, но что-то доконца в голове не уложу. Может кто что посоветует, как лучше решить Для наглядности, снял небольшое видео , на 22 секунде вывожу физ. мир в чёрном окне. Камера 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) ) ); /**/ } worldModel // метод генерации платформ 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. |
|
|||||
- ох, нехорошая на мой взгляд мысль тащить mvc в боевку игры, оно не для того, ( боевка запустилась -> работает как простая вьюха -> в конце уровня выкидываем во вьюху списка левелов или диалога победы/поражения )
- почему PDParticleSystem не добавлен на главный объект боевки(+Nape), это бы логично и правильно смещало любые частицы вместе со сценой, в citrus это сделано именно так, и там никаких проблем с камерой и физикой нет Цитата:
|
|
|||||
Цитата:
Проект создается в считанные минуты. Не вижу ничего плохого, но всеравно спасибо за мнение. Если добавить PDParticleSystem в сцену главную вьюшку мира, то получим разрыв частиц, так как при смещении всего мира, координаты всех объектов смещаются. Объекты имеют тела в нейпе, частицы нет, они привязываются к персонажу, и соотвественно после скачка, всё будет отлично, кроме того что частички сгенерированные до "скачка", нельзя так же сдвинуть ( разве что сдигать не PDParticleSystem, а его контейнер ) p.s. видео открыл, втык Добавлено через 25 часов 10 минут Всё сделал. Вопрос еще, как чёрный генерировать??
__________________
return this... Последний раз редактировалось AlexCooper; 26.07.2015 в 19:57. |
Часовой пояс GMT +4, время: 07:03. |
|
« Предыдущая тема | Следующая тема » |
|
|