Обучение технологиям в одном видеоуроке

16 уроков Консультации
/ Видеокурсы / Обучение технологиям в одном видеоуроке / Создание 2D игры за 25 минут на Corona SDK!

Создание 2D игры за 25 минут на Corona SDK!

Создание 2D игры за 25 минут на Corona SDK!


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

Видео урок:

- Скачать Corona SDK


Безусловно, есть такие игровые движки как Unity и Unreal, которые отлично подходят для 3D игр. Однако, Corona SDK это игровой движок для создания 2D игр и она является отличным конкурентов в этой сфере.


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


В редакторе есть встроенный симулятор, позволяющий посмотреть результат выполнения игры на большинстве популярных девайсов. Кроме того, здесь также есть Live Builds. Так, вы можете сделать Build игры, раскидать её по девайсам, которые у вас имеются и при изменении чего либо в игре сразу смотреть корректно ли это работает на ваших устройствах. 



По размеру игры получаются значительно меньше чем на том же Unity и производительные сразу без дополнительных усилий. Приятный бонус это сборка игры. Для того чтобы собрать игру вам не нужно скачивать и устанавливать что-либо дополнительно, игры собираются одним нажатием кнопки.


Имеется хорошая документация, а также отзывчивая тех-поддержка. Движок использовался в игре Rider от Ketchapp, Gunman Taco Truck, которая разработана Джоном Ромеро, программистом, известному по таким играм как Doom, Quake и Wolfenstein 3D, а также движок использовался во многих других играх.

Исходный код

Готовый код игры
-----------------------------------------------------------------------------------------
--
-- main.lua
--
-----------------------------------------------------------------------------------------

-- Your code here
local physics = require ("physics")
physics.start()

local background = display.newRect(160, 250, 350, 550)
background:setFillColor(0.4, 0.2, 0.3)

local hx = 160
local hy = 0
for i=1, 26 do
  local myGrid = display.newRect(hx, hy, 350, 2)
  myGrid:setFillColor(0.5,0.5,0.5)
  hy = hy + 20
end

local vx = 20
local vy = 250
for i=1, 16 do
  local myGrid = display.newRect(vx, vy, 2, 550)
  myGrid:setFillColor(0.5,0.5,0.5)
  vx = vx + 20
end

local block_1 = display.newRect(280, 390, 40, 280)
local block_2 = display.newRect(280, 50, 40, 150)

local block_3 = display.newRect(400, 430, 40, 280)
local block_4 = display.newRect(400, 70, 40, 190)

local block_5 = display.newRect(520, 470, 40, 280)
local block_6 = display.newRect(520, 100, 40, 250)

local block_7 = display.newRect(640, 510, 40, 280)
local block_8 = display.newRect(640, 120, 40, 290)

local bird = display.newRect(40, 200, 20, 20)
bird:setFillColor(0.5,0.7,0.9)

physics.addBody(bird)
bird.gravityScale = 0
bird.isFixedRotation = false
bird.isSensor = true

physics.addBody(block_1, "static")
physics.addBody(block_2, "static")
physics.addBody(block_3, "static")
physics.addBody(block_4, "static")
physics.addBody(block_5, "static")
physics.addBody(block_6, "static")
physics.addBody(block_7, "static")
physics.addBody(block_8, "static")

bird.ID = "Bird"
block_1.ID = "Crash"
block_2.ID = "Crash"
block_3.ID = "Crash"
block_4.ID = "Crash"
block_5.ID = "Crash"
block_6.ID = "Crash"
block_7.ID = "Crash"
block_8.ID = "Crash"

local moveDown = 4
local moveUp = 0
local function flapBird (event)
  if(event.phase == "began") then
    moveUp = 13
  end
end

local speed = 0.7
local function onUpdate (event)
  block_1.x = block_1.x - speed
  block_2.x = block_1.x - speed

  block_3.x = block_3.x - speed
  block_4.x = block_3.x - speed

  block_5.x = block_5.x - speed
  block_6.x = block_5.x - speed

  block_7.x = block_7.x - speed
  block_8.x = block_7.x - speed

  if(block_1.x <= -20) then
    block_1.x = block_7.x + 120
  elseif(block_3.x <= -20) then
    block_3.x = block_1.x + 120
  elseif(block_5.x <= -20) then
    block_5.x = block_3.x + 120
  elseif(block_7.x <= -20) then
    block_7.x = block_5.x + 120
  end

  if(moveUp > 0) then
    bird.y = bird.y - moveUp
    moveUp = moveUp - 0.8
  end
  bird.y = bird.y + moveDown

  if(bird.y < 0) then
    endGame()
  elseif(bird.y > 520) then
    endGame()
  end
end

local function onLocalCollision (self, event)
  if(event.phase == "began") then
    if(self.ID == "Bird" and event.other.ID == "Crash") then
      endGame()
    end
  end
end

function endGame ()
  bird:removeEventListener("collision", bird)
  Runtime:removeEventListener("enterFrame", onUpdate)
  background:removeEventListener("touch", flapBird)
  local text = display.newText("Вы проиграли!", 160, 100, font, 32)
  text:setFillColor(0,0,0)
end

bird.collision = onLocalCollision
bird:addEventListener("collision", bird)

Runtime:addEventListener("enterFrame", onUpdate)
background:addEventListener("touch", flapBird)

Также стоит посмотреть