Game Maker - создание игр | HellRoom Games
Ноябрь 18, 2025, 04:48:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Соответствие угла объекта и кадра изображения в изометрии  (Прочитано 3124 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Hamster099
«Старожил форума»
******

Репутация: 164
Offline Offline

Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]
API: GameMaker Studio Master
Сообщений: 1264



« : Февраль 05, 2012, 14:37:39 »

Есть у меня спрайт на 2 кадров - от 0 до 7, каждый для определённого угла (0,45,90..).
Нужна простая формула, определяющая по углу какой кадр нужен. Использовал до недавнего времени
image_index=floor(angle/(360/image_number)), но обнаружил что кадры определяются как на синем рисунке. Как сделать чтобы было как на зелёном (тоесть сдвинуть координаты на половину сектора - в данном случае 22,5 градуса)?

angle.PNG
Соответствие угла объекта и кадра изображения в изометрии
* angle.PNG (10.01 Кб, 566x256 - просмотрено 908 раз.)
Записан
Krib
«Старожил форума»
******

Репутация: 114
Offline Offline

Пол: Мужской
Награды:
500 сообщений!За постоянность! [10 дней на форуме]Знаток Game MakerЗа помощь новичкам!
API: Game Maker 8.0 Pro
Сообщений: 951


« Ответ #1 : Февраль 05, 2012, 14:48:21 »

Может быть так?
Код:
image_index=floor((angle-22.5)/(360/(image_number+1)))
P.S. код не проверял ;D
Записан

Fuge, late, tace
Hamster099
«Старожил форума»
******

Репутация: 164
Offline Offline

Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]
API: GameMaker Studio Master
Сообщений: 1264



« Ответ #2 : Февраль 05, 2012, 14:54:25 »

Код:
image_index=floor((angle-22.5)/(360/(image_number+1)))
P.S. код не проверял ;D
если angle меньше 22 то будет требовать -1 кадр

и да, ошибочка - в проекте использовал формулу без +1, по сути чтобы проще - floor(angle/45)
Записан
Krib
«Старожил форума»
******

Репутация: 114
Offline Offline

Пол: Мужской
Награды:
500 сообщений!За постоянность! [10 дней на форуме]Знаток Game MakerЗа помощь новичкам!
API: Game Maker 8.0 Pro
Сообщений: 951


« Ответ #3 : Февраль 05, 2012, 15:13:26 »

Вот код:
Код:
kadr=angle+22.5
kadr=kadr mod 360
if(kadr<0){kadr+=360}
kadr=floor(kadr/45)
Записан

Fuge, late, tace
DeatHSoul
GM Pro user
*

Репутация: 236
Offline Offline

Пол: Мужской
Награды:
За постоянность! [50 дней на форуме]FAQ для начинающих & Сленг и ТерминологияЗа лояльность! [+150 репутации]За помощь новичкам!Знаток Game Maker
API: GameMaker Studio Standard
Сообщений: 478


« Ответ #4 : Февраль 06, 2012, 01:15:01 »

Код:
image_index = floor((angle + 22.5)/360 * image_number)) mod image_number;
Математика, господа. 
Записан
Hamster099
«Старожил форума»
******

Репутация: 164
Offline Offline

Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]
API: GameMaker Studio Master
Сообщений: 1264



« Ответ #5 : Февраль 11, 2012, 15:08:17 »

всё оказалось проще
Цитировать
frame=round(angle/(360/image_number));
if frame=image_number frame=0
(для image_index можно не делать вторую строчку - переведет автоматом, но у меня каждый кадр отдельный спрайт с анимацией)  
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

HellRoom Games © 2006-2012 All Rights Reserved
Powered by SMF 1.1.21 | SMF © 2013, Simple Machines
Страница сгенерирована за 0.083 секунд. Запросов: 29.