![]() |
|
||||||||||
|
|||||||
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | Опции просмотра |
|
![]() |
![]() |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 81
|
Есть код, где при нажатой клавише создается перевернутый объект, и при отпущенной клавише возвращается прежний. Только вот при возврате, объект как будто подпрыгивает. Уже все перерыл, не могу понять в чем дело. Вроде вычисление правильные: берем Y и плюсуем 40 px и обратно минусуем, разница между центром двух объектов ровно 40.
package{ import flash.display.*; import flash.events.*; import flash.geom.*; import flash.net.*; import flash.text.*; import flash.utils.* import com.actionsnippet.qbox.*; import Box2D.*; public class test extends Sprite{ var sim:QuickBox2D; private var hero:QuickObject; var bol:Boolean =false; public function test() { this.addEventListener(Event.ADDED_TO_STAGE, onAddedToStage); } public function onAddedToStage(e: Event): void { removeEventListener(Event.ADDED_TO_STAGE, onAddedToStage); sim = new QuickBox2D(con); sim.addBox({x:447/30, y:622.5/30, width:910/30, height:37/30, density:0}); hero = sim.addBox({x:300/30, y:529/30, width:89.8/30, height:150/30, density:0.07,allowSleep:false,restitution:0.0,fixedRotation:true}); stage.addEventListener(KeyboardEvent.KEY_DOWN,onKeyPressed); stage.addEventListener(KeyboardEvent.KEY_UP, onKeyReleased); sim.start(); } function onKeyPressed(evt:KeyboardEvent):void { if(!bol){ bol = true var ySave:Number = hero.y+(40/30); hero.destroy(); hero = sim.addBox({x:300/30, y:ySave, width:118/30, height:70/30, density:0.07,allowSleep:false,restitution:0.0,fixedRotation:true}); } } function onKeyReleased(evt:KeyboardEvent):void { if(bol){ bol = false var ySave:Number = hero.y-(40/30); hero.destroy() hero = sim.addBox({x:300/30, y:ySave, width:89.8/30, height:150/30, density:0.07,allowSleep:false,restitution:0.0,fixedRotation:true}); } } } } Последний раз редактировалось GoodWin74; 11.08.2012 в 01:59. |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 81
|
Буду признателен за помощь!
|
|
|||||
|
А координата задаётся для центра, не левого верхнего угла?
|
|
|||||
|
Регистрация: Jun 2009
Сообщений: 81
|
Да для центра, дело в том, что если ставить плотность(density) равное нулю, то все нормально, а вот если есть плотность, то вот такой бред получается, как будто объект создается выше, чем заданны координаты... Даже не знаю на что думать.
Добавлено через 8 минут Вот код и рабочий пример density = 0 http://pastebin.com/RvixHGht http://serg1992.ucoz.com/test2.swf Добавлено через 11 минут Есть подозрение, что Box не успевает удалить объект, и создает новый на нем, и из-за этого получается толчок вверх, а после удаление он падает. Но если это так, то как прослушать событие удаления? ![]() Добавлено через 28 минут В итоге так и получилось, если не слушать удаление, то можно просто переместить до удаления объект: var ySave:Number = hero.y-(40/30); hero.x = 1000; hero.destroy(); hero = sim.addBox({x:300/30, y:ySave, width:89.8/30, height:150/30, density:1,allowSleep:false,restitution:0.0,fixedRotation:true}); ![]() Последний раз редактировалось GoodWin74; 13.08.2012 в 08:47. |
|
|||||
|
Имхо вам надо было в раздел API приложений и сред, это же по Box2D вопрос, получается.
А зачем удалять и заново создавать объект, если можно его просто повернуть? |
|
|||||
|
Регистрация: Jun 2009
Сообщений: 81
|
дело в том что скин тоже поворачивается, и когда анимация персонажа переходит на кадр "лежать" или сидеть и тд, скин будет отображен не корректно(вертикально и сжат) и приходится пересоздавать объект
|
![]() |
![]() |
Часовой пояс GMT +4, время: 12:13. |
|
|
« Предыдущая тема | Следующая тема » |
|
|