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

Войти
Новости:
 
   Начало   Game Maker Помощь Правила форума Поиск Календарь Войти Регистрация  
Страниц: [1]   Вниз
  Печать  
Автор Тема: Оптимизация кода  (Прочитано 1590 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Frozen Wolf
GM Pro user
*

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

Пол: Мужской
Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Сообщений: 553


Волк отморозок


« : Август 10, 2019, 18:06:44 »

Написал код, вращение головы в сторону курсора, но он получился какой то емкий, для такой простой задачи. Подскажите как его можно более грамотно написать.
Код:
direction=round(point_direction(x,y,mouse_x,mouse_y))
if direction>=0 {
image_index=0
}
if direction>=45 {
image_index=1
}
if direction>=90 {
image_index=2
}
if direction>=135 {
image_index=3
}
if direction>=180 {
image_index=4
}
if direction>=225 {
image_index=5
}
if direction>=270 {
image_index=6
}
if direction>=315 {
image_index=7
}
Так же пробовал через switch, но если быстро матылять курсором голова не реагирует на него, потому что курсор пропускает числа 0,45,90 и тд.
Записан
Neo
*LisenokArtist
GM Pro user
*

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

Пол: Женский
Награды:
За медальки для форума!500 сообщений!За постоянность! [200 дней на форуме]За лояльность! [+150 репутации]
API: GameMaker Studio Free
Сообщений: 971



« Ответ #1 : Август 10, 2019, 18:13:07 »

Код:
image_index = direction div 45;
Записан

MaxsMine
Посетитель
**

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

Пол: Мужской
API: GameMaker Studio Pro
Деятельность: Программист, аниматор, сценарист
Сообщений: 41


А я мидведь.


« Ответ #2 : Август 10, 2019, 18:17:57 »

А не проще так:

Create:
Код:
angle=0

Step:
Код:
var mx=mouse_x;
var my=mouse_y;
angle=point_direction(x, y, mx, my)

Draw:
Код:
draw_sprite_ext(sprite_index /*или название вашего спрайта*/, image_index, x, y, image_xscale, image_yscale, angle, c_white, image_alpha)
Записан
Frozen Wolf
GM Pro user
*

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

Пол: Мужской
Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Сообщений: 553


Волк отморозок


« Ответ #3 : Август 10, 2019, 18:30:37 »

Код:
image_index = direction div 45;

Так у спрайта всего 8 кадров, а код присваивает кадр направление округленное до ближайшего наименьшего. Учитывая что direction доходит до 380, это не сработает. Хотя скорее всего я просто не могу понять как этим воспользоваться.

MaxsMine, сори это шило на мыло
Записан
ярик
Активный участник
*****

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

Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Сообщений: 396



« Ответ #4 : Август 10, 2019, 18:35:02 »


в моей игре реализована вот так (на else не обращайте внимание)
if dir<160 and dir>130{sprite_index=sprite108}
else
{
if dir<130 and dir>100{sprite_index=sprite108_3}
else
{
if dir<50 and dir>20{sprite_index=sprite108}
else
{
if dir<80 and dir>50{sprite_index=sprite108_3}
else
{
if dir>190 and dir<250{sprite_index=sprite108_2}
else
{
if dir<350 and dir>290{sprite_index=sprite108_2}
else
{
if dir<110 and dir>70{sprite_index=player_sprite33}
else
{
if dir>250 and dir<310{sprite_index=player2_sprite33}
else
{
sprite_index=player_sprite22
}
}
}
}
}
}
}
}
Записан

А че как 2 числа сравнить то это быстрее?
Вот так >? Вот так < ? Или лучше вот так sign(0)
Vixer
^^,
GM Pro user
*

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

Пол: Мужской
Награды:
3 место в Дичайшем джеме #8За постоянность! [500 дней на форуме]2 место на HellRoom Jam #5, Контраст2 место в конкурсе 1 место в конкурсе
API: GameMaker Studio 2
Деятельность: Недопрограммист, нуб-аниматор и фиговый художник
Сообщений: 555


Уф!


WWW
« Ответ #5 : Август 10, 2019, 18:37:55 »

Так у спрайта всего 8 кадров, а код присваивает кадр направление округленное до ближайшего наименьшего. Учитывая что direction доходит до 380, это не сработает. Хотя скорее всего я просто не могу понять как этим воспользоваться.

Так ведь div - целочисленное деление.
direction 380? 360 же градусов всего :D
Получается, при 75 градусах результат будет 75 div 45 = 1, то есть первый индекс. И при 360 будет 8, но так как у Вас спрайт имеет 8 кадров (от 0 до 7), то в результате будет отображен нулевой.
Записан

Вииииииииииииии!
Frozen Wolf
GM Pro user
*

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

Пол: Мужской
Награды:
За постоянность! [10 дней на форуме]
API: GameMaker Studio 2
Сообщений: 553


Волк отморозок


« Ответ #6 : Август 10, 2019, 18:42:32 »

Что это вообще за магия? Мда....
Спасибо большое, что разъяснил, теперь понятно как эти пользоваться.

Код:
direction=(round(point_direction(x,y,mouse_x,mouse_y)))
image_index = direction div 45;

Оставлю решение для потомков гуманитариев.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  

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