Как обмениваться данными между двумя скриптами Lua

0

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

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

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

Мои вопросы:

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

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

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

Заранее спасибо!

  • 0
    Что именно вы пытаетесь сделать, на более высоком уровне; Какую проблему ты пытаешься решить? Я предполагаю, что у вас уже есть некоторый код. Не могли бы вы свести это к одному конкретному, ясному и лаконичному вопросу? Обмен данными между двумя сценариями Lua не так уж и сложен. Это то, что require , поэтому я чувствую, что здесь есть кое-что еще.
  • 0
    На самом деле ... У меня еще нет написанного кода. Если честно, я действительно не знаю, что делаю. Наверное, поэтому я здесь: P. По сути, я хочу знать следующее: как создать переменную, которая используется двумя программами во время их работы?
Показать ещё 9 комментариев
Теги:
scope
lua
love2d

1 ответ

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню