![]() |
|
||||||||||
|
|||||
|
Регистрация: Aug 2010
Сообщений: 18
|
Приветствую всех форумчан.
В процессе создания игры с использованием псевдо 3d, назрел вопрос следующего характера : во время движения объекты расположенные на большом расстоянии движутся быстрее чем объекты расположенные поблизости, как избавится от этого недуга ? Опишу логику, которую использую для перемещения объектов: var groundObject:MovieClip = new GroundObject(); // объект, двигающийся навстречу var objPosition:Object = {x_pos:0,y_pos:0,z_pos:300};// расположение объекта на псевдо 3d сцене var zPosOfCamera:Number = 0; // расположение камеры, которая начнет "двигаться" вперед в ENTER_FRAME // далее следует метод, который я вызываю в ENTER_FRAME // он выполняет перемещение объекта // DITANCE_TO_HORIZONT - константа, описывающая расстояние до горизонта // function move():void { // расстояние от камеры до объекта var dz:Number = objPosition.z_pos - zPosOfCamera; // определяю scale для объекта исходя из расположения его по оси Z относительно камеры // как мне кажется это и есть моя проблема, т.к. я получаю линейную зависимость var scale:Number = ( DITANCE_TO_HORIZONT - dz) / DITANCE_TO_HORIZONT; groundObject.x = objPosition.x_pos * scale; groundObject.y = objPosition.y_pos * scale; groundObject.scaleX = groundObject.scaleY = scale; zPosOfCamera += 1; } Возможно кто-то сталкивался с такой проблемой или использовал другую логику ? подскажите как исправить ситуацию. Не смог прикрепить swf-ку, поэтому выложил сюда |
|
|||||
|
Регистрация: Nov 2010
Сообщений: 150
|
Попробуйте так
Добавлено через 8 минут var pos3d:Vector3D = new Vector3D(5,7,8); var minX:Number = 0; var minY:Number = 0; var width:Number = 640; var height:Number = 480; var cx:Number = width * 0.5; var cy:Number = height * 0.5; var distance:Number = 500; var pos2d:Point = new Point(((pos3d.x + cx) * distance + cx * pos3d.z) / (d + pos3d.z) + minX, ((height - pos3d.y) * distance + cy * pos3d.z) / (d + pos3d.z) + minY); |
|
|||||
|
Регистрация: Aug 2010
Сообщений: 18
|
спасибо, Stitch512.
Но я пошел другим образом var groundObject:MovieClip = new GroundObject(); // объект, двигающийся навстречу var objPosition:Object = {x_pos:0,y_pos:0,z_pos:300};// расположение объекта на псевдо 3d сцене var zPosOfCamera:Number = 0; // расположение камеры, которая начнет "двигаться" вперед в ENTER_FRAME // далее следует метод, который я вызываю в ENTER_FRAME // он выполняет перемещение объекта // DITANCE_TO_HORIZONT - константа, описывающая расстояние до горизонта // function move():void { // расстояние от камеры до объекта var dz:Number = objPosition.z_pos - zPosOfCamera; // определяю scale для объекта исходя из расположения его по оси Z относительно камеры // как мне кажется это и есть моя проблема, т.к. я получаю линейную зависимость var scale:Number = 20/dz; // чило 20 было получено опытным путем, что не есть гуд, но, // к сожалению, работает groundObject.x = objPosition.x_pos * scale; groundObject.y = objPosition.y_pos * scale; groundObject.scaleX = groundObject.scaleY = scale; zPosOfCamera += 1; } |
![]() |
![]() |
Часовой пояс GMT +4, время: 12:04. |
|
|
« Предыдущая тема | Следующая тема » |
|
|