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

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

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

Регистрация: May 2007
Сообщений: 46
По умолчанию Плавное равномерное движение

Добрый вечер!
Есть небольшая проблемка: мой объект движется по воздействию на него силы, но мне нужно равномерное движение, движение без ускорения. Я пытаюсь сделать это вот таким образом, но получаю рывки (они и понятно):

Код AS3:
case 39 :
if (LevelVars.player.GetLinearVelocity().x <= 5) {
	direction.Set((250),0);
	LevelVars.player.WakeUp();
	LevelVars.player.ApplyForce(direction, LevelVars.player.GetPosition());
} else if (LevelVars.player.GetLinearVelocity().x >= 5) {
	LevelVars.player.ApplyForce(new b2Vec2((LevelVars.player.GetMass() * 0.8), 0), LevelVars.player.GetPosition()); 
}
break;
Может быть, кто-нибудь знает, как сделать ограничение скорости без вот такой вот костыльной проверки? Здесь я проверяю линейную скорость объекта, если она больше 5, тогда я применяю к объекту силу, равную силе трения. Буду признателен, если кто-нибудь мне подскажет.

Старый 11.11.2011, 17:44
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 2  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Через ApplyImpulse() только.
Код AS3:
public function update():void {
	_speed		= 3;
	_direction	= _body.GetPosition().Copy();
	_direction.Subtract(_clickPoint); // движение к точке где произошел щелчок
	_direction.Normalize();
	_direction.Multiply(_speed);
	_direction.NegativeSelf();
           _body.ApplyImpulse(_direction, _body.GetPosition()); // применяем импульс
}

Старый 11.11.2011, 19:05
Altera Pars вне форума Посмотреть профиль Отправить личное сообщение для Altera Pars Найти все сообщения от Altera Pars
  № 3  
Ответить с цитированием
Altera Pars

Регистрация: May 2007
Сообщений: 46
Спасибо большое. Сейчас попробую. Но я забыл указать то, что это движение происходит по нажатию на клавиши с клавиатуры. Импульс подойдет для продолжительного движения?

Старый 11.11.2011, 19:06
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 4  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Ну там же нормальизация вектора. Т.е. по сути пофиг какова продолжительность, скорость все равно не будет больше 3.
Хотя такую задачу я бы лучше реализовал через SetPosition()

Старый 11.11.2011, 19:11
Altera Pars вне форума Посмотреть профиль Отправить личное сообщение для Altera Pars Найти все сообщения от Altera Pars
  № 5  
Ответить с цитированием
Altera Pars

Регистрация: May 2007
Сообщений: 46
Видимо, это Box2D версией старше, чем 2.0.2)

Старый 11.11.2011, 19:40
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 6  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
я про 2.1а, в 2.0.2 был метод SetXForm()

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

Регистрация: Jan 2009
Сообщений: 3,067
Записей в блоге: 3
Отправить сообщение для GBee с помощью Skype™
Может подойдет просто SetLinearVelocity?
__________________
Чтобы доказать, что вы не робот, причините вред другому человеку.

Старый 11.11.2011, 20:38
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 8  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Кстати, да! Что-то он у меня вообще из головы вылетел.

Старый 13.11.2011, 19:01
Altera Pars вне форума Посмотреть профиль Отправить личное сообщение для Altera Pars Найти все сообщения от Altera Pars
  № 9  
Ответить с цитированием
Altera Pars

Регистрация: May 2007
Сообщений: 46
Есть некоторые проблемы при использовании линейной скорости. Если во время прыжка я буду нажимать на клавиши движения, чтобы стабилизировать траекторию падения в нужную мне сторону, то тогда эта траекторию сильно искажается в пользу горизонтального движения. Как будто бы тело реактивное и у него в этот момент включают турбину

Старый 13.11.2011, 19:22
goodguy вне форума Посмотреть профиль Найти все сообщения от goodguy
  № 10  
Ответить с цитированием
goodguy
Banned

Регистрация: Jan 2010
Адрес: РФ. Кемеровская область
Сообщений: 3,243
Судя по всему там скорости суммируются. Нужно так же использовать SetLinearDamping(), чтобы тело замедлялось

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

Теги
Box2d движение , Box2d скорость.

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

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


 


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


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