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

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

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

Регистрация: Jun 2011
Сообщений: 8
По умолчанию Прицеливание перед выстрелом

Доброго времени суток!
Пишу игру, в которой нужно стреляться "снарядами", гравитации нет, запускаются они с помощью ApplyImpulse. Тела при взаимодействии с другими телами (как статическими, так и динамическими), должны отскакивать. Так вот - перед выстрелом хочу прорисовывать траекторию полета снаряда, причем вплоть до 2 - 3 столкновений с другими объектами, дальше рисовать не нужно. Сразу предупрежу - рассчитывать все ручками - гиблое дело, т.к. уровни чрезвычайно разнообразны. Отрисовывать в фоне за пределами сцены - слишком медленно. Можно ли это устроить средствами Box2d? Заранее благодарен!

Старый 17.02.2012, 00:30
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 2  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
а что мешает запустить "пулю" и отрисовать её путь? по моему самый простой способ

Старый 22.02.2012, 21:13
zmeevolk вне форума Посмотреть профиль Отправить личное сообщение для zmeevolk Найти все сообщения от zmeevolk
  № 3  
Ответить с цитированием
zmeevolk

Регистрация: Mar 2010
Сообщений: 44
Можно, делаешь фейковый снаряд, и вместо запуска прорисовываешь траекторию как обычно. Кол-вом интераций регулируеш длину траектории. Как то так...

Код AS3:
var _traectorySprite:Sprite = new Sprite();
_traectorySprite.graphics.clear();
_traectorySprite.graphics.lineStyle(1,0x000000);
_traectorySprite.graphics.beginFill(0xff0000);
for (var i:int=1; i<=150; i++) {
   world.Step(1/30,10,10);
  _traectorySprite.graphics.drawCircle(myBullet.GetPosition().x*worldScale, myBullet.GetPosition().y*worldScale,2);
   world.ClearForces();
}
_traectorySprite.graphics.endFill();
world.DestroyBody(myBullet);
Добавлено через 2 минуты
Цитата:
Сообщение от anmelegov Посмотреть сообщение
а что мешает запустить "пулю" и отрисовать её путь? по моему самый простой способ
ааа, +1, коллега уже ответил.Извините не заметил. Может быть подробный ответ поможет кому-то еще.

А ну и имхо, я бы делал выстрел через SetLinearVelocity а не импульсом


Последний раз редактировалось zmeevolk; 22.02.2012 в 21:18.
Старый 24.02.2012, 14:00
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 4  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
делать надо точно так же как и стреляешь и точно таким же снарядом иначе при рикошете не совпадет тангенсальный импульс и траектория будет неправильной

Добавлено через 1 минуту
SetLinearVelocity это то же самое что импульс в центр масс

Старый 24.02.2012, 16:35
zmeevolk вне форума Посмотреть профиль Отправить личное сообщение для zmeevolk Найти все сообщения от zmeevolk
  № 5  
Ответить с цитированием
zmeevolk

Регистрация: Mar 2010
Сообщений: 44
Цитата:
Сообщение от anmelegov Посмотреть сообщение
делать надо точно так же как и стреляешь и точно таким же снарядом иначе при рикошете не совпадет тангенсальный импульс и траектория будет неправильной
Именно это я и хотел сказать, извините если что-то непонятно. Вестимо фейковый снаряд должен быть идентичный тому, что вылетает из пушки.

Цитата:
Сообщение от anmelegov Посмотреть сообщение
SetLinearVelocity это то же самое что импульс в центр масс
Мне всегда казалось что SetLinearVelocity резко меняет скорость тела, а импульс или форс нет. Хотя для тела в состоянии покоя может и разницы нет.

Старый 28.02.2012, 04:36
anmelegov вне форума Посмотреть профиль Отправить личное сообщение для anmelegov Найти все сообщения от anmelegov
  № 6  
Ответить с цитированием
anmelegov
[+4 07.04.12]
[+1 20.01.12]

Регистрация: Nov 2009
Адрес: Украина, Славутич
Сообщений: 263
Цитата:
Apply an impulse at a point. This immediately modifies the velocity. It also modifies the angular velocity if the point of application is not at the center of mass. This wakes up the body.
- из руководства... хотя это понятно итак
Код AS1/AS2:
public function ApplyImpulse(impulse:b2Vec2, point:b2Vec2) : void{
		if (m_type != b2_dynamicBody)
		{
			return;
		}
 
		if (IsAwake() == false)
		{
			SetAwake(true);
		}
		//m_linearVelocity += m_invMass * impulse;
		m_linearVelocity.x += m_invMass * impulse.x;
		m_linearVelocity.y += m_invMass * impulse.y;
		//m_angularVelocity += m_invI * b2Cross(point - m_sweep.c, impulse);
		m_angularVelocity += m_invI * ((point.x - m_sweep.c.x) * impulse.y - (point.y - m_sweep.c.y) * impulse.x);
	}
Добавлено через 1 минуту
m_invMass это 1 поделить на массу

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

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

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


 


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


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