Перейти к содержимому
Джанкер

Помогите с Гейм Мейкером

Рекомендуемые сообщения

Потому что одна стенка нарисованная в пейнте, как правило, это картинка размером около 600 на 600 (или даже больше). Теперь, для справки, одна картинка по сути массив пикселей, причем, информация в нем содержится и о тех точках, что в картинке отсутствуют (полностью прозрачны). Итог - при проверке на столкновения комп просчитывает весь массив на пересечение с игроком, угадайте, что при этом происходит. Правильно - загрузка процессора. Да, ты выиграешь в скорости за счет уменьшения объектов, и тут же эту скорость потеряешь при обсчете столкновений. И, кстати говоря, оптимизация для того и нужна, чтобы при 300 объектах ничего не тормозило. Так что, твой аргумент тут неуместен.

Поделиться сообщением


Ссылка на сообщение

Да причём тут массив то? даже без объектов с помощью move_contact_solid он проверяет каждый пиксель на пути и через эту функцию 300 объектов на расстоянии 1000 будет глючить.

Поделиться сообщением


Ссылка на сообщение

При move_towards_solid он проверяет координату крайнего пикселя, и уже от него отталкивается при проверке на столкновения. Можешь проверить - поставь ровно 300 объектов на пустой карте, и выполни для них эту функцию. Если твой комп затормозит так, что больше не отвиснет - то я пончик.

Изменено пользователем Джанкер

Поделиться сообщением


Ссылка на сообщение
При move_towards_solid он проверяет координату крайнего пикселя, и уже от него отталкивается при проверке на столкновения. Можешь проверить - поставь ровно 300 объектов на пустой карте, и выполни для них эту функцию. Если твой комп затормозит так, что больше не отвиснет - то я пончик.

 

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

Поделиться сообщением


Ссылка на сообщение

Я не знаю, что у тебя там в коде, да и не хочу знать, если честно - насмотрелся уже, может ты его дооптимизировал до усрачки, да хоть пять раз. Я веду к тому, что пренебрегать встроенными функциями ГМ - глупо.

Поделиться сообщением


Ссылка на сообщение
Я не знаю, что у тебя там в коде, да и не хочу знать, если честно - насмотрелся уже, может ты его дооптимизировал до усрачки, да хоть пять раз. Я веду к тому, что пренебрегать встроенными функциями ГМ - глупо.

 

Я не говорю что ими пользоваться не надо ( lengthdir даже очень хорошо работает )просто в данном случае лучше обойтись и без неё. В хорошей оптимизации ничего плохого нет.

 

Мне кажется надо заканчивать а то тут не в тему уже)

Изменено пользователем Datel

Поделиться сообщением


Ссылка на сообщение

Можно и обойтись, и тогда придется самому писать проверку на столкновения, а оно нужно, когда все уже написано?

Поделиться сообщением


Ссылка на сообщение
Можно и обойтись, и тогда придется самому писать проверку на столкновения, а оно нужно, когда все уже написано?

 

Я уже говорил что там написано не так как надо. Написать мало что надо а эффект будет лучше.

И хватит с этим

Поделиться сообщением


Ссылка на сообщение

Все у вас "не так как надо". Эх...

Поделиться сообщением


Ссылка на сообщение

Всем здрасте, ответ на вопрос в интернете не получил, посему спрашиваю здеся.

 

Ктонибудь пробовал создавать систему скелетной анимации в Game Maker?

Именно систему анимации, сам скелет я таки смог создать.

 

Сейчас я использую для расчёта анимаций функцию sin()

у неё есть плюсы:

Проигрывается такая анимация плавно

Можно изменять скорость воспроизведения

и минусы:

трудность описания

невозможность создания очень сложных анимаций

 

Ну так вот, можно ли тут поинтересоваться без риска быть посланым куда подальше:

 

Как можно сделать систему анимации чтобы в ней можно было использовать Кейфреймы (опорные кадры, или как там),причём чтобы при изменении скорости воспроизведения не начинались какие нибудь глюки, аля нога уезжает чуть дальше чем ей положено, или рассинхрон разных конечностей?

Можно всеголишь подкинуть идейку, реализую уж сам, в game maker около года.

 

P.s в присоединённом файле демонстрация этой самой системы

P.p.s в демонстрации есть 2 вида обсчёта - через sin\cos и через lengthdir, lengthdir работает на 3% быстрее. (это я решил перейти потому что тут вычитал что стандартные функции гм работают быстрей, а оптимизация мне крайне нужна)

Skeleton_test.zip

Изменено пользователем 3DI70R

Поделиться сообщением


Ссылка на сообщение

Написать свою систему скелетной анимации конечно можно, но...оно нужно? Да, будет красиво, да будет плавно, но вообще-то именно на ГМ такой способ будет нехило жрать ресурсы. В принципе, сама суть в том, чтобы сделать нечто вроде пивотов, которые будут "суставами" скелета, и от которых будет отталкиваться анимация. Потом в файл выводить положения и повороты каждого пивота, а при воспроизведении интерполировать координаты. Другая сложность в том, что все конечности должны быть разными моделями (хотя вроде кто-то делал и с одной моделью, но это уж совсем за гранью фантастики)

Поделиться сообщением


Ссылка на сообщение
Написать свою систему скелетной анимации конечно можно, но...оно нужно?

Да, будет красиво, да будет плавно, но вообще-то именно на ГМ такой способ будет нехило жрать ресурсы.

В моём случае такая система анимации нужна по многим причинам, хотябы потому что игру делаю высоком разрешении ([4x] 1280x960), каждый спрайт в таком случае нехило отжирает ресурсы, а мне этого не надо, да и не такой уж я художник чтобы каждый кадр анимации вырисовывать. вобще, если подумать, то спрайт размером 128х128 пикселей имеющий 60 кадров начинает весить 4мб, вкупе с системой Alive (лицевая анимация, которую я наверное сделаю как фичу движка) будет жрать нереально много ресурсов

В принципе, сама суть в том, чтобы сделать нечто вроде пивотов, которые будут "суставами" скелета, и от которых будет отталкиваться анимация.

Реализовано.

Потом в файл выводить положения и повороты каждого пивота, а при воспроизведении интерполировать координаты.
Собственно в этом весь гемор, пока что удалось всё это сделать через sin(), меня конечн это пока устраивает, но таки хочется чего нибудь потехнологичней, так как в игре я стараюсь на максимум выжать из Game Maker всё возможное.
Другая сложность в том, что все конечности должны быть разными моделями (хотя вроде кто-то делал и с одной моделью, но это уж совсем за гранью фантастики)
У меня 2D игра, мне с этим делом немного прощще. И да, отдельные конечности - отдельные спрайты.

 

Ладно, буду искать дальше как всё это реализовать, идеи есть но сейчас уже поздно, и клонит в сон, утром может быть чтонибудь в голову придёт, альфабеткучтототам от моей игры пока можете не ждать, работы еще кучи, но обещаю, что моя игруля будет очень отличаться от большинства игр на GM. В лучшую сторону.

Изменено пользователем 3DI70R

Поделиться сообщением


Ссылка на сообщение

Люди, как поставить проверку комнаты? (Мне нужно чтобы объект совершал действие в зависимости от комнаты в которой он находится)

Изменено пользователем Reven The Hedgehog

Поделиться сообщением


Ссылка на сообщение

стандартная переменная room - текущая комната . это всё

Изменено пользователем Jackrost

Поделиться сообщением


Ссылка на сообщение
Люди, как поставить проверку комнаты? (Мне нужно чтобы объект совершал действие в зависимости от комнаты в которой он находится)

 

в таком случае можно сделать так:

if room=room1
{
действие
}
if room=room2
{
действие
}
........

Поделиться сообщением


Ссылка на сообщение

В предыдущем посте сказали. Ничего так, да?

Поделиться сообщением


Ссылка на сообщение
В предыдущем посте сказали. Ничего так, да?

И тут новичков недолюбливают ;), ок ок.

Просто я чутка подетальней обьяснил.

Лан, урок усвоен, впредь постараюсь так не поступать.

Поделиться сообщением


Ссылка на сообщение

*Не все недолюбливают новичков a3ba339a.png*

Большое спасибо лично 3DI70R'y за точное объяснение, я понял в чем я ошибался. Я думал что надо писать room(room1), а не room = room1.

Изменено пользователем Reven The Hedgehog

Поделиться сообщением


Ссылка на сообщение

Тут недолюбливают не новичков, а тех, кто:

1)Задает ТУПЫЕ вопросы.

2)Объясняет по второму разу то, что уже объяснили (к постам, появившимся с периодом в пару секунд это не относится)

3)Троллям (их самих троллят)

4)Самым уж тупым нубам (которые задают аж по пять тупых вопросов, которые к тому же уже были объяснены)

 

Ревен, теперь тебе:

Если ты используешь зарезервированую переменную (room, speed и так далее), то сравнивать и назначать ее надо через оператор присваивания, то есть через "равно". Если функция, то, ясен пень, через скобки.

Поделиться сообщением


Ссылка на сообщение

Проблема.

Можно ли забить действие в "Step" так, чтобы оно повторялась один раз.

Тоесть,

if (var=0)

{

alarm[0]=15

}

 

Возникает проблема, потому что пока var=0 кол-во шагов до alarm[0] постоянно равно 15.

Можно ли решить эту проблему без добавления новых варов?

Поделиться сообщением


Ссылка на сообщение

Я бы сделал так

if (var=0)

{

alarm[0]=15

var=1 //или как там надо

}

Хотя это наверное поспешное и неправильное решение

Изменено пользователем 1001

Поделиться сообщением


Ссылка на сообщение

Я сам так всегда делаю)

Мне скорее интересно, есть ли более правильный способ))

Изменено пользователем Reven The Hedgehog

Поделиться сообщением


Ссылка на сообщение

В степе это ЕДИНСТВЕННЫЙ способ, на сколько мне известно.

Поделиться сообщением


Ссылка на сообщение

Как назначить кнопку с определенного компьютера?

Было

assigned_key_action = vk_space

А как должно стать? Была идея, но она не работает. Через отдельные евенты и if (global.master) не годится, ибо так не удобно

Если, конечно, кто-нибудь понял, что я хочу

Изменено пользователем 1001

Поделиться сообщением


Ссылка на сообщение
Как назначить кнопку с определенного компьютера?

Была идея, но она не работает. Через отдельные евенты и if (global.master) не годится, ибо так не удобно

Если, конечно, кто-нибудь понял, что я хочу

Если я правильно понял, то ты хочешь изменять клавиши на которых висят действия?

 

В данном случае это легко сделать, алгоритм вкратце вот:

 

Входим в режим отслеживания клавиш -> ждём ввод с клавиатуры -> присваиваем действие нажатой клавише -> выходим из отслеживания.

 

В присоединённом файле пример как я это реализовал.

example.zip

Поделиться сообщением


Ссылка на сообщение

Моя криворукость меня убивает

Нет, я хочу сделать мультиплеер, и хочу чтобы определенная кнопка (та же vk_space) воспринималась с определенного компьютера

Изменено пользователем 1001

Поделиться сообщением


Ссылка на сообщение
Моя криворукость меня убивает

Нет, я хочу сделать мультиплеер, и хочу чтобы кнопка воспринималась с одного компьютера

Тут уж без global.master не обойтись, так как она разграничивает что должно выполнятся на хосте а что на клиенте

 

Например при создании комнаты, хосту присваивается global.master=true а клиенту global.master=false

Тоесть если

if global.master=true
{выполняем код для сервера}
else
{выполняем для клиента}

также и с управлением, если

if global.master=true && player=1
{управление обсчитывается для хоста}
if global.master=false && player=2
{управление обсчитывается для клиента}

А вобще, онлайн мультиплеер, очень непростая штука...

Изменено пользователем 3DI70R

Поделиться сообщением


Ссылка на сообщение

Для мультиплеера лучше юзать отдельную ДЛЛ, на стандартных возможностях тут далеко не уедешь.

Вообще, не совсем понял, нахрена это все нужно. Когда играют два игрока на одной клавиатуре (а именно так все и получится, если проверять удаленные нажатия и передавать их значения на твою клаву), то буфер клавиатуры быстро заполнится, и некоторые кнопки перестанут реагировать (будет пикать спикер). Итог - поиграть не удастся. Куда легче и надежнее сделать проверку переменных, которым передается значение с передающего компа. Да и вообще, так мультиплеер не делается, ибо любой игрок захочет настроить управление под себя, и не всегда оно разное для какждого.

Поделиться сообщением


Ссылка на сообщение

У меня тут собственно такая вопросина возникла:

 

Сейчас пишу скрипт для загрузки скелетных анимаций из массивов - scrAnimateSkeleton(название анимации,кол-во костей), и по идее название массива совпадает с названием анимаций.

Но если придать аргументу0 значение например anim_idle, дабы на выходе получилось например anim_idle[1,11], ничего не произойдёт, скрипт возвратит animation_bone_scale как anim_idle[0,0].

 

for (i=1;i<=argument1;i+=1)
{
animation_bone_rotate[i]=argument0[i,frame*10]
animation_bone_scale[i]=argument0[i,frame*10+1]
........
}

Я знаю что есть функция считывающая из 2D массивов, такая как variable_local_array2_get, но она слишком медленная, и её использовать не хотелось бы. При обсчёте 20 костей:

Без неё - ~2000 fps

с ней - ~700fps

Как видно при её использовании скорость падает в ~2.8 раз, а скорость крайне не хотелось бы терять, учитывая что еще по крайней мере будут 2 таких же по трудности реализации системы.

 

Так вот:

 

Можно ли как нибудь извратится и считать из массива данные используя лишь одно только название, и не прибегая к использованию функции variable_local_array2_get ? (разумеется если этот способ быстрей чем функция)

Изменено пользователем 3DI70R

Поделиться сообщением


Ссылка на сообщение

Имя массива в качестве элемента использовать нельзя. Нужно использовать имя массива И номера его элементов.

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×