![]() |
|
||||||||||
|
|
|
|||||
|
Регистрация: Jan 2013
Сообщений: 38
|
создаю мир без гравитации, и создаю тело.
тело это будущая машина. хочу сделать чтобы она двигалась с ускорением ...body.CreateFixture2(polygonShape,1);... body.ApplyForce(new b2Vec2(0.0,50),body.GetPosition()); на до ли применять силы постепенно для ускорения? как правильно сделать ускорение? как сделать движение машины самостоятельным вместе с ускорением, т.е. просто проезжающие мимо например как тут (если перекрыть дорогу машине, она потом постепенно будет ускорятся и поедет...) |
|
|||||
|
Нужно форс применять с каким то интервалом(типа двигатель работает)
|
|
|||||
|
Регистрация: Jan 2013
Сообщений: 38
|
в чем разница такого эффекта, если ускорения не заметно, то ведь можно с интервалами и скорость линейную просто менять?
|
|
|||||
|
Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
|
Цитата:
|
|
|||||
|
А разницы особо и нету все зависит от того что требуется. Важно как будет выглядеть конечный результат а не реализация
|
|
|||||
|
Регистрация: Jan 2013
Сообщений: 38
|
взял я и написал по примеру как на с++ тут,
эффекта нет. что я делаю не так? package src.objects { import flash.display.MovieClip; import Box2D.Dynamics.b2BodyDef; import Box2D.Dynamics.b2Body; import src.Game; import Box2D.Collision.Shapes.b2PolygonShape; import Box2D.Common.Math.b2Vec2; import flash.events.KeyboardEvent; import flash.events.Event; public class Car extends MovieClip { private var line:uint; private var body:b2Body; public function Car() { this.addEventListener(Event.ADDED_TO_STAGE,init); } private function init(e:Event):void { stage.addEventListener(KeyboardEvent.KEY_DOWN,acceleration); } public function create():void { var bodyDef:b2BodyDef= new b2BodyDef(); bodyDef.type = b2Body.b2_dynamicBody; bodyDef.position = new b2Vec2(100 / Game.meters,100/ Game.meters); bodyDef.fixedRotation = true; bodyDef.userData = this; bodyDef.allowSleep=false; body = Model.model.world.CreateBody(bodyDef); var polygonShape:b2PolygonShape= new b2PolygonShape(); polygonShape.SetAsBox(15/Game.meters,30/Game.meters); body.CreateFixture2(polygonShape,1); } private function acceleration(e:KeyboardEvent):void { var desiredVel:Number =0; var vel:b2Vec2=body.GetLinearVelocity(); switch(e.keyCode) { case 37: desiredVel=-5; break; case 38: break; case 39: desiredVel=5; break; case 40: desiredVel=0; break; } var velChange:Number=desiredVel-vel.x; var force:Number=body.GetMass() * velChange / (1/stage.frameRate); body.ApplyForce(new b2Vec2(force,0),body.GetWorldCenter()); trace(force); } } } |
|
|||||
|
Ну я так думаю что благодаря этой формуле оно набирает скорость а патом с ней и двигается). А вообще я так полагаю что тебе нужно импульс задавать постоянный. Но все же я бы задался вопросом нужен ли вообще бокс для симуляции разгона)
|
|
|||||
|
Регистрация: Jan 2013
Сообщений: 38
|
"Импульс генерирует очень большие силы на короткий промежуток времени. То сть если вам нужно симулировать удар по мячу, то применение импульса к мячу будет правильным выбором."- не подходит.
мне нужно нетолько симулировать разгон, но еще и определять препятствия для чего я собираюсь использовать рейкастинг |
|
|||||
|
Цитата:
|
|
|||||
|
блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
|
KeyboardEvent.KEY_DOWN шлётся достаточно редко, запросто намного реже апдейта мира может происходить. Попробуйте влепить ApplyForce туда, где апдейт мира происходит (чтоб просто увидеть, что оно работает), затем сделать флаг, нажато ли ускорение и применять силу не по KEY_DOWN. Плюс сила может быть слишком маленькая.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают. |
![]() |
![]() |
Часовой пояс GMT +4, время: 14:00. |
|
|
« Предыдущая тема | Следующая тема » |
|
|