2013-11-26 4 views
0

Я даже не уверен, что мой план делать вещи - лучший способ, поэтому я приношу свои извинения, если этот пост немного расплывчато. Кроме того, я понимаю, что подобные вопросы были заданы раньше. Однако я не смог найти ничего, что касалось моей ситуации, и это имело смысл для меня.Как делиться данными между двумя сценариями Lua

Так что я и мои друзья из школы строят аркадную машину, и я планирую собрать основной графический интерфейс, который позволяет пользователю выбирать разные игры и загружать их, если у них достаточно токенов. Однако этим отдельным окнам придется делиться некоторыми переменными, главным образом, количеством токенов в машине. Я решил, что отдельная программа Lua может хранить такую ​​переменную, а также посылать ей запросы для выполнения других функций, таких как открытие и закрытие разных окон. Кроме того, в случае, если важно отметить, что мы будем использовать движок Love2D для игр и будем запускать все это на машине Linux.

По тому, что я читал, в этом есть код C и C++. Я почти ничего не знаю о C или C++, и мы пытаемся продвинуть этот проект, поэтому, если вы могли бы включить какой-то код в свой ответ и проинструктировать меня о том, как его использовать, это было бы потрясающе. Я могу вернуться позже и узнать некоторые C или C++, но сейчас Lua - мой главный приоритет.

Мои вопросы:

  1. Есть ли лучший способ сделать то, что я пытаюсь сделать?
  2. Как мне это сделать?
  3. Это можно сделать исключительно с помощью Lua или C, C++ или любого другого внешнего языка/утилиты/etc. обязательный?

Кроме того, если кто-нибудь его поднимет, я попытался использовать глобальные переменные, но я не мог заставить две программы/скрипты использовать одну и ту же переменную одновременно.

Снова, извините, если я немного расплывчато.

Заранее благодарен!

+0

Что именно вы пытаетесь сделать на более высоком уровне; Какую проблему ты пытаешься решить? Я предполагаю, что у вас уже написан код. Не могли бы вы, возможно, свести его до одного конкретного, ясного и краткого вопроса? Совместное использование данных между двумя сценариями Lua не так сложно. Вот что ['require'] (http://www.lua.org/manual/5.2/manual.html#pdf-require), так что я чувствую, что здесь есть что-то еще. –

+0

На самом деле ... У меня еще нет кода. Честно говоря, я не знаю, что я делаю. Наверное, поэтому я здесь: P. В сущности, я хочу знать: как создать переменную, которая используется совместно между двумя программами во время их работы? – SadBlobfish

+0

Это немного яснее. Это зависит от того, что такое программы. Я предполагаю, что вы подразумеваете различные игры, сделанные с Lua, используя Love2D, поскольку вы упомянули разные игры, а затем отдельные окна вскоре после этого. Есть ли причина, по которой они будут полностью отдельными программами, которые должны общаться друг с другом? Возможно, это поможет вам попробовать [учебник или два] (http://www.love2d.org/wiki/Category:Tutorials) и сначала написать код, чтобы понять, как все работает на менее абстрактном уровне. –

ответ

0

(этот метод является сочетание предложения @ 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 

Что делает этот код он дает каждому игра его собственный набор функций любви. Когда вы хотите играть в эту игру, вы должны установить игру для игры в эту игру. Строка 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! Прошу прощения, если это немного запутанно, но, надеюсь, это то, что вы ищете! :)

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