Спрайтовый движок, #5
МЕНЮ С ВЫБОРОМ ИГР
Недавно задумал сделать на Instead платформе такую вещь: загружаем игру, а она выдаёт список из игр, которые можно запустить и поиграть. Все эти игры объединены не одной темой, а одним моим движком. То есть созданы для моего движка, который проигрывает эти игры.
При работе над этой идеей возникло не мало сложностей:
1. Игры бывают разного размера экрана (окна) и нужно сначала подготовить соответственно файл theme.ini
2. Нужно после того, как игрок поиграл в одну игру загружать снова меню из игр, а theme.ini у нас переделано :( под предыдущую игру.
Но я решил обе эти проблемы. УРА!
1. После выбора игры на диск записываем игровой theme.ini но не запускаем её, а просим пользователя перезапустить игру, вызвавав меню и нажав "Начать заново".
2. После того, как пользователь нажал "Начать заново" прога стартует с новым theme.ini и изменяет параметры окна игрового, потом записывает на диск первоначальный theme.ini для того, чтобы при следующем перезапуске окно загрузчика было первоначальным и стартуем игру.
Алгоритм был правильный, но в одном месте была ошибочка. Я её долго отлавливал, но нашёл. Так как я воспользовался для создания меню выбора игр конструкциями Instead: room, dsc, obj, vobj, enter, act, да еще поставил autosave на false, а в этих конструкциях не сохраняется значения переменных, то есть в конструкциях instead нельзя при отключенном autosave сохранить и передать значение переменной. А мне нужно было при старте загрузчика инициализировать переменную в первоначальное значение. Я её поместил в конструкцию enter при каждом входе в room. Это и было ошибочно. Она не ставилась в первоначальное положение. Можно сказать, что в enter был только текст программы, на не исполняемый код программы. Для наглядности приведу кусок кода менюшки с ошибкой:
instead_version "2.4.1"
game.enable_autosave = false
require 'theme'
main = room {
nam = 'Коллекция игр IFtroll';
enter = function()
ERRORSCR = true -- поместить переменную здесь было ошибкой
return save_auto_ini()
end,
dsc = function()
return txtc ("Loader Games^")
end,
obj = {
vobj("1", "^1. {Комиксы «Дара Круз»} 768:976"),
vobj("2","^2. {Зомби, Ajenta Arrow} 800:600"),
vobj("3","^3. {Floors Escape} 1020:715"),
vobj("4","^4. {Побег из комнаты} 768:976"),
vobj("5","^5. {Сказка-плуталка} 768:976"),
vobj("6","^6. {Цветные лопухи} 800:600"),
vobj("7","^7. {Аня Нежина и рубин в золотой оправе} 800:600"),
};
act = function(s, w) --выбор игры для создания темы
dofile 'modules/inite.lua'
LD = 'a'
LI = w
if w == "1" then
gamename = "comics"
lang = 'unq'
W_SCR = 768
H_SCR = 976
S_SCR = 0
pathgam = "games/"..gamename.."/"
return init()
и т.д
Как только переменную ERRORSCR я вынес за пределы конструкций INSTEAD ошибка исчезла.
Теперь осталось под последнюю версию движка "подпилить" все игры, что в менюшке.
Комментарии
Отправить комментарий