Помогите написать формулу полёта пули как в "Crimsonland" - Игростроение и развлечение

Форма входа

Приветствую Вас Гость!

Логин:
Пароль:

Наш опрос

Какую "интернет-болталку" вы используете?
Всего ответов: 202


    Случайное фото

    Статистика


Поддержите наш проект

WebMoney:
R309699065243
U292079291240
Z373355457648

Счётчики


Rambler's Top100
Рейтинг@Mail.ru

Помогите написать формулу полёта пули как в "Crimsonland" - Игростроение и развлечение

[ Новые сообщения · Участники · Правила форума · RSS ]

WWW Site Forum
Страница 1 из 11
Игростроение и развлечение » Программинг » Алгоритмика, Математика, Физика » Помогите написать формулу полёта пули как в "Crimsonland" (помогите с формулой)
Помогите написать формулу полёта пули как в "Crimsonland"
quadrathellДата: Понедельник, 07.04.2008, 19:58 | Сообщение # 1
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Меня интересует формула, как в игре "Crimsonland"
Полёт пули от объекта к курсору мыши… и что бы пуля летела равномерно не зависимо от того на сколько далеко курсор…


 
KostiaДата: Среда, 16.04.2008, 15:17 | Сообщение # 2
Программист
Группа: Проверенные
Сообщений: 80
Репутация: 2
Статус: Offline
Code
procedure GoToXY(x1,y1,x2,y2: real; var sx: real; var sy: real);
var
   rx, ry: real;
   k: real;
begin
   sx:=5;
   sy:=5;
   rx:=abs(x2-round(x1));
   ry:=abs(y2-round(y1));
   if rx>=ry then
   begin
     if ry<>0 then
     begin
       k:=rx/ry;
       sy:=sx/k;
     end
     else sy:=0;
   end
   else
     if rx<>0 then
     begin
       k:=ry/rx;
       sx:=sy/k;
     end
     else sx:=0;
   if x2-x1<0 then sx:=0-sx;
   if y2-y1<0 then sy:=0-sy;
end;


Сообщение отредактировал Kostia - Среда, 16.04.2008, 15:18
 
quadrathellДата: Четверг, 01.05.2008, 21:07 | Сообщение # 3
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Kostia, извиняюсь что не сразу ответил ...
Перевожу строки в бэйсик .... не могу найти определение оператору Round


 
KostiaДата: Суббота, 03.05.2008, 09:22 | Сообщение # 4
Программист
Группа: Проверенные
Сообщений: 80
Репутация: 2
Статус: Offline
Round(x) возвращает результат округления x до ближайшего целого
 
quadrathellДата: Воскресенье, 04.05.2008, 13:17 | Сообщение # 5
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Похоже у меня нет такого оператора, придётся из синусов и косинусов лепить ...

Code
rx = x1*cos(r) - y1*sin(r)

r = радиус

Чёто в таком духе ....

Kostia, можешь расписать переменные ?


 
kostiaДата: Понедельник, 05.05.2008, 06:31 | Сообщение # 6
Группа: Гости





rx и ry - это растояние по x и y до точки куда лететь.

abs - абсолютное значение(модуль)

rx=|x2-x1| - это математически, как на Basic я не знаю
ry=|y2-y1|

x1,y1-откуда
x2,y2-куда
sx,sy-скорость по x и y

// это та скорость с которой будет лететь снаряд, можно менять на любые др. значения
sx:=5;
sy:=5;

 
kostiaДата: Суббота, 24.05.2008, 12:37 | Сообщение # 7
Группа: Гости





Недавно я тоже по этой теме интересовался, вот ответ на мой вопрос, возможно и на твой:

http://www.gamedev.ru/code/forum/?id=78679

 
FrioДата: Суббота, 26.02.2011, 14:54 | Сообщение # 8
Программист
Группа: Проверенные
Сообщений: 9
Репутация: 0
Статус: Offline
Доброго времени суток.

То что Вы писали правильно, но будут значительные отличия в скорости при изменении угла. Вот код которым я написал в новом проекте.

Code
public void GoTo(GameTime gameTime, DrawingMap Maps)
{
float dX , dY;
double C;

dX = Math.Abs(Maps.ScrollMapX + MoveToX - X); // катет 1
dY = Math.Abs(Maps.ScrollMapY + MoveToY - Y); // катет 2
C = Math.Sqrt(dX * dX + dY * dY); // гипотенуза

if (C >= 2 & Moveing == true)
{
if (X > MoveToX + Maps.ScrollMapX)
dX = -dX;
if (Y > MoveToY + Maps.ScrollMapY)
dY = -dY;
X = X + Speed / 30 * gameTime.ElapsedGameTime.Milliseconds * (dX / (float)C); // GameTime можно опустить..
Y = Y + Speed / 30 * gameTime.ElapsedGameTime.Milliseconds * (dY / (float)C);
}
else
Moveing = false;

if (X < 84 * 100 - 45 - 1.75f * Y || X > 84 * 100 + 10 + 1.75f * Y) // тут лично мои координаты проверяющие выход за границу карты.
Moveing = false;
}

Не знаю точно абсолютно ли одинаковая скорость в любом направлении но разница между Вашим и моим кодом ощутима мгновенно..




Сообщение отредактировал Frio - Воскресенье, 27.02.2011, 03:33
 
quadrathellДата: Воскресенье, 27.02.2011, 14:36 | Сообщение # 9
Admin
Группа: Администраторы
Сообщений: 1018
Репутация: 23
Статус: Offline
Давно это было, хотел кримсланд свой написать.
Проблема была во вращении спрайта и отрисовки полёта пули.
Тогда я ещё зелёным был и не опытным.

Спасибо за советы и подсказки )


 
Игростроение и развлечение » Программинг » Алгоритмика, Математика, Физика » Помогите написать формулу полёта пули как в "Crimsonland" (помогите с формулой)
Страница 1 из 11
Поиск: