Я даже не уверен, что мой план действий — лучший способ, поэтому я извиняюсь, если этот пост немного расплывчатый. Также я понимаю, что подобные вопросы уже задавались ранее. Однако я не смог найти ничего, что имело бы отношение к моей ситуации и имело для меня смысл.
Поэтому я и мои школьные друзья строим аркадный автомат, и я планирую собрать основной графический интерфейс, который позволит пользователю выбирать разные игры и загружать их, если у них достаточно токенов. Тем не менее, эти отдельные окна должны совместно использовать некоторые переменные, в основном количество токенов в машине. Я полагал, что отдельная программа Lua может хранить такую переменную, а также отправлять запросы на выполнение других функций, таких как открытие и закрытие различных окон. Кроме того, в случае, если важно отметить, что мы будем использовать движок Love2D для игр и запустим все это на Linux-машине.
Судя по тому, что я прочитал, похоже, в этом есть некоторый код на C и C ++. Я почти ничего не знаю о C или C ++, и мы пытаемся продвинуть этот проект, так что, если бы вы могли включить в свой ответ какой-то код и дать мне инструкции по его использованию, это было бы удивительно. Я могу вернуться позже и выучить немного C или C ++, но сейчас Lua — мой главный приоритет.
Мои вопросы:
Кроме того, если кто-нибудь поднимает этот вопрос, я пытался использовать глобальные переменные, но я не мог заставить две программы / сценарии использовать одну и ту же переменную одновременно.
Снова, извините, если я немного расплывчатый.
Заранее спасибо!
(этот метод представляет собой сочетание предложения @ Puzzlem00n и прочтения комментариев, поэтому мне не стоит верить этому)
Положить несколько игр в одной программе Lua!
В main.lua:
require("spaceInvaders") --require all the other Lua files
-- without the ".lua" at the end!
gamestate=spaceInvaders
function love.load()
--all the setup things
end
function love.update()
gamestate.update()
end
function love.draw()
gamestate.draw()
end
function love.keypressed(key)
gamestate.keypressed(key)
end
--and so on for the rest of the love callbacks that you need (such as love.keyreleased())
Затем в каждой игре (которая представляет собой отдельный файл Lua, такой как spaceInvaders.lua):
spaceInvaders = {}
function spaceInvaders.draw()
--your draw code
end
function spaceInvaders.update()
--your update code
end
--and so on for every other callback you want to use
Этот код дает каждой игре свой набор любовных функций. Если вы хотите поиграть в эту игру, вы должны установить для gamestate имя этой игры. spaceInvaders={}
Строка определяет spaceInvaders как таблицу, в которой хранится каждая функция. Когда вы определяете переменную как существующую переменную, вы фактически создаете ссылку на нее, например:
t = {}
table.insert(t,1) --place 1 inside t
table.insert(t,3) --also place 3 inside t
s = t
print(s[1]) --will print 1, the first value of t
t[1]=2
print(s[1]) --will print 2, as it refers to t[1], which has just been changed
Совместное использование переменных! (Я разработал этот бит!)
ТЕПЕРЬ, это означает, что вы можете отправлять переменные по программе с помощью другой функции. Если вы хотите разделить счет между играми, вы можете сделать следующее:
в main.lua:
function love.update()
gamestate.update()
score = gamestate.returnScore() --score will always equal to the current score being returned by the game
end
в игре, такой как spaceInvaders.lua:
function spaceInvaders.returnScore()
return score --or whatever the score is stored in
end
Это позволит вам получить переменную, такую как оценка, из одной игры в main.lua!
Извините, если это немного сбивает с толку, но, надеюсь, это то, что вы ищете! 🙂
Других решений пока нет …