Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2009, 17:59   #21
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Я бы сказал, если бы знал...
Как работает поворот DXImageList1.Items[0].DrawRotate(DXDraw1.Surface, xClip, yClip, clip.Width, clip.Height, 0, 0.5, 0.5, trunc(mAngle));

Могу лишь только предположить
angle:=(ArcTan2(ymouse-yClip, xmouse -xClip)+pi)/pi*180;
angle:=(pi-ArcTan2(ymouse-yClip, xmouse -xClip))/pi*180;
и попробуй разные варианты разностей.

И вы возможно вычисляете угол относительно не той точки (xClip, yClip), когда нужно (xclip + clip.Width div 2, yClip + clip.Height div 2), т.е. относительно центра спрайта.

Последний раз редактировалось Kostia; 28.06.2009 в 18:02.
Kostia вне форума Ответить с цитированием
Старый 28.06.2009, 18:05   #22
KorDum
Пользователь
 
Аватар для KorDum
 
Регистрация: 27.06.2009
Сообщений: 35
По умолчанию

центр спрайта определяется вот этими двумя параметрами, что в конце - ...0.5, 0.5...
это точный центр объекта

Я вообще флешер, там никаких проблем с этим не было, все просто -
angle = Math.atan2((_ymouse-clip._y), (_ymouse-clip._x));
То есть все то же самое, по сути
dum spiro, spero
Мой блог

Последний раз редактировалось KorDum; 28.06.2009 в 18:14.
KorDum вне форума Ответить с цитированием
Старый 28.06.2009, 18:10   #23
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Но ArcTan2 этого не знает и центр нужен не объекта, а точка на экране.
(x+width/2, y+height/2)
Поэтому, когда ArcTan2 рассчитает угол относительно не той точки а вы все же повернете спрайт относительно той что хотели(центра), то и будут возникать глюки.
Kostia вне форума Ответить с цитированием
Старый 28.06.2009, 18:19   #24
KorDum
Пользователь
 
Аватар для KorDum
 
Регистрация: 27.06.2009
Сообщений: 35
По умолчанию

Код:
mAngle := arcTan2((ymouse - (yClip+clip.Height)), (xmouse - (xClip+clip.Width/2))) * 180/PI;
Вы это имели в виду? Если да, то все точно так же происходит, как и было до этого. Разве что смещение поворота при заведении курсора влево относительно clip стало еще большим
dum spiro, spero
Мой блог
KorDum вне форума Ответить с цитированием
Старый 28.06.2009, 18:32   #25
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Отлично! Теперь отнимай =)))
(x-width/2, y-height/2)
Возможно там система координат не такая

Последний раз редактировалось Kostia; 28.06.2009 в 18:35.
Kostia вне форума Ответить с цитированием
Старый 28.06.2009, 18:38   #26
KorDum
Пользователь
 
Аватар для KorDum
 
Регистрация: 27.06.2009
Сообщений: 35
По умолчанию

если отнимать, то clip перестает смотреть точно на курсор, вместо это происходит уже другое смещение, на несколько десятков градусов в сторону)))
Но наблюдается все та же картина
Хоть убейте, не могу понять, ПОЧЕМУ же такое происходит
dum spiro, spero
Мой блог
KorDum вне форума Ответить с цитированием
Старый 28.06.2009, 18:55   #27
Kostia
Участник клуба
 
Аватар для Kostia
 
Регистрация: 21.11.2007
Сообщений: 1,690
По умолчанию

Загрузи две программы без (x-width/2, y-height/2) и с ним, если это возможно, постараюсь точно ответить. Обычно это бывает из-за одного не правильно поставленного знака.

<-+-=-+->
И я бы лучше перешел на чистый API, типа OpenGL или Direct3D. Там все гораздо проще и нагляднее.

Последний раз редактировалось Kostia; 28.06.2009 в 19:08.
Kostia вне форума Ответить с цитированием
Старый 28.06.2009, 20:04   #28
KorDum
Пользователь
 
Аватар для KorDum
 
Регистрация: 27.06.2009
Сообщений: 35
По умолчанию

дело в том, что я только недавно перешел на directX в делфи, мне посоветовали delphiX. Так вот, в архиве две папки с проектами - с дополнительной точкой и без
Вложения
Тип файла: rar Project.rar (450.0 Кб, 17 просмотров)
dum spiro, spero
Мой блог
KorDum вне форума Ответить с цитированием
Старый 28.06.2009, 21:48   #29
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

KorDum, напиши так:
Код:
angle := arcTan2((ymouse-yClip), (xmouse-xClip)) * 128/PI;
...очевидно японцы мерят углы по-особому, или потому, что 128 + 128 = 256 , т.е. полное количество значений, которое можно закодировать одним байтом ))) А вообще DrawRotate требует угол как Integer, начало 0 - на 3 часа, положительные числа поворачивают по-часовой, отрицательные - против.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 28.06.2009, 22:01   #30
KorDum
Пользователь
 
Аватар для KorDum
 
Регистрация: 27.06.2009
Сообщений: 35
По умолчанию

вот японцы! Прошу прощения, вырвалось)
Да, теперь все работает, как часы. Спасибо большое всем!

Цитата:
А вообще DrawRotate требует угол как Integer
я и отбрасываю дробную часть, чтоб поглучить целочисленное
dum spiro, spero
Мой блог
KorDum вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поворот картинки delphin100 Мультимедиа в Delphi 5 14.04.2008 10:43
Поворот матрицы Cartman18 Помощь студентам 2 07.02.2008 11:11
timage, поворот ERASERROR Мультимедиа в Delphi 1 05.02.2008 12:10
как организовать поворот еллипса в С++ ? Снайп Помощь студентам 1 01.12.2007 17:19
Поворот картинки PAVEL315 Общие вопросы Delphi 3 24.12.2006 12:47