Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.30;
Скачать: CL | DM;

Вниз

Вычислить положение откуда идёт выстрел   Найти похожие ветки 

 
.cpp   (2004-10-24 15:35) [0]

Здравствуйте уважаемые модераторы и посетители форума.

У меня слеующая проблема:

Если я вращаю спрайт, то не могу определить позицию X Y откуда будет вылетать снаряд. Угол же определяется верно. Вот небольшой код для ясности:

if isButton1 in Form1.DXInput1.States then begin            // ВЫСТРЕЛ
...
X := self.X + cos256(self.angle)*50;
Y := self.Y + sin256(self.angle)*50;
angle_enemy := self.angle; // передаём угол
...
end;

Ошибка только в определении координат.


 
Malefic ©   (2004-10-24 17:31) [1]

Если у персонажа коодинаты Pers.X и Pers.Y, то при выстреле координаты снаряда будут Pula.X :=Pers.X; и Pula.Y :=Pers.Y;
PulaAngle := PersAngle; Создавай пулю в процедуре Move персонажа, всмысле вызывай ее конструктор


 
.cpp   (2004-10-25 19:35) [2]


> Если у персонажа коодинаты Pers.X и Pers.Y, то при выстреле
> координаты снаряда будут Pula.X :=Pers.X; и Pula.Y :=Pers.Y;


Верно, но тогда снаряд будет вылетать из верхнего левого угла спрайта;
плюс к этому сдесь не учитывается угол поворота спрайта игрока, т.е. цетр спрайта каждый раз при повороте будет изменяться (новый).
А мне нужно например от центра спрайта стрелять.



> всмысле вызывай ее конструктор

Так и делаю. Угол правильно для снаряда также определяется.
---------------------------------------------------------------


 
Imp   (2004-10-25 20:16) [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 - типа, размеры спрайта


 
A22   (2004-10-25 20:28) [4]

ну задаешь координаты пушки, а при повороте спрайта вращаешь и эти самые координаты. матрица поворота в плоскости
(cosx,  sinx)
(-sinx, cosx)
ну, знаки синусов можно наоборот поставить, если вдругую сторону вращать нуна


 
.cpp   (2004-10-27 14:55) [5]

Попробовал сделать вот так:
X := self.X + self.Width div 2 + cos256(self.angle)*50;
Y := self.Y + self.Height div 2 + sin256(self.angle)*50;

И стало балее менее точно. Снаряд вылетает с небольшими отклонениями (почти незаметно).

Но всё равно,если например, будет оставаться 1 снаряд и игрок (не Я) боясь промахнуться и потерять последний боезаряд, полчаса будет прицеливаться (вращая спрайт) нацелится на врага и промахнётся. Будет долго меня с матами вспоминать!... :)

Спасибо за ответы.

Я думаю этого хватит (не за снайпера же играть, а за танк)



Страницы: 1 вся ветка

Текущий архив: 2005.01.30;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
14-1105518621
Tornado
2005-01-12 11:30
2005.01.30
Помогите с PHP


3-1103727563
Denmin
2004-12-22 17:59
2005.01.30
Как сохранить файл jpg в таблицу MSSQL ?


1-1105900470
Fofka
2005-01-16 21:34
2005.01.30
Скрытое приложение


1-1106072776
rolex
2005-01-18 21:26
2005.01.30
Как в ListView сделать, чтобы в третьей колонке цвет шрифта был к


6-1099779926
Knight
2004-11-07 01:25
2005.01.30
Delphi пример пересылки изображения через сеть