Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Движение спрайта по прямой, учитывая угол поворота. [Delphi, Windows]


Malefic ©   (2004-10-19 10:45:00) 

Есть спрайт, он поворачивается на определенный угол. Как сделать движение по прямой, но так чтобы направление зависело от угла?

X := X + sin256(Angle) * (Speed/1000)*MoveCount;
Y := Y - cos256(Angle) * (Speed/1000)*MoveCount;

Так работало на DelphiX. Щас пишу на asphyre, она не знает функции sin и cos 256, угол обрабатывается коряво и спрайт движется непонятно как.

Вопрос: Как реализовать движение, что-то типо того, как было на delphiX.

ЗЫ. напишите формулу перехода от 256 градусной меры в 360 и обратно


П7   (2004-10-19 16:52:00) [1]

Блин, написал пост, а он не запостился... Репост:


> NikeOLD ©   (19.10.04 15:24) [5]

Ну и в чём проблема с написанием своих аналогов этих функций?


> NailMan ©   (19.10.04 15:57) [6]

Артефакты очень забавные. При повороте (без антиалиасинга) на некоторые углы пиксели могут так расположиться, что картинка совершенно на себя не похожа. Углы сейчас уже не помню, давно не работа с DirectDraw. Можешь найти в сети пример, где-то я видел... (:

Нафиг нужны дроби при работе с DirectDraw? Это только лишник тормоза на постоянные конверчения...


NailMan   (2004-10-19 15:57:00) [2]

П7
некошерно это все дискретность. sin/cos рулят, особенно если через 3Dnow.

Кста, что за артефакты?

---
WBR, NailMan aka 2:5020/3337.13


NikeOLD   (2004-10-19 15:24:00) [3]


> Идеальный способ - это сгенерить всё заранее в массив, а
> затем брать оттуда нужные значения.

Именно это и сделано в DelphiX. Sin256 и Cos256  просто обращаются к соотвестсвующему индексу в массиве с заранее просчитанными начениями.


П7   (2004-10-19 14:44:00) [4]


> NailMan ©   (19.10.04 14:34) [3]

Не, фигня всё это, такой точный расчёт никому не нужен, он просто не заметен будет, а иногда может дать жуткие артефакты. ):

Идеальный способ - это сгенерить всё заранее в массив, а затем брать оттуда нужные значения.


NailMan   (2004-10-19 14:34:00) [5]

Ну наверно забыть о каких-то левых sin256/cos256 и пользовать нормальные sin/cos и радианы вместо градусов соответственно. Скорости поубавится зато будет точный расчет.

---
WBR, NailMan aka 2:5020/3337.13


П7   (2004-10-19 14:32:00) [6]

Ты чё, не можешь 360 градусный угол привести к 256 градусному? Это же деление и умножение...

> NikeOLD ©   (19.10.04 13:00) [1]

В идеале - не для оптимизации, а для "компьютерного" удобства - юзания byte переменных... Хотя 1 байт - это оптимальнее, чем 2, 4 и больше... (:


NikeOLD   (2004-10-19 13:00:00) [7]

Посмотри исходники DelphiX

Насколько я помню в DelphiX всего лишь предварительный рассчет синусов косунусов. А 256 лишь для оптимизации быстродействия (на самом деле эти функции не используют ни одной тригонометрической операции).


Наверх

Титульная страница Поиск, карта сайта Написать письмо