Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Box2D] не работает скининг (http://www.flasher.ru/forum/showthread.php?t=182499)

Wolf 25.07.2012 04:45

не работает скининг
 
Код AS3:

package 
{
        import Box2D.Dynamics.b2World;
        import flash.display.Bitmap;
        import flash.display.Sprite;
        import flash.display.Stage;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import utils.Key;
        import utils.Utils;
        import Box2D.Common.Math.b2Vec2;
        import Box2D.Dynamics.b2Body;
        /**
        * ...
        * @author
        */

        public class Tank extends Entity
        {
                [Embed(source = "../assets/tank/tank1.png")] private var TANK1:Class;
                public var speed:int = 10;
                private var sprite:Sprite = new Sprite();
                private var bitmap:Bitmap = new TANK1;
                public function Tank(world:b2World, stage:Stage) {
                        super(world, stage);
 
                        bitmap.x = -bitmap.width / 2;
                        bitmap.y = -bitmap.height / 2;
 
                        sprite.addChild(bitmap);
                        stage.addChild(sprite);
                        sprite.x = 100;
                        sprite.y = 100;
 
 
                        body_def.position.Set(sprite.x / 30, sprite.y / 30);
                        body_def.type = b2Body.b2_dynamicBody;
                        body_def.userData = sprite;
                        body = _world.CreateBody(body_def);
                        body_shape.SetAsBox(sprite.width / 30 / 2, sprite.height / 30 / 2);
                        body_fixture.shape = body_shape;
                        body.CreateFixture(body_fixture);
 
                }
                override protected function update(e:Event):void {
                        if (input.isKey(Key.A)) body.SetAngle(body.GetAngle() - Utils.getRadian(2));
                        if (input.isKey(Key.D)) body.SetAngle(body.GetAngle() + Utils.getRadian(2));
                        if (input.isKey(Key.W)) body.SetLinearVelocity(new b2Vec2(speed * Math.sin(body.GetAngle()), -speed * Math.cos(body.GetAngle())));
                        if (input.isKey(Key.S)) body.SetLinearVelocity(new b2Vec2(-speed*Math.sin(body.GetAngle()), speed*Math.cos(body.GetAngle())));
                }
 
                override protected function keyUp(e:KeyboardEvent):void {
                        if (e.keyCode == Key.W) body.SetLinearVelocity(new b2Vec2(0.0, 0.0));
                        if (e.keyCode == Key.S) body.SetLinearVelocity(new b2Vec2(0.0, 0.0));
                }
        }
}

Код AS3:

package 
{
        import Box2D.Collision.Shapes.b2PolygonShape;
        import Box2D.Dynamics.b2Body;
        import Box2D.Dynamics.b2BodyDef;
        import Box2D.Dynamics.b2Fixture;
        import Box2D.Dynamics.b2FixtureDef;
        import Box2D.Dynamics.b2World;
        import flash.display.Stage;
        import flash.events.Event;
        import flash.events.KeyboardEvent;
        import utils.Input;
 
        /**
        * ...
        * @author
        */

        public class Entity
        {
                protected var _world:b2World;
                protected var _stage:Stage;
                protected var input:Input;
                public var body:b2Body;
                public var body_def:b2BodyDef;
                public var body_shape:b2PolygonShape;
                public var body_fixture:b2FixtureDef;
                public function Entity(world:b2World,stage:Stage):void {
                        _world = world;
                        _stage = stage;
                        input = new Input(_stage);
                        body_def = new b2BodyDef();
                        body_shape = new b2PolygonShape();
                        body_fixture = new b2FixtureDef();
                        _stage.addEventListener(Event.ENTER_FRAME, update);
                        _stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
                        _stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);
                }
 
                protected function update(e:Event):void {
                }
 
 
                protected function keyDown(e:KeyboardEvent):void {
 
                }
 
                protected function keyUp(e:KeyboardEvent):void {
 
                }
 
        }
 
}

почему у меня скин танка и его фигура живут отдельно?

Добавлено через 1 час 11 минут
проблема была в update головного класа

caseyryan 25.07.2012 07:56

потому что в методе апдейт нужно и позицию спрайта каждый раз пересчитывать, что-то типа:
Код AS3:

var bodyPosition:b2Vec2 = body.getPosition();
sprite.x = bodyPosition.x * 30;
sprite.y = bodyPosition.y * 30;



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

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