Пишем Space Invaders при помощи Corona. Настройка проекта


Оглавление (нажмите, чтобы открыть):

Некое подобие Space Invaders

26.06.2020, 17:49

Реализация боев в Space Invaders
Здравствуйте. Мне нужно написать игру на Паскале наподобие Space Invaders, где несколько уровней.

некое подобие Everesta
Доброго времени суток! Пишу курсовую работу. Задание — создать программу на подобии Everesta.

Некое подобие склада
Подскажите, плз, как сделать! Сущ таблица Склад, Заказ. Для заполнения таблицы Заказ сущ Форма.

Классическая Space Invaders, «выпадение» кораблей из нижнего ряда
Подскажите, пожалуйста, как сделать, чтобы из нижнего ряда передвигающейся матрицы врагов с.

Некое подобие файловой системы
В моем представлении это должно выглядеть так. Сперва создается файл заданного размера. Далее.

Пишем Space Invaders при помощи Corona. Настройка проекта

Создадим папку с проектом и сделаем файл main.lua, в котором пропишем дефолтные три функции:

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
function love.load()

Я думаю вы знаете что они делают, иначе бы вы не зашли сюда. Теперь мы создадим таблицу с нашем героем, love.load пишем:

Тут все просто, мы создаем таблицу в который записаны будущие координаты по осям x,y и ширина с высотой. Давайте заставим его двигаться. В love.update(dt) пишем:

Тут так же все просто, мы проверяем нажатия клавиш и изменяем положение персонажа по оси x. Настало время нарисовать его, в love.draw:

200?’200px’:»+(this.scrollHeight+5)+’px’);»>
function love.draw()
love.graphics.setColor(0,0,255,255)
love.graphics.rectangle(«fill»,hero.x,hero.y,hero.w,hero.h)

love.graphics.setColor(0,255,0,255)
love.graphics.rectangle(«fill»,0,532,love.graphics:getWidth(),68)
end

Тут так же все просто, первой строчкой мы изменяем цвет в палитре RGB на синий, ведь Red Green Blue, первое значение отвечает за красный цвет, второе за зеленый, третье за синий и наконец четвертое за прозрачность. Дальше мы рисуем прямоугольник в координатах и с такой шириной/высотой, которые мы указали в love.load. Следующие строчки делают тоже самое, но ставят другой цвет и рисуют землю ниже нашего героя. ( метод love.graphics:getWidth() получает ширину экрана, полезная функция). Дальше мы сделаем врагов. В love.load добавляем:

for i =0,7 do
enemy = <>
enemy.w = 32
enemy.h = 16
enemy.x = i * (enemy.w + 50) + 100
enemy.y = 120
table.insert(enemies, enemy)
end

Тут чуть сложнее, мы создаем пустую таблицу, о ней чуть позже, а потом циклом создаем еще 8 в которых мы описываем наших врагов и потом вставляем это в нашу пустую таблицу. Думаю все понятно, теперь можно и нарисовать их. В love.draw добавляем:

Тут мы выставляем красный цвет и потом перебираем таблиц enemies и рисуем в нужных координатах, с нужной высотой/шириной.
Теперь пусть они начнут падать, в love.update(dt) пишем:

Тут мы перебираем таблицу enemies и и изменяем переменную y. Можно тестить.

Теперь мы подошли к финальной части нашего урока, стрельба. В love.load пишем:

Мы просто создаем пустую таблицу. Дальше дописываем функцию:

В ней мы проверяем нажатие пробела и дальше создаем новую таблицу с данными пули и запихиваем это в нашу пустую таблицу bullets
Теперь в love.update(dt) пишем:

Объяснять не буду, это было ранее. Теперь нарисуем их. love.draw:


Остался финальный штрих, столкновение пули и врага. Дописываем функцию взятую с вики.

Создаем игру Space Invaders на HTML5

В этих уроках создадим игру по типу Space Invaders на HTML5 и Javascript с помощью примитивов.

Создаем игру Space Invaders на HTML5 — 1 — Введение

Создаем игру Space Invaders на HTML5 — 2 — Цикл игры

Создаем игру Space Invaders на HTML5 — 3 — Игрок

Создаем игру Space Invaders на HTML5 — 4 — Стрельба

Создаем игру Space Invaders на HTML5 — 5 — Оптимизация

Создаем игру Space Invaders на HTML5 — 6 — Добавляем захватчиков

Создаем игру Space Invaders на HTML5 — 7 — Столкновения

Создаем игру Space Invaders на HTML5 — 8 — Стрельба Врагов

Создаем игру Space Invaders на HTML5 — 8.1 — Правим баг

Создаем игру Space Invaders на HTML5 — 9 — Добавляем звук

Создаем игру Space Invaders на HTML5 — X — Публикуем игру

Уроки iPhone SDK: Создаем аналог Doodle Jump для iPhone с помощью Corona SDK

Держу пари, что сегодня утром, когда вы проснулись, ваша первая мысль была: «Я хочу создать игру Doodle Jump и написать 300 строчек кода».

«Ах да, и я хочу чтобы игра работала на iPhone и Android и чтобы код был прост, как три копейки».

Ваше желание исполнится!

В этом уроке состоящим из 2-х частей мы сделаем игру на популярном и простом в использовании движке для iOS и Android под названием Corona. По окончании изучения этой серии уроков вы узнаете:

• Как создать игру с помощью Corona.
• Плюсы/Минусы Corona и cocos2d.
• Как делать уровни в LevelHelper.
• И, конечно же, как сделать игру на подобие Doodle Jump!

Этот туториал нацелен на новичков в Corona, но он будет полезен и более опытным девелоперам.

Так же, неплохо, если у вас есть опыт работы с LevelHelper и SpriteHelper. Однако, если эти названия вы слышите впервые, рекомендую ознакомиться с этим уроком. Не переживайте если у вас нет этих утилит или опыта работы с ними, т.к. вы сможете использовать готовые спрайт листы (sprite sheet) и уровни, если потребуется.

Ну что ж, начнем!

Хотя большинство из вас наверняка знакомы с cocos2d , вы можете ничего не знать о движке Corona.


Начнем с того, что же такое Corona.

Corona – это кросс платформенный игровой движок, поддерживающий платформу iOS и Android. Движок разработан компанией Ansca и для разработки вы можете использовать триальную версию Corona. Когда появится желание опубликовать свое приложение в App Store придется купить лицензию. Цена колеблется от 199$ до 349$.

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

В Corona есть симулятор для тестирования ваших приложений.

В Corona встроены некоторые API необходимые для программирования (спрайты, звук и т.д.) а так же доступны API от Apple включая Game Center, In App Purchase (продажа контента внутри приложения) и TableViews.

Так же есть ряд сторонних API таких как Open Feint, inMobi (реклама), Flurry (аналитика). Ко всем API от Apple у Corona доступа нет. Например не удастся воспользоваться iAds, Game Center Multyplayer и соединением по Bluetooth.

Теперь давайте поговорим о разнице между Corona и Cocos2D.

Прежде всего, Corona и Cocos2D имеют немало общего:

• Позиционировать спрайты в Corona очень просто. Нужно установить свойства .x/.y для спрайта.
• Есть масштаб, поворот и альфа свойства (alpha property) связывающие отображаемые объекты.
• Метод “transition.to”, который анимирует позицию, масштаб, поворот и т.д.
• Corona использует физический движок Box2D, поэтому методы и свойства должны быть вам знакомы, если вы использовали Box2D в cocos2d.
• Как и cocos2d, Corona использует спрайты, текстовые лейблы (text labels), методы рисование примитивов, но все это называется иначе. Любые объекты, которые появляются на экране имеют общее название “отображаемые объекты” (display objects), которые похожи на CCNode в Cocos2D. В Corona есть отображаемая группа (display group), которая функционально похожа на CCLayer в Cocos2D.

Помимо сходств, у этих движков есть существенные различия:

• В Cocos2D используется язык Objective-C, в то время как Corona использует Lua. API в Corona находятся под сильным влиянием Action Script. Flash разработчики считают Corona очень дружелюбной средой. Код в Corona может быть написан согласно модели ООП, но модель функционального программирования более распространена.
• Cocos2D позволяет интегрировать сторонние библиотеки написанные на Objective-C. Corona в свою очередь закрытая система. Хотя на Lua и написаны некоторые сторонние библиотеки, но в настоящее время для Corona их всего несколько.
• И, конечно же, Corona платная, а Cocos2D бесплатна.

Я знаю какой вопрос вас мучает – какой движок следует выбрать? Лучшим ответом станет список плюсов и минусов Corona по отношению к Cocos2D.

Время на разработку. Создание игр в Corona зачастую быстрее и проще чем в Cocos2D. Так как используется язык Lua, добвление переменной объекта не требует ничего более, чем назначение (например: Sprite.newvalue = 0). Движок Box2D интегрирован, так что спрайт объекта и физика тела это один объект. Вам не придется писать файлы интерфейста, декларировать дубликаты переменных или декларировать типы данных переменных (здесь есть некоторые исключения).
Кросс-платформенность. Если вы создаете игру в Corona, то она будет работать как на iOS так и на Android, как говориться “из коробки”.

Нехватка поддерживаемых API. Corona не имеет доступа ко всем API от Apple, или так много сторонних дополнений как Cocos2D. Сетовой мультиплеер должен быть написан с нуля. Проходит немало времени прежде чем интегрируются новые фишки от Apple.
Низкая производительность. Так как Corona работает с Lua, ваш код не будет работать так быстро как если бы использовался Objective-C.
Corona платная. За Corona придется заплатить, если вам нужно будет опубликовать приложение. Cocos2D — совершенно бесплатна.

Мастер Йода рекомендует:  Оптимизация кода для поисковых систем

Если Corona у вас еще не установлена, то скачивайте триал версию и установите. Триалка полностью функциональна, за исключением возможности публиковаться в App Store. Перейдите на сайт (http://coronalabs.com/products/corona-sdk/) и скачайте/установите Corona (нажмите “DOWNLOAD NOW” внизу. придется зарегистрироваться).

С Corona я работаю на Mac, но имейте ввиду, что вы можете пользоваться Corona и на PC. Однако, вы не сможете собрать iOS билд без Mac’а, только билд для Android.

Когда закончится установка, в папке Applications появится папка Corona. В этой папке лежат различные исполняемые файлы. Я рекомендую всегда запускать Corona выполняя Corona Terminal. Это откроет окно терминала вместе с Corona Simulator. Терминал даст вам лог ошибок или print().

Как упоминалось ранее, в Corona нет IDE. Я пишу большую часть кода в простом текстовом редакторе. Дебаггер мне кажется неудобным. Вы можете использовать Xcode как текстовый редактор, а так же для Corona есть плагины для подсветки кода, но они работают не со всеми версиями Xcode.

Итак, откройте новый текстовый файл и добавьте следующий код:

Как вы поняли, этот код выводит на экран надпись “Hello World” с позициями X=20 и Y=30 в 50-ти точках шрифтом Helvetica.

Сохраните свой текстовый файл. Он должен называться “main.lua”. Запомните, что этот файл является отправной точкой любой программы в Corona.

Откройте Corona Simulator, либо запустив Corona Simulatior.app, либо, как я рекомендовал через Corona Terminal. Перейдите File->Open, найдите ваш файл. Оба этих файла лежат в папке Corona в Applications.

Поздравляю, теперь вы разработчик Corona. Что может быть легче чем это? К вашему сведению, чтобы сделать билд для устройства в Corona, вам понадобится аккаунт Apple Developer.

Прежде чем мы перейдем к Doodle Jump, нам нужно создать спрайт лист. Так как мы собираемся использовать LevelHelper для создания уровней для игры, мы будем использовать SpriteHelper для создания спрайт листа.


Если у вас нет SpriteHelper’а не стоит волноваться, вы сможете воспользоваться готовым “спрайт листом” и перейти к следующему разделу.

Но если вы успели приобрести SpriteHelper, продолжайте читать по порядку.

Для этого проекта вам понадобятся некоторые ресурсы, так что скачивайте все по этой ссылке и распаковывайте. Внутри папки спрайтов вы увидите изображения, которые мы будем использовать. Бесплатный пак с изображениями предоставила Viki, жена Ray’а.

Теперь нужно настроить ряд атрибутов физики. Мне нравиться делать это с помощью Sprite Helper’а, но эти свойства позже могут быть установлены и в Level Helper’е. В этом уроке я покажу вам как устанавливать атрибуты в Level Helper’е. Углубляться в подробности использования SpriteHelper/LevelHelper мы не станем, так как эти вопросы были рассмотрены в соответствующем уроке — http://www.raywenderlich.com/4622/how-to-use-spritehelper-and-levelhelper-tutorial, на английском.

Запустите SpriteHelper и перетащите все спрайты в окно.

Выберите File-> Save, укажите директорию где лежит main.lua и введите как имя “cloudSprites”. Необходимые расширения будут добавлены автоматически. В итоге создастся три файла — cloudSprites-hd.png, cloudSprites.png и cloudSprites.pshs (проект SpriteHelper’а).

Теперь воспользуемся LevelHelper’ом для создания уровня игры. Напомню, если у вас нет указанной утилиты. Можете взять готовый уровень из необходимых ресурсов для игры о которых мы говорили ранее.

Если LevelHelper у вас есть, то запустите его и кликните “+” в Project. Введите cloudJumper и выберите “iPhone Portrait (320×480)” и нажмите “Create New Project”.

Внизу окна LevelHelper найдите раздел Game World Size и замените установленные значения на 0, 0, 320, 9600. Также добавьте эти значения в Physic Boundaries. Установите gravity на 0, -10.

Нажмите “+” возле выпадающего меню выбора сцены с правой стороны. Выберите файл cloudSprites.pshs, который недавно был создан SpriteHelper’ом. Теперь все ваши спрайты загружены в панель спрайтов.

Переместитесь в самый низ уровня.

Первое, что мы сделаем, это загрузим фоновые облака. Перетащите три облака – bg_cloud1, bg_cloud2 и bg_cloud3 в нижнюю секцию. Выделите все три спрайта.

Установите тип физики для облаков на “No Physic”. Установите свойство Z Order на “-2”. Мы хотим чтобы эти облака всегда были далеко на фоне.

С помощью инструмента Clone and Align сделайте 19 (или около того) копий всех трех спрайтов. Вы можете отступ по Y на “-480” чтобы разместить один блок облаков для каждого экрана. Следуйте по экрану и располагайте облака. Не зацикливайтесь на одних и тех же положениях, чтобы не выглядело одиникого.

Когда вы закончите, выделите все спрайты облаков и нажмите кнопку с замком. Теперь, когда кнопка нажата, спрайты не могут быть выбраны в макете. Это облегчает позиционирование других спрайтов поверх этих. Если необходимо подредактировать заблокированные спрайты, сделайте это в списке “Sprites in Level” и нажмите ту же кнопку, чтобы разблокировать их.

Теперь перетащите спрайты cloud1, cloud2 и cloud3 в низ уровня. Присвойте этим спрайтам свойства как показано ниже:

Несколько моментов на заметку. Все облака имеют значение “Z Order” -1. Это установит их поверх наших фоновых облаков, но позади всего остального. Белые и серые облака являются сенсорами (sensors). Мы будем пролетать через них и отскакивать только падая на них сверху. Синие облака не являются сенсорами, поэтому их придется избегать и это сделает игру сложнее.

На всех облаках в “Category Bit” стоит значение “1”. Нам нужно, чтобы монстры и стрелы двигались через них без столкновений, поэтому мы установим атрибуты маски этих объектов соответствующим образом. Убедитесь в правильности установленных значений в physic type, shape border и TAG. Не беспокойтесь если число в tag отличается от показанного выше, только имя имеет значение.

Если у вас есть вопросы касательно этих свойств, ознакомьтесь с этим уроком — http://www.raywenderlich.com/4622/how-to-use-spritehelper-and-levelhelper-tutorial, на английском.

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

Вот несколько советов по созданию уровней:

1. Уровень должен начинаться легко, чтобы игрок успел понять что от него требуется.
2. Уровни не должны повторяться.
3. Игрок прыгает примерно на 200 пикс. максимум, поэтому убедитесь, что он может прыгнуть с одной платформы на другую.
4. Серые облака – отвлекающий маневр, они исчезнут после приземления
5. Синие облака трудны тем, что игрок не может пройти через них и они узкие.
6. Пик сложности должен наступать ближе к концу уровня.

Если вы хотите использовать мой уровень, то возьмите его в ресурсах к проекту, однако, сделать самому гораздо веселее и интереснее.

Имейте ввиду, что если вы скачаете готовый уровень, он уже будет полностью завершен, т.е. все спрайты (монстры, игрок, тэги) будут установлены, так что некоторые моменты, которые мы будем разбирать ниже у вас будут уже сделаны. Если вы хотите пройти все по порядку и не тратить много времени на придумывание уровня, просто сделайте его маленьким (например 960 пикселей в высоту).


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

Игрок будет сталкиваться с облаками, монстрами, поэтому значение “Mask Bit” нужно установить на 5.

Теперь нам нужно сохранить уровень и сгенерировать код. Выберите File-> Save и назовите файл “level1”, остальные расширения будут созданы автоматически. Также выберите File->Generate Code->Corona, создастся файл LevelHelperLoader.lua. Этот файл надо перегенерировать всякий раз, когда мы добавляем новый TAG.

Положите эти файлы в ту же директорию где лежит main.lua.

1. Импортирует код физического движка и присваивает движок объекту называемый physics.
2. Запускает физический движок с дефолтными значениями гравитации. Corona использует физический движок Box2D, так что если вы использовали его ранее многое вам будет знакомо.
3. Скрывает статус бар.

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

Давайте попробуем. Добавьте новую функцию для загрузки уровня:

local function loadLevel()
localGroup = display.newGroup()
loader = LevelHelperLoader:initWithContentOfFile(«level1.plhs»)
loader:instantiateObjectsInGroup(physics, localGroup)

worldHeight = loader:getWorldBoundariesRect().size.height
localGroup.y = -worldHeight + 480

Первая строка загружает класс LevelHelperLoader (сгенерированный нами ранее или взятый вами из ресурсов для игры), который похож на #import в Objective-C.

Следующая строка создает функцию, которая в Lua делается с помощью ключевого слова “function”. Переменные и функции в Lua по умолчанию являются глобальными по своим масштабам. Если мы хотим уменьшить масштабы текущей функции нужно включать ключевое слово “local”.

Corona называет визуальные объекты (спрайты, нарисованные объекты, слои) “отображаемыми объектами”. Каждый из наших спрайтов, фоновые облака, игрок, платформы и т.д. являются отображаемыми объектами.

Функция в первой строке создает новую отображаемую группу, которая в функциях Corona похожа на CCLayer в Cocos2D. Мы собираемся добавить все содержимое нашего уровня к отображаемым группе.

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

В Corona нам необходимо только одно обращение/вызов (call) к LevelHelper, который создает все наши отоброжаемые объекты и создает соответствующие физическте тела. Физические тела в Corona автоматически соотносятся со своими спрайтами. Это делает создание физики в игре очень простой.

Вызов instantiateObjectsInGroup() имеет два параметр: наш физически движок объекта и отображаемая группа. Как только мы загрузим уровень в отображаемую группу, он будет виден на экране.

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

Мастер Йода рекомендует:  Что делать, если правительство отключает Интернет

Наши отображаемые объекты сейчас на экране и часть отображаемой группы называется localGroup. Однако, localGroup в данный момент находится на “y” на позиции “0″. Система координат в Corona берет отсчет в верхнем левом углу экрана и увеличивается в направлении к низу, это означает, что мы увидим самый верх нашего уровня или самый конец.

Нам нужно двигать отображаемую группу вверх, что и делают следующие две строчки кода. Сначала мы берем размер мира (world size), который мы установили в LevelHelper’е, затем мы устанавливаем localgroup.y на величину противоположную размеру мира, двигая это все вверх с минусом в одну высоту экрана.

Наконец мы создаем и инициализируем игрока. Этот код еще не добавлен, поэтому вставьте его прямо над loadLevel:

Получаем спрайт с уникальным именем “char_jump2”, который мы добавили на уровень созданный в LevelHelper.

Одна вещь, которую нужно иметь ввиду, что физическое тело уже связанно с ним. Так, в дальнейшем, у нас будет доступ к тем вызовам (calls), которые получают и устанавливают физические свойства.

Теперь, когда у нас на месте две эти функции, давайте использовать их! Добавьте следующую строку сразу после описания функции:

И это все! Сохраните main.lua, и поместите в один каталог с LevelHelperLoader.lua, cloudSprites.png, cloudSprites-hd.png, cloudSprites.pshs и level1.plhs. Затем запустите main.lua в Corona Simulator.


Вы должны увидеть облака и нашего героя падающего вниз:

Поздравляю, вы написали свою первую программу на Corona с главным героем и платформами!

Давайте двигаться дальше и сделаем так, чтобы игрок прыгал по облакам!

local function newPlayer()
local p = loader:spriteWithUniqueName(«char_jump2»)

local function pCollision(self, event)
object = event.other
if event.phase == «began» then
vx, vy = self:getLinearVelocity()
if vy > 0 then
if object.tag == LevelHelper_TAG.CLOUD then
self:setLinearVelocity(0, -350)
end
end
end
end
p.collision = pCollision
p:addEventListener(«collision», p)
return p
end

Вторая строка создает нашу callback-функцию столкновения. Второй параметр содержит информацию о событии столкновения (collision event).

Self — это объект игрока, а other эти тип события. Event.other — это объект с которым столкнулся self.

Затем нам нужно, чтобы прыжок делался только один раз. Столкновение может быть неоднократным, но нам нужен единичный прыжок с одним столкновением, так что мы будем проверять это на фазе “began”.

Затем мы проверяем должны ли мы прыгать. Мы берем линейную скорость (linear velocity) игрока и проверяем чтобы она была больше 0, потому что мы хотим прыгать только на обратном пути вниз, а не когда мы пролетаем через облака.

И наконец мы смотрим с чем мы столкнемся. Нам нужно отскакивать только от белых облаков, поэтому нам нужно проверять tag объекта с которым сталкиваемся.

Если все эти условия соблюдены, мы установим линейную скорость self до -350 или вверх до 350. Мы используем зедесь setLinearVelocity (вместо applyLinearImpulse), потому что неважно какой импульс мы получили падая вниз, нам нужно чтобы обратный прыжок был одинаковой высоты.

Наконец, мы собираемся установить только что созданную функцию, чтобы был обратный вызов столкновения (collision callback) для объекта игрока. Следующие две строчки делают это. С обратным вызовом столкновения (collision callback) мы установим свойство .collision и добавим слушателя события (event listener) к объекту.

Снова откройте проект в Corona Simulator. Теперь игрок должен отскакивать от белых облаков!

Я держу Corona Simulator открытым и использую сочетание клавиш Command-R чтобы перезагрузить проект после сохранения файла. Corona тоже обнаружит, что main.lua был обновлен и попросит вас о перезапуске.

Сейчас самое время поговорить подробнее об event listeners в Corona.

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

Event listeners в Corona это callback-методы. Есть event listener’ы, которые обрабатывают касания и акселерометр, изменение ориентации или инпут GPS, столкновения (collision), приостановка или выход из приложения и т.д.

Существует два вида слушателей события:
События, которые касаются всех объектов. Они известны как runtime events (события времени исполнения) и включают в себя такие события как изменение ориентации или инпут (input) от GPS. Другой пример – слушатель enterFrame, который является событием, которое вызывается каждый раз при отрисовки кадра.

События, которые адресованы отдельному объекту. Сюда включены события косания или столкновения (например, то, что мы использовали ранее).

В нашем случае мы создали функцию столкновения, функцию pCollision. Мы закреприли слушателя события за игроком, так что когда игрок сталкивается с другим объектом, этот объект будет вызываться. Функция имеет два параметра – объект self, в данном случае это игрок, и объект события. Объект события создан и содержит информацию о типе события столкновения.

Разные слушатели события имеют разные объекты события, которые предоставляют разную информацию. Например, есть тип события “postCollision”, который отвечает за силу столкновения. Обычное событие столкновения не имеет такой информации.

Для получения более развернутой информации о типах событий в Corona взгляните на этот документ (англ.).

Теперь, когда белые облака работают, можно заняться синими и серыми облаками. Синие облака фактически не требуют никакого дополнительного кода. Они совместно с белыми облаками используют тег CLOUD и являются статическими телами (подразумевается, что вы должны пройти вокруг них, а не через них, как в случае с белыми облаками).

Перейдите снова к функции pCollision и добавьте код показанный ниже:


Если тег BCLOUD, то нужно чтобы облако (серое) исчезло, поэтому мы вызываем loader:removeSpriteWithUniqueName и передаем имя объекта с которым столкнулись. Помните, что в нашем коде “object” это переменная где мы сохранили event.other.

Любовь витает в воздухе, а скоро полетят и стрелы.

Во-первых, давайте создадим анимацию стрельбы в LevelHelper.

Переключитесь назад в LevelHelper, выберите вкладку анимации справа и нажмите кнопку “New”, чтобы создать новую анимацию. Откроется окно “Animation Builder”. Добавьте спрайты под названием front_arm, arm_front_shoot1, arm_front_shoot2, и еще раз front_arm. Выделите указанные спрайты и нажмите кнопку “+”. Снимите галочку с “Loop Forever”. Остальные дефолтные настройки нам подходят.

Нажмите “Create Animation” для сохранения. Переименуйте анимацию в “shoot”.

Перетащите объект анимации на серую зону за уровнем. Куда угодно. Нам нужно, чтобы это было доступно в нашем коде, но в коде мы собираемся расположить руки вокруг игрока, поэтому нам это не нужно внутри уровня. Если мы не перетащим их в наш уровень, мы не получим указание на них в объекте загрузчика LevelHelper’а.

После того как вы перетащили ее на уровень, выделите объект анимации и установите тип физики на “No Physic”, чтобы избежать странного поведения физики, когда мы прикрепим это к игроку.

Вернитесь к списку спрайтов. Перетащите спрайт “back_arm” за пределы уровня. Установите новую анимацию (которая называется “front_arm” потому что это первый спрайт в сете) и в “back_arm” установите “No Physic”.

Здесь мы просто получаем переменные для каждой части игрока. В LevelHelper’е эти вызовы метода дают нам переменные, которые мы можем использовать, чтобы обратиться к этим объектам. Объекты созданы автоматически и добавлены за уровень LevelHelper, но нам нужна пересенная, чтобы обратиться к ним.

Строка Loader:pauseAnimationOnSprite (frontarm) не дает работать анимации, когда мы запускаем игру. Мы будем вызывать анимацию каждый раз, когда необходимо стрелять, но по умолчанию, анимация запускаеся автоматически при старте игры.

Игрок будет внутри вида, а вот руки нет. Чтобы поправить это мы создадим функцию enterFrame. enterFrame срабатывает всякий раз, когда отрисовывается экран. Эта функция буде перемещать руки и лук с нашим игроком каждый кадр. Так же, это заставит игрока смотреть в направлении движения.

Добавьте следующий код в конец функции newPlayer () перед строкой “return p”:

backarm.x = player.x
backarm.y = player.y
frontarm.x = player.x
frontarm.y = player.y

if self.x 320 then
self.x = 0
end

px, py = player:getLinearVelocity()
if px 0 then
frontarm.xScale = 1
backarm.xScale = 1
self.xScale = 1
end

Большая часть этого когда должна быть понятна.

Мы декларируем функции с префикстом p:. Когда мы создаем слушателя enterFrame для конкретного объекта, он должен называться “enterFrame” и он чувствителен к регистру.

Последний блок записывает линейную скорость игрока в переменных px и py. Затем, мы используем эту информацию для установки свойства XScale для всех трех.

Теперь мы должны добавть слушателя события enterFrame к объекту Runtime:

Если вы все сохраните и запустите, то увидите, что игрок вооружен и опасен!

Учебник по Corona SDK

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

многое переведено через гугл, но аккуратно, если есть другие уроки прошу скинуть , я добавлю в туториал (формат CHM)

Найдены возможные дубликаты


эм, чот страницы белые Win7x64

Правой кнопкой на файле, Свойства, Разблокировать. @asbcorps , в .zip надо засовывать .chm, обычная проблема.

Часто задаваемые вопросы

Corona правда бесплатный движок?

Corona, включая Corona Simulator и Corona Native, совершенно бесплатный. Мы также предлагаем ассортимент плагинов, расширяющих базовый функционал движка — большинство из них бесплатные, но некоторые нужно покупать, например Splash Screen Contol. Более того, в Маркетплейсе есть более 100 сторонних плагинов — многие из них также бесплатны, но на некоторых установлена цена, заданная их разработчиками.

Внимание: у Apple, Google и Amazon есть требования о наличии сертификата разработчика, чтобы публиковать приложения в их магазинах. Такие сертификаты вы оплачиваете сами.

Как удалить или изменить заставку Corona Labs?

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

В чем разница между базовым фреймворком Corona и Corona Native?

В базовом фреймворке Corona вы пишите код на Lua и используете Corona Simulator, чтобы тестировать и собирать приложения для последующего деплоя в магазины. Вы должны использовать встроенные API движка и плагины, и вам понадобится выход в интернет, чтобы осуществлять сборки для реальных устройств.

Мастер Йода рекомендует:  Новые социальные гаджеты от Google

Corona Native (доступен разработчикам для Windows и macOS) позволяет интегрировать проекты на Xcode или Android Studio в ваш код на Lua. Вы сможете использовать API и плагины Corona, но также — добавлять библиотеки через Objective-C и Swift для платформ Apple, Java — для Android и C / C++ — для обоих типов платформ. Вы сможете делать сборки в командной строке, и вам не нужен постоянный доступ к интернету.

Как мне получить движок?

Вы просто скачиваете его здесь. После загрузки и установки вы сразу сможете приступить к разработке приложений. Мы не поставляем дисков или других физических объектов.

На каких платформах работает Corona?

Corona работает на macOS и Windows, Corona Native — только на macOS.

Внимание: из-за ограничений Apple вы не можете создавать приложения для iOS, macOS, или tvOS, используя версию Corona для Windows. Но вы сможете использовать код Lua, написанный на машине с Windows, в Mac, если вы хотите работать на платформы Apple.

Для каких платформ я могу создавать приложения?

На данный момент Corona поддерживает разработку приложений для:

  • iOS
  • Android
  • Amazon Kindle
  • Windows desktop
  • macOS desktop
  • Apple TV
  • Android TV
  • Steam
  • HTML5 (BETA)

Почему Corona требуется выход в интернет, чтобы делать сборки?

Потому, что часть сборки выполняется на серверах Corona Labs. Однако мы никогда не видим ваш “исходный” код, изображения, звуки или другие данные. Когда вы запускаете онлайн-сборку, код Lua пре-компилируется в байткод перед отправкой на сервер (убираются комментарии, информация для отладки и т.п.). Сервер вставляет эти данные в движок Corona, но не сохраняет и не архивирует их. Когда сборка завершена — вы получаете приложение или исполняемый файл, как если бы вы использовали нативный SDK.

Что делать, если мне нужны офлайн-сборки?

Как мне рассказать вам о баге?


Пожалуйста, используйте для этого специальную форму. Чтобы мы смогли изолировать и проверить баг, мы просим вас приложить простой тестовый проект, который наглядно иллюстрирует проблему. Такой проект должен содержать файлы config.lua и main.lua, а также — дополнительные ресурсы, необходимые для демонстрации бага.

Внимание: мы не сможем обработать проекты, включающие сторонние продукты, так как именно они могут быть причиной проблемы. Если вам кажется, что так и есть — обратитесь непосредственно к разработчику этого продукта.

Публикует ли Corona Labs мои приложения?

Нет. Вы делаете приложение на фреймворке Corona и самостоятельно отсылаете его на Apple, Google или Amazon через их программы для разработчиков. Но мы работаем с паблишинг-партнерами и можем вам помочь. Если вас это заинтересовало — пишите на publishing@coronalabs.com.

Удерживает ли Corona Labs комиссию от дохода моих приложений?

Нет. Ваши приложения целиком принадлежат вам, и все договоренности по паблишингу заключаются непосредственно между вами и магазинами приложений.

Обеспечивает ли Corona Labs техподдержку?

Разработчики Corona могут обратиться за помощью к сообществу коллег через наш форум. Это коммьюнити очень активно, и зачастую там отвечают на все вопросы сразу после того, как их запостили. Команда движка также принимает активное участие в жизни форума и регулярно отвечает на вопросы наравне с другими пользователями.

Мы также предлагаем платную техподдержку. Она будет полезна разработчикам, которым требуется:

  • Выявление и решение проблем
  • Примеры кода
  • Отладка
  • Анализ кода

Предлагает ли Corona Labs обучение?

Да, мы предлагаем базовое персональное обучение для разработчиков, которые хотят начать работать с Corona. Перейдите на страницу Техподдержка и Обучение.

Как мне найти разработчика на Corona?

Мы рекомендуем сделать пост в ветке Corona Classifieds Jobs на форуме.

Corona не поддерживает функцию, которая мне нужна. Что делать?

Мы постоянно работаем над добавлением новых функций в движок. Если вам не хватает расширенной базы и плагинов, Corona Native позволяет интегрировать проекты на Xcode или Android Studio в ваш код на Lua. Вы также можете голосовать за нововведения на специальном сайте.

Если я использую Corona, нужно ли мне платить за программы для разработчиков Apple, Google и Amazon?

Да. Вы можете бесплатно использовать Corona для разработки приложений и тестировать их в Corona Simulator, но у Apple, Google и Amazon есть требования о присоединении к программам для разработчиков перед деплоем приложения в их магазинах. Такие программы подразумевают взносы, которые вы оплачиваете сами.

Что такое daily builds?

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

игра «Space Invaders». Нужна помощь.

В этой теме 6 ответов, 2 участника, последнее обновление Павел Букреев 3 года/лет, 6 мес. назад.

Не так давно начал прогать на C++/C#, не без помощи универа ��
В общем требуется сделать игру наподобие Space Invaders.
Игра без карты, поэтому надобность в Tiled Map Editor отпадает, игрок просто не может зайти за координаты, а цели при достижении определённых координат просто опускаются вниз и идут в обратную сторону.
Всё делал по примеру из видеоуроков, но пули почему-то не получается сделать, они даже не появляются нигде :C
И ещё наверное было бы неплохо цели как-то вручную в список занести, тк для каждой обновление действительно не совсем удобно и громоздко писать. Сейчас я для теста просто 8 штук сделал, а так их более 20 планируется сделать.
На данный момент имеется прямоугольный черный экран с анимированным корабликом с одной степенью свободы (управляется стрелочками) и 8 целей, которые спускаются зигзагом вниз (пока что бесконечно).


Сыграйте в Space Invaders, олдскульную игру, в терминале Linux

Joshua Kormik

Read more posts by this author.

Joshua Kormik

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

В этой статье мы расскажем вам, как играть в Space invaders терминале Linux; в бесплатную терминальную версию широкоизвестной GUI игры Space Invaders с открытым кодом.

Основная задача — защитить Землю от космических захватчиков (огромного количества пришельцев), управляя боевыми кораблями с Земли (нижняя часть экрана). До того как играть, Space Invaders нужно сначала установить ее с помощью терминала простым вводом данных команд (обратите внимание, что у вас должен быть включен universe репозиторий):

После установки в игру можно сыграть с помощью команды:

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

Используйте стрелки Влево и Вправо для передвижения боевого корабля. Стреляйте с помощью клавиши Пробел . От спускающихся кораблей можно просто уклониться или спрятаться за большими неподвижными блоками (зеленого цвета). Задача — убить всех пришельцев.

Вас может заинтересовать:

Вот и все! В этой статье мы рассмотрели, как играть в Sapce Invaders в командной строке Linux. Известны ли вам какие-нибудь интересные игры в терминале, в которые можно было бы поиграть для разнообразия на работе? Расскажите другим в комментариях!

Как настроить Corona Sky?

Всем привет! Я в короне новичок, поэтому простите, если вопрос тупой. Подскажите, как правильно настроить глобальное освещение, чтобы синева от Corona Sky не смешивалась с материалом стен. На стене в комнате материал светло-бежевой краски (почти белой), при рендере он становится с голубоватым оттенком. Если компенсировать балансом белого, то стена становится зеленоватой, в итоге реалистичного цвета стены не удаётся добиться.

Всем привет! Я в короне новичок, поэтому простите, если вопрос тупой. Подскажите, как правильно настроить глобальное освещение, чтобы синева от Corona Sky не смешивалась с материалом стен. На стене в комнате материал светло-бежевой краски (почти белой), при рендере он становится с голубоватым оттенком. Если компенсировать балансом белого, то стена становится зеленоватой, в итоге реалистичного цвета стены не удаётся добиться.

Через colorcorrect уберите насыщенность с карты corona sky. Но, возможно, Вы боритесь с физически корректными свойствами рендера.

Но, возможно, Вы боритесь с физически корректными свойствами рендера.

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

Corona SDK Разбираемся с Composer API

Композитор является официальным менеджером сцены в Corona SDK. Что это? Рассмотрим на примере приложения «Часы». В этом приложении TabBar в нижней части, позволяет переключаться между часами, таймером, Сикундомером. Каждая из этих утилит можно считать отдельной сценой в плане Composer. По существу, composer позволяет писать код для сцен в виде отдельных .lua файлов, по одному для каждой сцены. Затем она дает вам API для переключения сцен при необходимости.

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

В нашем приложении Часы мы будем использовать четыре отдельных .lua файла это:

Будьте внимательны старайтесь избегать имен файлов встроенных в библиотеки Corona SDK. Например, вы не должны называть сцены timer.lua или physics.lua . В приведенном выше примере, в нашем main.lua будет использоваться widget.newTabBar () и будет содержать код для вызова различных функций composer.gotoScene () которая будет нас перенаправлять на ту сцену которую мы выберем в нижнем тап-баре. Если вы хотите, увидеть в действии как работает composer можете ознакомится с этим примером с GitHub это образец бизнес приложения с возможностью публикации через rss канал, фотогаллереей и бидео которая использует стрим канала с youtube, также ест карты.

Для игр вы можете использовать такую структуру:

Добавить комментарий