2015-03-28 3 views
0

Я использую GameMaker. Игра, над которой я работаю, должна быть обновлена ​​позже. Как создать обновление, чтобы люди не могли загрузить обновленную версию. Мне бы хотелось, чтобы человек, играющий в нее, мог нажать кнопку и обновить игру.Как сделать обновление для GameMaker Game

ответ

0

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


Вы не можете обновить часть игры, поскольку она будет скомпилирована для одного исполняемого файла. Пользователям придется загрузить весь .exe вашей игры. Лучше всего создать еще одну автономную программу (с GM или другим программным обеспечением/языком). Вы всегда можете запустить эту программу обновления с помощью нажатия кнопки в вашей игре. Вы можете найти открытый исходный код, чтобы сделать свой собственный обновитель в C, C++ или C#.

Если бы я был вами, я бы просто сделал небольшую кнопку «проверить для обновления» в игре, и это приведет к созданию веб-сайта PHP с текущей версией по адресу (например, www.mygamesite/update?v=1.2345). Затем вы сравните версию, указанную в URL, чтобы показать, что «ваша игра обновлена» или «загрузить последнюю версию» с помощью списка изменений.

2

Я сделал это.

Я создал файл на сервере, в основном это может быть каждый сервер. В этом файле я сказал:

[Version] 
Version = 1010 

Таким образом, самая новая версия 1.0.1.0. Существует функция GM_version для проверки текущей версии игры, но ot вернет 1.0.0.1, я не знаю, почему они это сделали. Итак, для того, чтобы исправить это, это мое создать событие:

//Re-order version and delete points 
Version3 = string_replace(GM_version,'.','') 
Point1 = string_pos('.',version3) 
Version2 = string_delete(version3,point1,1) 
Point2 = string_pos('.',version2) 
Version1 = string_delete(version2,point2,1) 
String1 = string_copy(version1,point1,point2 - point1) 
Version0 = string_delete(version1,point1,point2 - point1) 

Version_local = version0 + string1 


//Delete old file and get serverfile 
Version_online = 0 
Got = 0 
file_delete("your file") 
File = http_get_file("your serverfile","your file") 

В асинхронной HTTP Event этот код:

if ds_map_find_value(async_load,"id") == file { 
    if ds_map_find_value(async_load,"status") == 0 { 
     ini_open("your file") 
     Version_online = ini_read_string("version","version",version_local) 
     ini_close() 
     Got = 1 
    } 
} 

Последнее, на этапе проведения:

if got == 1 { 
    if version_online > version_local { 
     //your code when there's an update, e.g. open your homepage. 
    } 
    Got = 0 
} 

Надеюсь, что это помогло!

Смежные вопросы