Статьи

Corona SDK: создание фона прокрутки

Corona SDK упрощает разработку игр для iPhone, iPad и Android. Corona использует язык программирования Lua для создания кроссплатформенных приложений. В этом уроке мы рассмотрим, как создать фон прокрутки с помощью Corona SDK.

фон прокрутки Corona SDK

Corona SDK позволяет очень просто создавать динамические эффекты с помощью всего лишь нескольких строк кода. Используя Corona SDK, мы создадим прокручивающийся 2D-фон с графикой, которую мы создаем в Photoshop. Этот учебник не будет охватывать проектирование для конкретного устройства. Вместо этого фон прокрутки, который мы создаем, можно использовать для платформ iPhone, iPad или Android.

Используя Photoshop, мы собираемся использовать инструмент Custom Shape Tool, чтобы создать звезды для нашего фона. Хотя теоретически вы можете использовать любую форму для фона, этот урок покажет, как создать фон «звездной ночи».

Открыв Photoshop, создайте новый документ размером 45×45 пикселей.

Выберите инструмент Custom Shape Tool и выберите 5-точечную звезду в качестве пользовательской фигуры. Если вы не можете найти 5-звездочную звезду, возможно, вам придется добавить список в список фигур.

фон прокрутки Corona SDK

После того, как вы выбрали 5-звездочную звезду, убедитесь, что ваш цвет переднего плана белый, и нарисуйте звезду на новом слое.

фон прокрутки Corona SDK

Теперь, когда мы нарисовали звезду, используйте инструмент «Сохранить для Web и устройств», чтобы сохранить звезду в 3 различных размерах:

Star1.png 45×45 пикселей
Star2.png 30×30 пикселей
Star3.png 15×15 пикселей

С нашей графикой мы можем начать создавать фон прокрутки. Давайте начнем с открытия предпочитаемого вами редактора Lua и создания нового документа с именем main.lua .

Наш первый шаг — скрыть строку состояния. Строка состояния — это строка в верхней части экрана, которая предоставляет пользователю такую ​​информацию, как уровень сигнала или уровень заряда батареи.

1
display.setStatusBar( display.HiddenStatusBar );

Теперь мы настроим некоторые переменные, которые будут использоваться в нашей программе.

1
2
3
_W = display.contentWidth;
_H = display.contentHeight;
local starTable = {} — Set up star table

После того, как мы инициализировали некоторые глобальные переменные, мы собираемся вставить звездные объекты в starTable. В этой таблице мы идентифицируем траекторию изображения звезд и скорость движения каждой звезды. Затем мы вставляем звезду в starTable.

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

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
function initStar()
    local star1 = {}
    star1.imgpath = «star1.png»;
    star1.movementSpeed = 10000;
    table.insert(starTable, star1);
     
    local star2 = {}
    star2.imgpath = «star2.png»;
    star2.movementSpeed = 12000;
    table.insert(starTable, star2);
     
    local star3 = {}
    star3.imgpath = «star3.png»;
    star3.movementSpeed = 14000;
    table.insert(starTable, star3);
end

Функция getRandomStar возвращает случайный звездный объект из starTable. Как только функция получает звезду, мы устанавливаем путь к изображению, имя звезды и скорость, с которой звезда будет двигаться. Вот как выглядит полная функция.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
    function getRandomStar()
    local temp = starTable[math.random(1, #starTable)]
    local randomStar = display.newImage(temp.imgpath)
    physics.addBody(randomStar, { isSensor = true } )
    randomStar.myName = «star»
    randomStar.movementSpeed = temp.movementSpeed;
randomStar.x = math.random(0,_W)
    randomStar.y = _H + 50
    randomStar.rotation = math.random(0,360)
    starMove = transition.to(randomStar, {
        time=randomStar.movementSpeed,
        y=-45,
        onComplete = function(self) self.parent:remove(self);
        })
end

Первая строка получает случайную звезду из starTable и сохраняет ее в локальной переменной randomStar.

1
local temp = starTable[math.random(1, #starTable)]

После того, как мы получим случайную звезду, мы установим путь к изображению звезды.

1
local randomStar = display.newImage(temp.imgpath)

Теперь мы установим имя звездного объекта на «звезда», а скорость движения будет установлена ​​в соответствии со скоростью случайной звезды, которую мы извлекли из starTable.

1
2
randomStar.myName = «star»
randomStar.movementSpeed = temp.movementSpeed;

Начальной точкой звезды будет случайная позиция X в нижней части экрана. Звезда также начнет с экрана для более плавного перехода в видимую область экрана. Мы также случайным образом поворачиваем каждую звезду, чтобы добавить дисперсию к фону.

1
2
3
randomStar.x = math.random(0,_W)
randomStar.y = _H + 50
randomStar.rotation = math.random(0,360)

После того, как звезда установлена, мы можем использовать метод transition.to (), чтобы переместить звезду к верхней части экрана. Звездный объект будет тогда удален из памяти, когда он достигнет своей конечной точки.

1
2
3
4
5
starMove = transition.to(randomStar, {
        time=randomStar.movementSpeed,
        y=-45,
        onComplete = function(self) self.parent:remove(self);
        })

Эта функция устанавливает три таймера, которые будут вызывать функцию getRandomStar, чтобы сгенерировать звездный объект и начать движение звезды к верхней части экрана.

Первый параметр в timer.performWithDelay — это задержка, которая определяет, сколько раз будет вызван таймер. Второй параметр — это функция, которая будет вызываться, а последний параметр — количество вызовов таймера. Значение «0» указывает таймеру зацикливаться вечно.

1
2
3
4
5
function startGame()
    starTimer1 = timer.performWithDelay(1700,getRandomStar, 0)
    starTimer2 = timer.performWithDelay(2300,getRandomStar, 0)
    starTimer3 = timer.performWithDelay(2700,getRandomStar, 0)
end

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

1
2
    initStar()
startGame()

Вы можете использовать 2D прокрутку фона в различных играх, а использование прокрутки фона — это простой способ сделать игры более динамичными. Попробуйте поменять звезды на облака, листья или что-нибудь еще, о чем вы только можете подумать!

Спасибо за чтение!