NAVIADDRESS REST API
Lua
Как использовать Naviaddress в видеоиграх,
разработанных с помощью игрового движка Corona SDK
С чего начать?

Многие современные фреймворки для разработки компьютерных игр написаны с использованием языка программирования Lua. Давайте рассмотрим, как с помощью платформы Naviaddress и игрового движка Corona SDK можно разработать простейшую геоигру.

Перед началом разработки необходимо скачать и зарегистрировать версию Corona SDK на русской версии сайта компании Corona Labs.

После установки Corona запустите программу Corona Simulator.


После запуска симулятора нажмите кнопку New Project (Новый проект) и задайте название новой программы "navigame". Система предложит открыть исходный файл main.lua в текстовом редакторе.

Откройте файл и в открывшемся окне добавим несколько строк:
  • загрузим пакет json для обработки JSON объектов
  • создадим константу с указанием центра экрана (эта константа пригодится нам, когда мы будем центрировать надписи и рисунок по центру экрана)
-----------------------------------------------------------------------------------------
--
-- main.lua
--
-----------------------------------------------------------------------------------------

-- Your code here
local json = require( "json" )
local cx = display.contentCenterX 
Теперь создадим запрос к REST API с помощью процедуры network.request(). В качестве параметров эта системная процедура принимает URL для вызова, метод (в нашем случае это "GET"), а также специальную процедуру handleResponse() для обработки, которая будет вызвана, когда запрос будет выполнен.

Внутри процедуры handleResponse() вставим проверку, что делать, если во время выполнения программы была зафиксирована ошибка. Если мы все сделали правильно, то система сохранит навиадрес, присланный от платформы назад в переменной event.response.
local function handleResponse( event )
 
    if not event.isError then
        print( "Naviaddress is loaded" )
        -- здесь будем записывать инструкции по обработке полученного навиадреса
    else
        print( "Error!" )
    end
 
    return
end
  
network.request( "https://staging-api.naviaddress.com/api/v1.5/Addresses/7/0022", 
            "GET", handleResponse )
Для того, чтобы нормально начать использовать полученный ответ, нам нужно его декодировать из формата JSON с помощью инструкции json.decode():


        local response = json.decode( event.response )
        local result = response.result
Полученный расшифрованный ответ содержит теперь JSON объект со следующими полями:
  • description - название навиадреса
  • cover - массив фотографий из обложки.

Давайте выведем эту информацию на экран телефона.
        display.newText(result.container,cx,150)
	display.newText(result.description,cx,200)
Давайте еще выведем фотографию обложки на экран. Сами фотографии хранятся в облаке Amazon, могут быть загружены с помощью встроенной функции Corona SDK network.download(). Так как загрузка фотографий может занимать много времени, давайте сделаем ее асинхронной:
local function handleImage( event )
    if ( event.isError ) then
        print( "Network error - download failed: ", event.response )
	elseif ( event.phase == "ended" ) then
        myImage = display.newImage( event.response.filename, event.response.baseDirectory, cx, 350 )
        myImage:scale(0.2,0.2)
    end
end

network.download(result.cover[1].image,"GET",handleImage {}, "image.jpg", system.TemporaryDirectory)
Если вы все сделали правильно, то на экране телефона или симулятора должны появиться надписи и фотография офиса Naviaddress.
Полный текст приведенной программы из статьи доступен по ссылке.

Автор: А.Гершун (11.09.2018)
Made on
Tilda