Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > API приложений и сред

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 23.02.2013, 15:44
taluks вне форума Посмотреть профиль Отправить личное сообщение для taluks Найти все сообщения от taluks
  № 1  
Ответить с цитированием
taluks

Регистрация: Jan 2013
Сообщений: 38
По умолчанию линейное ускорение

создаю мир без гравитации, и создаю тело.
тело это будущая машина.
хочу сделать чтобы она двигалась с ускорением
Код AS3:
...body.CreateFixture2(polygonShape,1);...
body.ApplyForce(new b2Vec2(0.0,50),body.GetPosition());
но ускорения не заметно.
на до ли применять силы постепенно для ускорения?
как правильно сделать ускорение?
как сделать движение машины самостоятельным вместе с ускорением, т.е. просто проезжающие мимо например как тут (если перекрыть дорогу машине, она потом постепенно будет ускорятся и поедет...)
Вложения
Тип файла: swf test.swf (59.6 Кб, 62 просмотров)

Старый 25.02.2013, 16:07
Asfel вне форума Посмотреть профиль Отправить личное сообщение для Asfel Найти все сообщения от Asfel
  № 2  
Ответить с цитированием
Asfel

Регистрация: Feb 2013
Адрес: Киев
Сообщений: 76
Отправить сообщение для Asfel с помощью Skype™
Нужно форс применять с каким то интервалом(типа двигатель работает)

Старый 25.02.2013, 22:54
taluks вне форума Посмотреть профиль Отправить личное сообщение для taluks Найти все сообщения от taluks
  № 3  
Ответить с цитированием
taluks

Регистрация: Jan 2013
Сообщений: 38
в чем разница такого эффекта, если ускорения не заметно, то ведь можно с интервалами и скорость линейную просто менять?

Старый 25.02.2013, 23:42
Bgg вне форума Посмотреть профиль Отправить личное сообщение для Bgg Найти все сообщения от Bgg
  № 4  
Ответить с цитированием
Bgg
 
Аватар для Bgg

Регистрация: Jan 2009
Адрес: Петерсбург
Сообщений: 1,882
Цитата:
Сообщение от taluks Посмотреть сообщение
в чем разница такого эффекта, если ускорения не заметно, то ведь можно с интервалами и скорость линейную просто менять?
It is very tempting to use the SetLinearVelocity function to explicitly set the velocity for a body to accomplish this, and indeed it does get the job done, but this approach has its drawbacks. While it often looks fine on the screen, setting the velocity directly means the body is not correctly participating in the physics simulation.

Старый 25.02.2013, 23:47
Asfel вне форума Посмотреть профиль Отправить личное сообщение для Asfel Найти все сообщения от Asfel
  № 5  
Ответить с цитированием
Asfel

Регистрация: Feb 2013
Адрес: Киев
Сообщений: 76
Отправить сообщение для Asfel с помощью Skype™
А разницы особо и нету все зависит от того что требуется. Важно как будет выглядеть конечный результат а не реализация

Старый 26.02.2013, 02:19
taluks вне форума Посмотреть профиль Отправить личное сообщение для taluks Найти все сообщения от taluks
  № 6  
Ответить с цитированием
taluks

Регистрация: Jan 2013
Сообщений: 38
взял я и написал по примеру как на с++ тут,
эффекта нет. что я делаю не так?
Код AS3:
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);
 
		}
 
	}
 
}
Вложения
Тип файла: swf tst.swf (59.6 Кб, 48 просмотров)

Старый 26.02.2013, 20:01
Asfel вне форума Посмотреть профиль Отправить личное сообщение для Asfel Найти все сообщения от Asfel
  № 7  
Ответить с цитированием
Asfel

Регистрация: Feb 2013
Адрес: Киев
Сообщений: 76
Отправить сообщение для Asfel с помощью Skype™
Ну я так думаю что благодаря этой формуле оно набирает скорость а патом с ней и двигается). А вообще я так полагаю что тебе нужно импульс задавать постоянный. Но все же я бы задался вопросом нужен ли вообще бокс для симуляции разгона)

Старый 27.02.2013, 02:32
taluks вне форума Посмотреть профиль Отправить личное сообщение для taluks Найти все сообщения от taluks
  № 8  
Ответить с цитированием
taluks

Регистрация: Jan 2013
Сообщений: 38
"Импульс генерирует очень большие силы на короткий промежуток времени. То сть если вам нужно симулировать удар по мячу, то применение импульса к мячу будет правильным выбором."- не подходит.
мне нужно нетолько симулировать разгон, но еще и определять препятствия для чего я собираюсь использовать рейкастинг

Старый 27.02.2013, 03:05
-De- вне форума Посмотреть профиль Отправить личное сообщение для -De- Найти все сообщения от -De-
  № 9  
Ответить с цитированием
-De-
 
Аватар для -De-

блогер
Регистрация: Oct 2005
Адрес: Днепродзержинск - город Брежнева и других логопедов
Сообщений: 1,421
Записей в блоге: 4
Отправить сообщение для -De- с помощью ICQ Отправить сообщение для -De- с помощью Skype™
KeyboardEvent.KEY_DOWN шлётся достаточно редко, запросто намного реже апдейта мира может происходить. Попробуйте влепить ApplyForce туда, где апдейт мира происходит (чтоб просто увидеть, что оно работает), затем сделать флаг, нажато ли ускорение и применять силу не по KEY_DOWN. Плюс сила может быть слишком маленькая.
__________________
Бобры отвечают на вопросы не потому, что знают на них ответы; они отвечают потому, что их спрашивают.

Старый 27.02.2013, 16:48
Asfel вне форума Посмотреть профиль Отправить личное сообщение для Asfel Найти все сообщения от Asfel
  № 10  
Ответить с цитированием
Asfel

Регистрация: Feb 2013
Адрес: Киев
Сообщений: 76
Отправить сообщение для Asfel с помощью Skype™
Цитата:
Сообщение от taluks Посмотреть сообщение
"Импульс генерирует очень большие силы на короткий промежуток времени. То сть если вам нужно симулировать удар по мячу, то применение импульса к мячу будет правильным выбором."- не подходит.
мне нужно нетолько симулировать разгон, но еще и определять препятствия для чего я собираюсь использовать рейкастинг
Минус использования форса-импульса для движения объекта в том что сложно добится желаемого результата в итоге. Контролировать скорость и прочее. А самостоятельное изменение линейного ускорения дает возможность четко контролировать и процесс разгона и само движение далее и к тому же никак не мешает отслеживать столкнокения

Создать новую тему Ответ Часовой пояс GMT +4, время: 14:54.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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