Игра за 25 минут: Corona SDK — пошаговое руководство

Это пошаговое руководство по созданию простой 2D игры на игровом движке Corona SDK.

Начало работы: Установка Corona SDK

Для начала скачайте и установите Corona SDK. Ссылка на загрузку: [ссылка_на_скачивание_corona_sdk_нужно_добавить_реальную_ссылку]. Программа совместима с macOS и Windows. После установки запустите программу.

Создание нового проекта

В Corona SDK нажмите «Создать новый проект». Назовите игру (например, «A Simple Game»). Выберите шаблон «Blank» (пустой проект) и вертикальную ориентацию. Укажите папку для сохранения проекта.

Написание кода (Lua)

Откроется редактор кода (Lua) и симулятор. Вы можете изменить эмулируемое устройство. Основной код пишется в файле main.lua.

Создание элементов игры

Код ниже создает задний фон и сетку:

local background = display.newRect( 160, 250, 350, 550 )
background:setFillColor(1, 0.5, 0) -- оранжевый фон

local rectX, rectY = 160, 20
local rectWidth, rectHeight = 20, 20

for i = 1, 24 do
  local line = display.newRect( rectX, rectY + i * rectHeight, 2, rectHeight )
  line:setFillColor( 0.5, 0.5, 0.5 )
end

rectX, rectY = 20, 250
rectWidth, rectHeight = 20, 550

for i = 1, 26 do
  local line = display.newRect( rectX + i * rectWidth, rectY, rectWidth, 2 )
  line:setFillColor( 0.5, 0.5, 0.5 )
end

Этот код создаёт оранжевый фон и серую сетку.

Преграды и их анимация

Создадим преграды и функцию onUpdate для их движения:

local block1 = display.newRect( 160, 390, 50, 50 )
--Аналогично создаются остальные блоки (block2, block3, и т.д.)

local function onUpdate( event )
  block1.x = block1.x - 0.5
  --Аналогично для остальных блоков
  if block1.x <= -20 then
    block1.x = block7.x + 80 -- Предполагается, что block7 существует
    --Аналогично для остальных блоков
  end
end
Runtime:addEventListener( "enterFrame", onUpdate )

Код создаёт блоки-преграды и перемещает их влево. Если блок выходит за экран, он перемещается вправо.

Игровой персонаж (птица) и управление

Создадим птицу и обработчик касаний:

local bird = display.newRect( 40, 200, 20, 20 )
bird:setFillColor( 0, 0, 1 ) --Синий цвет

local birdSpeedUp = 13
local birdSpeedDown = 0.8

local function flyBird( event )
  if event.phase == "began" then
    birdSpeedDown = birdSpeedUp
  end
end
Runtime:addEventListener( "touch", flyBird )

local function onUpdate( event )
  if birdSpeedDown > 0 then
    bird.y = bird.y - birdSpeedDown
  end
  bird.y = bird.y + birdSpeedDown --Скорее всего, здесь ошибка: должно быть вычитание
  -- ... остальной код onUpdate
end

Птица создается синего цвета. При касании экрана она поднимается.

Физика и столкновения

Подключаем физический движок и обрабатываем столкновения:

local physics = require("physics")
physics.start()

physics.addBody( bird, { isSensor = true, gravityScale = 0, fixedRotation = true } )
physics.addBody( block1, "static" )
--Аналогично для остальных блоков
bird.id = "bird"
block1.id = "crash"
--Аналогично для остальных блоков

local function onCollision( self, event )
  if event.phase == "began" and self.id == "bird" and event.other.id == "crash" then
    endGame()
  end
end

local function onUpdate( event )
  if birdSpeedDown > 0 then
      bird.y = bird.y - birdSpeedDown;
  end
  bird.y = bird.y + birdSpeedDown;
  if bird.y < 0 or bird.y > 480 then
    endGame()
  end
  -- ... остальной код onUpdate
end

bird:addEventListener( "collision", onCollision )

Добавлена обработка столкновений птицы с преградами и границами экрана.

Завершение игры

Функция endGame завершает игру:

local function endGame()
  Runtime:removeEventListener( "enterFrame", onUpdate )
  Runtime:removeEventListener( "touch", flyBird )
  bird:removeEventListener( "collision", onCollision )
  local gameOverText = display.newText( "Вы проиграли!", 160, 100, native.systemFont, 32 )
  gameOverText:setFillColor( 0, 0, 0 )
end

В этом руководстве создана простая 2D игра с анимацией, управлением, столкновениями и завершением игры. Это базовый пример, который можно расширить.

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