Добро пожаловать в финальное руководство в нашей серии игр Frenzic like! В этом уроке мы рассмотрим логику блоков и шаги по созданию окончательного приложения.
Где мы остановились. , ,
Пожалуйста, ознакомьтесь с частью 1 и частью 2 серии, чтобы полностью понять этот учебник.
Шаг 1: функция размещения блоков
Эта функция запускается, когда игрок касается любого из квадратов контейнера. Он в основном проверяет, доступна ли правильная позиция для размещения квадрата, и устанавливает его, если это правда. Функция на следующем шаге вызывается при размещении блока.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
function placeBlock:tap(e)
eventTarget = e.target
— Check if position is available
local position = {currentXPosition, currentYPosition}
if(position[1] == 5 and position[2] == 5 and eventTarget.a == false) then
blocks[#blocks].x = eventTarget.x + position[1]
blocks[#blocks].y = eventTarget.y + position[2]
eventTarget.a = true
blockPlaced()
elseif(position[1] == 35 and position[2] == 5 and eventTarget.b == false) then
blocks[#blocks].x = eventTarget.x + position[1]
blocks[#blocks].y = eventTarget.y + position[2]
eventTarget.b = true
blockPlaced()
elseif(position[1] == 5 and position[2] == 35 and eventTarget.c == false) then
blocks[#blocks].x = eventTarget.x + position[1]
blocks[#blocks].y = eventTarget.y + position[2]
eventTarget.c = true
blockPlaced()
elseif(position[1] == 35 and position[2] == 35 and eventTarget.d == false) then
blocks[#blocks].x = eventTarget.x + position[1]
blocks[#blocks].y = eventTarget.y + position[2]
eventTarget.d = true
blockPlaced()
end
end
|
Шаг 2: Добавить блок в массив
Когда блок помещается в контейнер, мы добавляем блок в массив, который хранит записи о сохраненных блоках в этом контейнере. Это поможет нам определить, когда контейнер заполнен. Мы также воспроизводим звук и увеличиваем счет на единицу каждый раз, когда размещается блок.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
function blockPlaced()
— Push block to containers blocks array
if(eventTarget.name == ‘up’) then
table.insert(up.blocksGFX, blocks[#blocks])
up.blocks = up.blocks + 1
elseif(eventTarget.name == ‘right’) then
table.insert(right.blocksGFX, blocks[#blocks])
right.blocks = right.blocks + 1
elseif(eventTarget.name == ‘down’) then
table.insert(down.blocksGFX, blocks[#blocks])
down.blocks = down.blocks + 1
elseif(eventTarget.name == ‘left’) then
table.insert(left.blocksGFX, blocks[#blocks])
left.blocks = left.blocks + 1
end
— Score
score = score + 1
— Sound
media.playEventSound(‘bell.caf’)
|
Шаг 3: Полный контейнер (один цвет)
Следующий код проверяет, был ли контейнер заполнен одним цветным блоком с использованием массива контейнера. Это увеличивает счет на 150 и воспроизводит соответствующий звук. Функция для удаления блоков называется -мы создадим эту функцию на следующих шагах.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
|
if(up.blocks == 4) then
if(up.blocksGFX[1].name == up.blocksGFX[2].name and up.blocksGFX[2].name == up.blocksGFX[3].name and up.blocksGFX[3].name == up.blocksGFX[4].name) then
score = score + 150
complete()
end
elseif(right.blocks == 4) then
if(right.blocksGFX[1].name == right.blocksGFX[2].name and right.blocksGFX[2].name == right.blocksGFX[3].name and right.blocksGFX[3].name == right.blocksGFX[4].name) then
score = score + 150
complete()
end
elseif(down.blocks == 4) then
if(down.blocksGFX[1].name == down.blocksGFX[2].name and down.blocksGFX[2].name == down.blocksGFX[3].name and down.blocksGFX[3].name == down.blocksGFX[4].name) then
score = score + 150
complete()
end
elseif(left.blocks == 4) then
if(left.blocksGFX[1].name == left.blocksGFX[2].name and left.blocksGFX[2].name == left.blocksGFX[3].name and left.blocksGFX[3].name == left.blocksGFX[4].name) then
score = score + 150
complete()
end
end
|
Шаг 4: завершить контейнер
Этот код выполняется, когда контейнер заполнен, но блоки внутри него не одного цвета.
1
2
3
4
|
if(up.blocks == 4 or right.blocks == 4 or down.blocks == 4 or left.blocks == 4) then
score = score + 50
complete()
end
|
Шаг 5: Сброс таймера
После очистки полных контейнеров счет устанавливается на текстовое поле на этапе, таймер сбрасывается и вызывается другой блок.
1
2
3
4
5
6
|
scoreTF.text = score
timer.cancel(timerSource)
timerSource = nil
timerSource = timer.performWithDelay(3000, timesUp, 0)
newBlock(false)
end
|
Шаг 6: Удалить блоки
Эта функция очищает блоки в контейнерах и сбрасывает правильные переменные, чтобы подготовить контейнер к новым блокам.
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
function complete()
media.playEventSound(‘bell4.caf’)
removeBlocks()
eventTarget.a = false
eventTarget.b = false
eventTarget.c = false
eventTarget.d = false
end
function removeBlocks()
if(eventTarget.name == ‘up’) then
for i = 1, 4 do
display.remove(up.blocksGFX[i])
up.blocksGFX[i] = nil
end
up.blocks = 0
elseif(eventTarget.name == ‘right’) then
for i = 1, 4 do
display.remove(right.blocksGFX[i])
right.blocksGFX[i] = nil
end
right.blocks = 0
elseif(eventTarget.name == ‘down’) then
for i = 1, 4 do
display.remove(down.blocksGFX[i])
down.blocksGFX[i] = nil
end
down.blocks = 0
elseif(eventTarget.name == ‘left’) then
for i = 1, 4 do
display.remove(left.blocksGFX[i])
left.blocksGFX[i] = nil
end
left.blocks = 0
end
end
|
Шаг 7: оповещение
Функция оповещения запускается, когда у игрока нет жизни, она отображает окончательный счет и добавляет слушателя, чтобы вернуться на титульный экран.
01
02
03
04
05
06
07
08
09
10
11
12
13
|
function alert()
timer.cancel(timerSource)
timerSource = nil
native.showAlert( ‘Game Over’, ‘Your Score: ‘ .. score, {‘OK’}, alertHandler)
end
function alertHandler(e)
if(e.action == ‘clicked’) then
if (e.index == 1) then
restart()
end
end
end
|
Шаг 8: перезагрузите
Следующая функция перезагрузит игру и вернется в режим просмотра титров .
1
2
3
4
|
function restart(e)
display.remove(gameView)
Main()
end
|
Шаг 9: вызов основной функции
Чтобы изначально запустить игру, нужно вызвать функцию Main . С помощью приведенного выше кода мы сделаем это здесь:
1
|
Main()
|
Шаг 10: Экран загрузки
Файл Default.png — это изображение, которое будет отображаться сразу после запуска приложения, пока iOS загружает основные данные для отображения главного экрана. Добавьте это изображение в исходную папку вашего проекта, оно будет автоматически добавлено компилятором Corona.
Шаг 11: Иконка
Используя графику, созданную ранее, теперь вы можете создать красивый и красивый значок. Размер значка для iPhone без использования сетчатки составляет 57x57px, но для версии с сетчаткой — 114x114px, а для магазина iTunes требуется версия 512x512px. Я предлагаю сначала создать версию 512 × 512, а затем уменьшить ее для других размеров.
Для этого не нужно иметь закругленные углы или прозрачные блики, iTunes и iPhone сделают это за вас.
Шаг 12: Тестирование в симуляторе
Пришло время сделать финальный тест. Откройте Corona Simulator, перейдите в папку вашего проекта и нажмите «Открыть». Если все работает, как ожидалось, вы готовы к последнему шагу!
Шаг 13: Построить
В симуляторе Corona зайдите в File> Build и выберите ваше целевое устройство. Заполните необходимые данные и нажмите кнопку « Создать» . Подождите несколько секунд, и ваше приложение будет готово для тестирования устройства и / или отправки для распространения!
Вывод
Поэкспериментируйте с конечным результатом и попробуйте сделать свою собственную версию игры!
Надеюсь, вам понравился этот урок, и вы нашли его полезным. Спасибо за чтение!