Corona SDK: Всплывающее окно результатов расчета калорий

Этот урок описывает создание кнопки «Результаты», отображающей всплывающее окно с результатом расчета калорий. Код и дополнительные материалы доступны на сайте [эти прагер точка ком](эти прагер точка ком).

Кнопка «Результаты»

Добавим кнопку в файл main.lua. Создадим переменную buttonResult:

local buttonResult = display.newButton(
    display.contentCenterX,
    870,
    "button_result.png" -- путь к изображению кнопки
)
buttonResult.width = w  -- w - ширина экрана
buttonResult.height = 70
buttonResult.x = 10
buttonResult.fill.color = {245/255, 77/255, 128/255} -- Светло-розовый цвет
buttonResult.onRelease = showResultWindow -- функция отображения окна результатов
buttonResult.label = "Считать калории"
buttonResult.label.fontSize = 32
sceneGroup:insert(buttonResult) -- Добавление кнопки в группу сцены

Кнопка добавляется в sceneGroup для корректного отображения поверх других элементов. Создайте изображение button_result.png.

Обработчик onRelease

Метод onRelease отображает всплывающее окно:

local function showResultWindow()
    composer.showOverlay( "scenes/result.lua", { isModal = true, effect = "fade", time = 400 } )
end

Используется composer.showOverlay для отображения сцены result.lua как модального окна с эффектом затухания.

Файл result.lua

Файл result.lua (папка scenes) содержит код всплывающего окна:

local scene = composer.newScene()

local sceneGroup

function scene:create(event)
    sceneGroup = self.view
    -- Создание элементов окна результатов (см. следующий раздел)
end

function scene:show(event)
    -- Отображение окна результатов
end

function scene:hide(event)
    -- Скрытие окна результатов
end

scene:addEventListener("create", scene)
scene:addEventListener("show", scene)
scene:addEventListener("hide", scene)
return scene

Это стандартная структура сцены в Corona SDK.

Элементы окна результатов

Функция scene:create создает элементы окна:

-- Фон
local background = display.newRect(sceneGroup, 0, 0, display.contentWidth, display.contentHeight)
background.alpha = 0.7

-- Рамка для результатов
local resultFrame = display.newRoundedRect(sceneGroup, display.contentCenterX, 490, 460, 620, 15)
resultFrame.fill.color = {244/255, 244/255, 244/255}

-- Кнопка "ОК"
local okButton = display.newButton(sceneGroup, display.contentCenterX, 720 + 50, "ok_button.png") -- Создайте изображение кнопки.
okButton.width = 440
okButton.height = 70
okButton.radius = 5
okButton.fill.color = {0.2, 0.2, 0.2}
okButton:addEventListener("tap", function() composer.hideOverlay(true, "fade", 400) end)
okButton.label = "Готово"

sceneGroup:insert(okButton)
sceneGroup:insert(resultFrame)
sceneGroup:insert(background)

Создайте изображение ok_button.png.

Расчет калорий (calculateCalories)

Функция calculateCalories вычисляет количество сожженных калорий:

local function calculateCalories(weight, height, age, gender, activityFactor, time)
    local formula
    if gender == "male" then
        formula = 10 * weight + 6.25 * height - 5 * age + 5
    elseif gender == "female" then
        formula = 6.25 * height - 5 * age - 161
    end
    local calories = math.floor((formula * activityFactor * time) / 24)
    return calories
end

Функция принимает вес, рост, возраст, пол, коэффициент активности и время, возвращая количество сожженных калорий (округление до целых чисел).

Отображение результатов

В функции scene:create добавить код для отображения activityName, time и результата (result) с корректным форматированием. Этот код аналогичен коду добавления других элементов. Здесь вызывается функция calculateCalories и результаты выводятся на экран.

Создано всплывающее окно с результатом расчета калорий. composer упрощает управление сценами и эффектами перехода. Добавьте обработку ошибок и валидацию данных для повышения надежности приложения.

Что будем искать? Например,программа