Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2005.01.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
.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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.031 c
9-1098387885
OranZevjii
2004-10-21 23:44
2005.01.30
Вывод спрайтов


3-1104146590
Otari
2004-12-27 14:23
2005.01.30
Query SQL command


1-1105639172
Fin
2005-01-13 20:59
2005.01.30
Showmessage???


14-1105434976
ms
2005-01-11 12:16
2005.01.30
Скажите, можно ли зарабатывать на показе баннеров на своём сайте.


1-1106117309
Rusan
2005-01-19 09:48
2005.01.30
Как добавить строку в лист Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский