Этот урок описывает создание кнопки «Результаты», отображающей всплывающее окно с результатом расчета калорий. Код и дополнительные материалы доступны на сайте [эти прагер точка ком](эти прагер точка ком).
Кнопка «Результаты»
Добавим кнопку в файл 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 упрощает управление сценами и эффектами перехода. Добавьте обработку ошибок и валидацию данных для повышения надежности приложения.