Game Maker - создание игр | HellRoom Games
Март 24, 2025, 03:41:42 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.

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

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

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]За добавление полезных программ!Третье место на HellRoom Jam #6 [Игра на конкурс]2 место в конкурсе Адекватные игры #3 [Антиутопия]
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512



WWW
« Ответ #15 : Июнь 20, 2016, 16:41:22 »

Ну если sp представлен константой, то с записью
чего-то не того.
В шапке простой пример где sp представлен восьмеркой (8)
Дабы не нагружать лишней инфой.

Если скорость шарика в рамках геймплея может менять скорость, заменяем константу "8" на переменную sp.
Время вступает в силу после всех манипуляций.

Для всех прочих способов реализации паузы скажу: нету способа лучше чем вручную останавливать все объекты. Способы с instance_deactivate_all, сейвскринами могут иметь право на существование. Но они проигрывают по удобности и простоте юза (что очень даже важно для новичков), даже не говоря о открывающихся возможностях.
Записан

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

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

Пол: Мужской
API: Game Maker 8.0 Pro
Деятельность: Простенькие 2D игры, плтформеры, аркады.
Сообщений: 34


Вам меня не понять, я мыслю иначе.


« Ответ #16 : Июнь 20, 2016, 18:57:10 »

Есть проблема с будильниками, как изменить его когда он уже включён, я нашёл решение, но оно требует мощного железа:
Записан

__$$$$___$$$$_$$$$__$$$$$$$$____
___$$_____$$___$$___$$______$___
___$$_____$$___$$___$$______$___
___$$_____$$___$$___$$$$$$$$____
___$$_____$$___$$___$$__________
____$$___$$____$$___$$__________
_____$$$$$____$$$$_$$$$_________
life Jumb
GM Pro user
*

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

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]За добавление полезных программ!Третье место на HellRoom Jam #6 [Игра на конкурс]2 место в конкурсе Адекватные игры #3 [Антиутопия]
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512



WWW
« Ответ #17 : Июнь 20, 2016, 19:12:17 »

это какое-то отношение к статье имеет?
Записан

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

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

Пол: Мужской
API: Game Maker 8.0 Pro
Деятельность: Простенькие 2D игры, плтформеры, аркады.
Сообщений: 34


Вам меня не понять, я мыслю иначе.


« Ответ #18 : Июнь 20, 2016, 19:56:24 »

это какое-то отношение к статье имеет?
Ну это тема про время, не так-ли?
Записан

__$$$$___$$$$_$$$$__$$$$$$$$____
___$$_____$$___$$___$$______$___
___$$_____$$___$$___$$______$___
___$$_____$$___$$___$$$$$$$$____
___$$_____$$___$$___$$__________
____$$___$$____$$___$$__________
_____$$$$$____$$$$_$$$$_________
Goo
ну типа
GM Pro user
*

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

Пол: Мужской
Награды:
3 место в HellRoom Jam XВторое место на HellRoom Jam #9 [Антибиотик]
API: GameMaker Studio 2
Деятельность: программист
Сообщений: 1345



« Ответ #19 : Июнь 20, 2016, 20:01:24 »

вовсе нет,
это статья о том, как "привязать" все процессы (времязависимые)
не к скорости процессора, а к часам (ко времени),

ну и конечно остановка процессов во время паузы, а не то, что ты подумал
Записан

life Jumb
GM Pro user
*

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

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]За добавление полезных программ!Третье место на HellRoom Jam #6 [Игра на конкурс]2 место в конкурсе Адекватные игры #3 [Антиутопия]
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512



WWW
« Ответ #20 : Июнь 20, 2016, 23:15:59 »

 ZaRubick
Это статья о том, как сделать паузу, управление временем, и что-бы скорость игры не зависела от фпс (и room_speed следственно) а влияла лишь на плавность картинки.
Все сразу одной очень простой формулой, почему это породило столько вопросов и недопониманий? Я что, расписывал алгоритм распада ядерных изотопов? Куда уж проще то? x*y*z=t
Записан

 
Goo
ну типа
GM Pro user
*

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

Пол: Мужской
Награды:
3 место в HellRoom Jam XВторое место на HellRoom Jam #9 [Антибиотик]
API: GameMaker Studio 2
Деятельность: программист
Сообщений: 1345



« Ответ #21 : Июнь 21, 2016, 13:40:47 »

Цитировать
не зависела от фпс (и room_speed следственно)
Разве это не "привяска" ко времени? А?

ты же скорость игры делаешь зависимой от 2-х вещей,

1) промежуток времени с последнего шага
2) на паузе или нет...

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

или я опять чего-то недопонял???

Добавлено: Июнь 21, 2016, 13:58:15
3) ну еще коэффициент добавляется, от которого зависит,
ускорены или замедленны процессы...

ничего более тут и нет...
« Последнее редактирование: Июнь 21, 2016, 13:58:15 от ZaRubick » Записан

luden
GM Pro user
*

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

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


« Ответ #22 : Июнь 21, 2016, 14:19:25 »

Все сразу одной очень простой формулой, почему это породило столько вопросов и недопониманий? Я что, расписывал алгоритм распада ядерных изотопов? Куда уж проще то? x*y*z=t
Это судьба всех кто пытается сделать маленький понятный пример, который всего лишь должен пропустить через себя всю базовую механику гм.
Записан
Kosta
Посетитель
**

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

Пол: Мужской
Награды:
За отличную игру One Minute Solar!
API: GameMaker Studio Pro
Деятельность: Код, Игровой дизайн, Прототипирование
Сообщений: 34



WWW
« Ответ #23 : Август 28, 2016, 11:29:41 »

Попробовал сделать как описано, но явно что-то недопонял.
Скорость теперь напрямую влияет на физику... скачал пример из статьи, но там тоже самое - тыкаешь на шар, а его импульс зависит от текущей "time scale" - разве так должно быть? Это же не логично.
Как я понимаю, это был не финальный вариант примера - может кто-нибудь сделать простой пример и выложить или подправить старый пример до логичного поведения?
Заранее спасибо.
Записан
life Jumb
GM Pro user
*

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

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]За добавление полезных программ!Третье место на HellRoom Jam #6 [Игра на конкурс]2 место в конкурсе Адекватные игры #3 [Антиутопия]
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512



WWW
« Ответ #24 : Август 28, 2016, 12:24:41 »

Сам импульс не должен, операции изменения значения импульса должны умножаться на коэффициент Глобал.т э
Скинь код в степе я покажу
Записан

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

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

Пол: Мужской
Награды:
За отличную игру One Minute Solar!
API: GameMaker Studio Pro
Деятельность: Код, Игровой дизайн, Прототипирование
Сообщений: 34



WWW
« Ответ #25 : Август 28, 2016, 16:10:02 »

Хм, очень много кода получается, поэтому то я и попросил сделать "простой пример, без заморочек" исходя из ваших данных, а не моих.
Дело в том, что у меня используются такие функции как motion_add и вообще многое работает на такого рода упрощённых векторах, вместе с тем у вас этот вопрос не рассматривался, у вас скорости статичные, поэтому если повторять всё "1 в 1" очевидно что мы никогда не придём к моим проблемам с некорректными вычислениями.
В результате у меня всё идёт хорошо после внедрения global.delta до того момента пока не начинается "частичное" изменение скорости - т.е. не 0/1, а 0.5 например.
Но рас уж пример всё равно никто делать не собирается, попытаюсь объяснить простым языком, как я дошёл до такого эффекта.
Код: (Начальный код я модифицировал с...)
global.t=global.pause*global.timescale*(delta_time/16666)
Код: (...на:)
dtPrevious = dt;
dt = delta_time/1000000;
if (dt > 1/minFPS)
    {
    if (dtRestored)
        {
        dt = 1/minFPS;
        }
    else
        {
        dt = dtPrevious;
        dtRestored = true;
        }
    }
else
    {
    dtRestored = false;
    }
global.delta = 60*dt*timeScale;

Код: (В create пишу:)
minFPS = 10;
timeScale = 1.0;
dt = delta_time/1000000;
dtPrevious = dt;
dtRestored = false;
global.delta = 60 * dt;

Затем я понял, что смысла хранить направление и скорость мало, т.к. каждый следующий motion_add изменяет вектор так, что легче всего мне было хранить данные в формате горизонтальной (hsp) и вертикальной (vsp) скорости. Поэтому я считал "как раньше", а в конце step'а просто обнулял скорость, сохранив предварительно полученный импульс:
Код:
hsp+=hspeed;
vsp+=vspeed;
speed = 0;
x+=hsp*global.delta;
y+=vsp*global.delta;
В общем всё довольно сложно, у всех свои идеи свой подход к коду, поэтому я и просил "простой пример того, что вы делаете, что всё работает" - в едином посте, а не разрозненно, а то честно говоря я еле собрал то, что было написано. Если так не хочется "Добавлять файл" с простым проектом, можете описать пример как я - что в create, что в step и т.д.
Надеюсь на понимание.
Записан
life Jumb
GM Pro user
*

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

Пол: Мужской
Награды:
1000 сообщений!За постоянность! [100 дней на форуме]За лояльность! [+150 репутации]За добавление полезных программ!Третье место на HellRoom Jam #6 [Игра на конкурс]2 место в конкурсе Адекватные игры #3 [Антиутопия]
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512



WWW
« Ответ #26 : Август 28, 2016, 17:36:51 »

По поводу модификации начального кода я не понял, зачем усложнять универсальную формулу.


Код: (если это дублирование значений зачем плюсы?)
hsp=hspeed;
vsp=vspeed;

В том коде где ты добавляешь к hspeed значения, добавление тоже умножай на коэффициент.
Это ведь не весь код, где описано влияние звезды?

Добавлено: Август 28, 2016, 17:54:58
  • Форумула global.t=global.pause*global.timescale*(delta_time/16666), всего лишь выдает коэффициент, на который должны быть умножены времязависимые процессы
  • Кто-бы что не говорил, никаких квадратов в формулах нету
  • Если что-то не работает 100%, что то просто забыли умножить, либо умножили там где не нужно

Пример:
Код: (create шарика)
sp=7
direction=20

Код: (step)
sp+=4*global.t //линейное ускорение
sp+=sp*0.2*global.t //экспоненциальное

direction+=10*global.t //изменение направления также зависит от времени

speed=sp*global.t //sp фактическая скорость (импульс)

Если речь идет о гравитационном воздействии этого достаточно, но если всеже возникает траблы есть 1 индуский универсальный метод
Код: (вариант для новичков)
var p_sp, p_dir;
p_sp=sp
p_dir=dir

/*
sp=ультра расчет архисложного алгоритма
dir=алгоритм распада урана
//global.t в формулах не учавствует
*/

//p_sp=значение sp до расчетов
sp=lerp(p_sp,sp,global.t)
dir=lerp(p_dir,dir,global.t)

//да, такая фигня тоже будет, работать
« Последнее редактирование: Август 28, 2016, 17:54:58 от life Jumb » Записан

 
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  

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