![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вычислить положение откуда идёт выстрел
.cpp © (2004-10-24 15:35:00)Здравствуйте уважаемые модераторы и посетители форума.
У меня слеующая проблема:
Если я вращаю спрайт, то не могу определить позицию X Y откуда будет вылетать снаряд. Угол же определяется верно. Вот небольшой код для ясности:
ifisButton1 inForm1.DXInput1.States then begin // ВЫСТРЕЛ
...
X := self.X + cos256(self.angle)*50;
Y := self.Y + sin256(self.angle)*50;
angle_enemy := self.angle; // передаём угол
...
end;
Ошибка только в определении координат.
.cpp (2004-10-27 14:55:00) [1]Попробовал сделать вот так:
X := self.X + self.Width div 2 + cos256(self.angle)*50;
Y := self.Y + self.Height div 2 + sin256(self.angle)*50;
И стало балее менее точно. Снаряд вылетает с небольшими отклонениями (почти незаметно).
Но всё равно,если например, будет оставаться 1 снаряд и игрок (не Я) боясь промахнуться и потерять последний боезаряд, полчаса будет прицеливаться (вращая спрайт) нацелится на врага и промахнётся. Будет долго меня с матами вспоминать!... :)
Спасибо за ответы.
Я думаю этого хватит (не за снайпера же играть, а за танк)
A22 (2004-10-25 20:28:00) [2]ну задаешь координаты пушки, а при повороте спрайта вращаешь и эти самые координаты. матрица поворота в плоскости
(cosx, sinx)
(-sinx, cosx)
ну, знаки синусов можно наоборот поставить, если вдругую сторону вращать нуна
Imp (2004-10-25 20:16:00) [3]а ты пробовал так ?:
X := self.X + self.Width div 2 + cos256(self.angle)*50;
Y := self.Y + self.Height div 2 + sin256(self.angle)*50;
width и height - типа, размеры спрайта
.cpp (2004-10-25 19:35:00) [4]
> Если у персонажа коодинаты Pers.X и Pers.Y, то при выстреле
> координаты снаряда будут Pula.X :=Pers.X; и Pula.Y :=Pers.Y;
Верно, но тогда снаряд будет вылетать из верхнего левого угла спрайта;
плюс к этому сдесь не учитывается угол поворота спрайта игрока, т.е. цетр спрайта каждый раз при повороте будет изменяться (новый).
А мне нужно например от центра спрайта стрелять.
> всмысле вызывай ее конструктор
Так и делаю. Угол правильно для снаряда также определяется.
---------------------------------------------------------------
Malefic (2004-10-24 17:31:00) [5]Если у персонажа коодинаты Pers.X и Pers.Y, то при выстреле координаты снаряда будут Pula.X :=Pers.X; и Pula.Y :=Pers.Y;
PulaAngle := PersAngle; Создавай пулю в процедуре Move персонажа, всмысле вызывай ее конструктор