Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   QuickBox объект создается не там где должен (http://www.flasher.ru/forum/showthread.php?t=183077)

GoodWin74 11.08.2012 01:31

QuickBox объект создается не там где должен
 
Вложений: 1
Есть код, где при нажатой клавише создается перевернутый объект, и при отпущенной клавише возвращается прежний. Только вот при возврате, объект как будто подпрыгивает. Уже все перерыл, не могу понять в чем дело. Вроде вычисление правильные: берем Y и плюсуем 40 px и обратно минусуем, разница между центром двух объектов ровно 40.
Код AS3:

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});
                                }
                        }
        }
}

http://serg1992.ucoz.com/test.swf

GoodWin74 12.08.2012 00:17

заранее спасибо
 
Буду признателен за помощь!

Anton Riot 12.08.2012 23:05

А координата задаётся для центра, не левого верхнего угла?

GoodWin74 13.08.2012 08:18

Да для центра, дело в том, что если ставить плотность(density) равное нулю, то все нормально, а вот если есть плотность, то вот такой бред получается, как будто объект создается выше, чем заданны координаты... Даже не знаю на что думать.

Добавлено через 8 минут
Вот код и рабочий пример density = 0
http://pastebin.com/RvixHGht

http://serg1992.ucoz.com/test2.swf

Добавлено через 11 минут
Есть подозрение, что Box не успевает удалить объект, и создает новый на нем, и из-за этого получается толчок вверх, а после удаление он падает. Но если это так, то как прослушать событие удаления?:confused:

Добавлено через 28 минут
В итоге так и получилось, если не слушать удаление, то можно просто переместить до удаления объект:
Код AS3:

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});

Если есть еще предложения, буду рад :)

Anton Riot 13.08.2012 11:37

Имхо вам надо было в раздел API приложений и сред, это же по Box2D вопрос, получается.
А зачем удалять и заново создавать объект, если можно его просто повернуть?

GoodWin74 13.08.2012 12:46

дело в том что скин тоже поворачивается, и когда анимация персонажа переходит на кадр "лежать" или сидеть и тд, скин будет отображен не корректно(вертикально и сжат) и приходится пересоздавать объект


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

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