Статьи

Как сделать игру как Doodle Jump с помощью Corona Tutorial Part 1

  1. Что такое корона?
  2. Корона против Cocos2D
  3. Начало работы с Corona
  4. Создание листа спрайта
  5. Создание уровня с помощью LevelHelper
  6. Добавление игрока
  7. Загрузка уровня
  8. Добавление столкновений и прыжков
  9. Слушатели событий в Короне
  10. Дополнительные коллизии
  11. Создание анимации съемки
  12. Добавление оружия
  13. Куда пойти отсюда?

Это сообщение в блоге от члена команды iOS Tutorial Team Якоб Гундерсен , инди-разработчик игр, который управляет Инди Амбиции блог. Проверьте его последнее приложение - Фактор Самурай!

Готов поспорить, что когда вы проснулись этим утром, вашей первой мыслью было: «Хотелось бы, чтобы был способ создать игру с каракули-прыжком в 300 строк кода».

«О, и я хочу, чтобы он работал на iOS и Android, и я хочу, чтобы код был действительно простым. И я хочу вишню сверху! »

Ну, ты довольно жадный, но тебе повезло. Желание исполнено! :]

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

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

Это руководство предназначено для начинающих пользователей Corona, но это нормально, если у вас есть некоторый предыдущий опыт.

Также лучше, если у вас есть опыт работы с LevelHelper и SpriteHelper - если вы новичок в этих инструментах, проверьте этот урок первый. Но не беспокойтесь, если у вас нет этих инструментов или нет большого опыта - вы можете использовать готовые спрайт-листы и уровни, если хотите.

Хорошо, так что возьмите Корону (или две) и начнем! :]

Что такое корона?

Это сообщение в блоге от члена команды iOS Tutorial Team   Якоб Гундерсен   , инди-разработчик игр, который управляет   Инди Амбиции   блог

Не такая корона!

Хотя большинство из вас на этом сайте, вероятно, знакомы с игровым движком Cocos2D (или пивом Corona), вы, возможно, еще не знакомы с игровым движком Corona.

Итак, начнем с того, что такое Corona!

Corona - кроссплатформенный игровой движок, поддерживающий Android и iOS. Он разработан компанией под названием Ansca, и вы можете использовать бесплатную пробную версию, чтобы опробовать Corona и разработать свою игру. Когда вы готовы к публикации, вам необходимо купить лицензию, цены варьируются от 199 до 349 долларов.

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

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

Существует также ряд сторонних разработчиков API, в том числе Open Feint (списки лидеров), inMobi (реклама) и Flurry (аналитика). Он не имеет доступа ко всем API Apple. Некоторые из известных API, не включенных в Corona, включают iAds, Game Center Multiplayer и доступ к Bluetooth-соединению.

Корона против Cocos2D

Корона против Cocos2D: Конечная битва?

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

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

  • Позиционировать спрайт в Corona легко, просто установите свойства спрайта .x / .y.
  • С экранными объектами связаны свойства масштаба, поворота и альфа-свойства.
  • Есть метод 'transition.to', который анимирует положение, масштаб, вращение и т. Д.
  • Corona использует физический движок Box2D, поэтому методы и свойства должны быть вам знакомы, если вы использовали Box2D с Cocos2D.
  • Как и Cocos2D, в Corona есть спрайты, текстовые метки и примитивные методы рисования, но они называются под разными именами. Любой объект, который появляется на экране, все вместе называется «экранным объектом», который похож на CCNode в Cocos2D. Corona имеет группу отображения, которая функционально очень похожа на CCLayer в Cocos2D.

Есть несколько существенных различий между двумя двигателями:

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

Итак, я знаю, что вы все задаетесь вопросом - какой из них вы должны выбрать, когда? Лучший способ ответить на этот вопрос - перечислить плюсы и минусы использования Corona вместо Cocos2D:

Плюсы:

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

Минусы:

  • Отсутствие поддержки API. Corona не имеет доступа ко всем API-интерфейсам Apple или таким сторонним расширениям, как Cocos2D. Некоторым областям, в которых Corona все еще не хватает, является простое сохранение данных (существуют методы для записи / чтения файлов и интеграция с Sqlite, но не такие удобные, как чтение списка в словарь). Сетевой многопользовательский код должен быть написан с нуля. Самый крутой новый материал от Apple требует времени, прежде чем он интегрируется, если вообще.
  • Более медленная производительность. Поскольку Corona построена поверх Lua, ваш код не будет работать так же быстро, как если бы это был прямой Objective-C.
  • Это платно. Да, вам нужно выкашливать деньги, чтобы использовать Corona, когда вы хотите отправить свою игру, тогда как Cocos2D великолепно бесплатен!

Независимо от того, уверены ли вы, что Corona для вас, пройти этот урок все еще хорошая идея, чтобы вы могли сами судить, что вам больше нравится! :]

Начало работы с Corona

Если у вас еще не установлена ​​Corona, начните с регистрации в Anscamobile и загрузки пробной версии Corona. Пробная версия полностью функциональна, единственное, что вы не можете сделать, - это опубликовать ее в магазине приложений. Посетить Страница подписки Corona зарегистрироваться / скачать (нажмите «загрузить пробную версию» внизу).

Я буду делать все мои инструкции, основанные на использовании Corona на Mac. Но имейте в виду, что вы также можете использовать Corona на ПК. Тем не менее, вы не можете собирать сборки iOS с ПК, только сборки Android. Если вы хотите узнать больше о том, как разрабатывать для Android на ПК, вы можете обратиться к anscamobile Вот ,

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

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

Откройте новый текстовый файл в предпочитаемом вами текстовом редакторе и добавьте следующий код:

display.newText («Hello World», 20, 160, «Helvetica», 50)

Как вы, вероятно, можете догадаться, на экране отображается строка текста «Hello World», в X = 20 и Y = 30, шрифтом Helvetica с 50 точками.

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

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

Поздравляю, теперь вы разработчик Corona. Это может быть легче, чем это ?!

К вашему сведению, для сборки устройства в Corona вам понадобится учетная запись Apple Developer и профиль обеспечения разработки (не профиль распространения, его можно создать только с профилем распространения, если вы платный подписчик). Если вы загрузите программу в Corona и зайдите в File-> Build-> iOS, вы получите диалоговое окно, которое позволит вам создать файл .app, который вы сможете установить на свое устройство через Xcode Organizer или iTunes.

Создание листа спрайта

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

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

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

Вам также понадобится ресурсы для этого проекта так что скачайте и распакуйте его. В папке спрайтов вы увидите искусство, которое мы собираемся использовать для этой игры - бесплатный художественный пакет сделано женой Рэя Vicki ,

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

Я не буду вдаваться в подробности, объясняющие, как использовать основные функции SpriteHelper / LevelHelper, поскольку эти темы были рассмотрены в SpriteHelper / LevelHelper учебник ,

Запустите SpriteHelper и перетащите все спрайты в окно. Снимите флажок обрезать спрайты и ударить их.

Выберите «Файл» -> «Сохранить», выберите каталог, в котором находится ваш main.lua, и введите «cloudSprites» в качестве имени - необходимые расширения будут добавлены автоматически. Он создаст для вас три файла - cloudSprites-hd.png, cloudSprites.png и cloudSprites.pshs (проект SpriteHelper).

Создание уровня с помощью LevelHelper

Далее мы будем использовать LevelHelper создать уровень для игры. Опять же, не беспокойтесь, если у вас нет LevelHelper - вы можете взять уровень, который я сделал из ресурсы для этого проекта и перейдите к следующему разделу.

Если у вас есть LevelHelper, откройте его и нажмите «плюс» в группе «Проект». Введите cloudJumper, выберите «Портрет iPhone (320 × 480)» и нажмите «Создать новый проект».

Введите cloudJumper, выберите «Портрет iPhone (320 × 480)» и нажмите «Создать новый проект»

В нижней части окна LevelHelper найдите поля «Размер игрового мира» и измените значения на 0, 0, 320, 9600. Также поместите эти значения в поля «Физические границы». Установите гравитацию на 0, -10.

Установите гравитацию на 0, -10

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

Вы можете перетащить уровень, удерживая нажатой клавишу управления при перетаскивании. Перейти к самому низу уровня.

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

Установите физический тип облаков на «Нет физики». Установите для свойства Z order значение -2. Мы хотим, чтобы эти облака всегда были на заднем плане.

Используя инструмент клонирования и выравнивания, сделайте 19 или около того клонов из всех трех облачных спрайтов. Вы можете установить смещение Y на -480, чтобы разместить один набор облаков для каждого экрана. Пройдите через экраны и раскройте облака, добавьте немного разнообразия, чтобы они выглядели хорошо.

Когда вы закончите, выберите все облачные спрайты и нажмите кнопку блокировки. Когда спрайт заблокирован, его нельзя выбрать в представлении макета. Это облегчает размещение других спрайтов поверх него. Если вам нужно отредактировать заблокированный спрайт, выберите его в списке «Спрайты на уровне» и нажмите ту же кнопку, чтобы разблокировать его.

Теперь перетащите спрайты cloud1, cloud2 и cloud3 в нижнюю часть уровня. Дайте этим спрайтам следующие физические атрибуты и теги:

cloud1

cloud1

Cloud2

Cloud2

Cloud3

Cloud3

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

У всех облаков есть бит категории 1. Мы хотим, чтобы стрелы и монстры проходили через них без столкновений, поэтому мы соответствующим образом установим наши атрибуты маски для этих объектов. Другие атрибуты, которые необходимо установить, - это физический тип, граница формы и свойство TAG. Не беспокойтесь, если ваши номера тегов отличаются от показанных здесь, имеет значение только название.

Если у вас есть вопросы о том, для чего эти свойства, проверьте SpriteHelper / LevelHelper учебник ,

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

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

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

Вот первые несколько экранов моего уровня:

Если вы хотите использовать мой уровень, он находится в ресурсы для этого проекта , хотя вы могли бы найти больше удовольствия и хорошей практики, чтобы сделать свой собственный!

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

Добавление игрока

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

Игрок будет сталкиваться с облачными платформами, монстрами и с формой окончания уровня, поэтому ему нужно значение бита маски 5 (1 и 4).

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

Поместите все эти файлы в тот же каталог, что и ваш main.lua.

Загрузка уровня

Давайте начнем с кода и через минуту вернемся к дизайну уровней. Удалите текущую строку кода в main.lua и замените ее следующим:

физика = требуется ("физика") phys.start () display.setStatusBar (display.HiddenStatusBar)

Файл main.lua будет выполняться сверху вниз. Эти первые три строки будут выполнены первыми, когда мы запустим Corona Simulator. Давайте рассмотрим эти строки за строкой:

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

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

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

require ("LevelHelperLoader") локальная функция loadLevel () localGroup = display.newGroup () loader = LevelHelperLoader: initWithContentOfFile ("level1.plhs") loader: instantiateObjectsInGroup (физика, локальная группа) worldHeight = loader: getWorldGound. .y = -worldHeight + 480 player = newPlayer () end

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

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

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

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

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

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

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

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

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

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

Наконец, мы создаем и инициализируем проигрыватель и назначаем его переменной проигрывателя с помощью вызова функции newPlayer (). Мы еще не написали это, поэтому добавьте это прямо над loadLevel:

локальная функция newPlayer () local p = loader: spriteWithUniqueName ("char_jump2") возвращает p end

Это просто получает спрайт с уникальным именем «char_jump2», который мы добавили к уровню, который мы создали с помощью LevelHelper, аналогично тому, как мы это делали в Как использовать SpriteHelper и LevelHelper Tutorial с Cocos2D.

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

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

loadLevel ()

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

Затем вы должны увидеть облака и ваш персонаж упадет с экрана:

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

Давайте двигаться дальше и заставим персонажа спрыгнуть с облаков!

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

Чтобы добавить прыжки, измените функцию newPlayer, добавив обработчик столкновений следующим образом:

локальная функция newPlayer () локальная p = loader: spriteWithUniqueName ("char_jump2") локальная функция pCollision (self, event) object = event.other if > 0 тогда если object.tag == LevelHelper_TAG.CLOUD тогда self: setLinearVelocity (0, -350) end end end end end p.collision = pCollision p: addEventListener ("collision", p) возвращает p end

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

Self - объект игрока, а other - тип события. Event.other - это объект, с которым столкнулся self, и поэтому мы захотим использовать его позже, мы сохраним его в переменной объекта.

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

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

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

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

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

Иди и открой проект еще раз в Corona Simulator. Ваш игрок должен теперь отбиваться от белых облаков!

Ваш игрок должен теперь отбиваться от белых облаков

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

Слушатели событий в Короне

Возможно, сейчас самое время дать общее объяснение слушателям событий в Короне.

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

Слушатели событий являются методами обратного вызова Corona. Существуют прослушиватели событий, которые обрабатывают сенсорный ввод и ввод акселерометра, изменение ориентации, ввод данных из системы GPS, столкновения, выход из приложения или его приостановку и т. Д.

Есть два вида слушателей событий:

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

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

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

Для получения дополнительной информации о типах событий Corona, перейдите Вот ,

Дополнительные коллизии

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

Перейдите в функцию pCollision еще раз и добавьте дополнительный код, чтобы он выглядел так:

если event.phase == "начался", то vx, vy = self: getLinearVelocity () если vy> 0, тогда если object.tag == LevelHelper_TAG.CLOUD, то self: setLinearVelocity (0, -350) elseif object.tag == LevelHelper_TAG .BCLOUD затем загрузчик: removeSpriteWithUniqueName (object.uniqueName) конец конец конец

Если тегом является BCLOUD, то мы хотим, чтобы серое облако исчезло, поэтому мы вызываем loader: removeSpriteWithUniqueName и передаем имя объекта, с которым мы столкнулись. Помните, что здесь, в нашем коде, «объект» - это переменная, в которой мы сохранили событие.

Создание анимации съемки

Любовь в воздухе - и скоро будут и стрелы! :]

Но обо всем по порядку - давайте создадим анимацию для съемки в LevelHelper.

Вернитесь к LevelHelper, выберите вкладку анимации справа и нажмите кнопку «Создать», чтобы создать новую анимацию. Это вызовет диалог строителя анимации. Добавьте спрайты с именами front_arm, arm_front_shoot1, arm_front_shoot2 и дополнительный front_arm в список, выбрав их и нажав кнопку «плюс». Снимите флажок Значения по умолчанию подходят для остальных атрибутов.

Нажмите «Создать анимацию», чтобы сохранить. Переименуйте анимацию, чтобы «снимать», дважды щелкнув по ней.

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

После того, как вы перетащите его на уровень, выберите объект анимации и установите тип «Физика» на «Нет физики», чтобы избежать странного поведения физики, когда мы присоединяем его к герою.

Добавление оружия

Нажмите кнопку спрайта, чтобы вернуться к списку спрайтов. Перетащите спрайт back_arm за пределы уровня. Установите новую анимацию (которая называется «front_arm», потому что это первый спрайт в наборе) и «back_arm» на «No Physic».

Измените код в функции newPlayer, чтобы он выглядел так:

локальное backarm = загрузчик: spriteWithUniqueName ("back_arm") локальное p = загрузчик: spriteWithUniqueName ("char_jump2") локальное frontarm = загрузчик: spriteWithUniqueName ("front_arm") загрузчик: pauseAnimationOnSprite (frontarm)

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

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

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

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

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

функция p: enterFrame (событие) backarm.x = player.x backarm.y = player.y frontarm.x = player.x frontarm.y = player.y, если self.x <0, тогда self.x = 320 завершается, если self .x> 320, затем self.x = 0 end px, py = player: getLinearVelocity (), если px <0, то frontarm.xScale = -1 backarm.xScale = -1 self.xScale = -1, еслиifix> 0, то frontarm. xScale = 1 backarm.xScale = 1 self.xScale = 1 end end

Большая часть этого кода должна легко следовать.

Мы объявляем функцию с префиксом p :. Функция, объявленная с объявлением object: functionName, дает нам доступ к переменной «self», которая ссылается на объект, для которого мы объявили функцию. Когда мы создаем приемник enterFrame для определенного объекта, он должен называться 'enterFrame' и чувствителен к регистру.

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

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

Время выполнения: addEventListener ("enterFrame", p)

Runtime - системный объект, созданный Corona. Мы создаем глобальных слушателей, регистрируя их с помощью этого объекта.

Если вы сохраните и бежите сейчас, ваш игрок будет иметь оружие. Вооружен и опасен. , , Ура!

Куда пойти отсюда?

Здесь пример проекта со всем кодом из учебника до сих пор.

Проверять, выписываться часть вторая из учебника, где мы будем стрелять стрелами, перемещать экран и создавать монстров в кратчайшие сроки! :]

Если вы хотите узнать больше о Corona, вы можете обратиться к следующим ресурсам:

Кроме того, если у вас есть какие-либо вопросы или комментарии об этом руководстве, присоединяйтесь к обсуждению на форуме ниже!

Это сообщение в блоге от члена команды iOS Tutorial Team   Якоб Гундерсен   , инди-разработчик игр и соучредитель   Третьи железнодорожные игры   ,  Проверьте его последнее приложение -   Фактор Самурай Это сообщение в блоге от члена команды iOS Tutorial Team Якоб Гундерсен , инди-разработчик игр и соучредитель Третьи железнодорожные игры , Проверьте его последнее приложение - Фактор Самурай!

Похожие

Учебник по Google Maps iOS SDK: начало работы
Примечание об обновлении : Рон Клиффер обновил этот учебник до Xcode 9.2, iOS 11.2, Swift 4 и Google Maps SDK 2.5.0. Оригинальное руководство было написано Роном Клиффером. До iOS 5 Google Maps были неотъемлемой частью iOS и были механизмом картирования,
Что такое базовые версии в System Center Configuration Manager (текущая ветка)
Примечание. Последнее сообщение этого блога было обновлено в 2019/4/2 и содержит информацию о последней базовой версии 1902 года. Microsoft недавно выпустила System Center Configuration Manager (текущая ветвь) версии 1902 . Вы можете прочитать официальное объявление Вот и для подробного списка того, что нового
10 вещей, которые вы можете сделать с Joomla
Joomla
Обзор Microsoft Lumia 435
Что такое Microsoft Lumia 435? Microsoft Lumia 435 - это компактный, многофункциональный бюджетный 4-дюймовый мобильный телефон для владельцев смартфонов впервые или для тех, кто хочет простой смартфон по низкой цене. Это всего лишь 59 фунтов стерлингов без SIM-карты или менее 50 фунтов стерлингов при оплате по мере необходимости - это примерно так же дешево, как и смартфоны. Несмотря на то, что Lumia 435 является самым дешевым телефоном от Microsoft, он все же обладает
... спользовал бета-версию Google Maps Navigation на своем Google Nexus One, и она показала себя очень ...
... спользовал бета-версию Google Maps Navigation на своем Google Nexus One, и она показала себя очень хорошо, особенно для бесплатного голосового навигационного клиента"> Я использовал бета-версию Google Maps Navigation на своем Google Nexus One, и она показала себя очень хорошо, особенно для бесплатного голосового навигационного клиента. Одним из аспектов этого решения является то, что вы должны быть подключены к вашей беспроводной операторской сети, чтобы использовать Google Maps Navigation.
Cryptojacking - Cryptomining в браузере
Вступление Cryptomining это процесс, с помощью которого транзакции криптовалюты проверяются и добавляются в открытую книгу, известную как blockchain , В то же время криптование также является средством, с помощью которого выпускаются новые криптовалютные монеты. Криптомайнинг выгоден своему
Как перемещаться по FIDO U2F в Firefox Quantum
Firefox Quantum это новейший интернет-браузер, изначально поддерживающий устройства FIDO Universal 2nd Factor (U2F), и мы не могли бы быть более взволнованы, увидев это улучшение! Теперь, когда Mozilla прыгает на борт, миллионы пользователей Firefox могут начать испытывать простоту использования и безопасность аутентификации YubiKey и U2F ... с одним небольшим предостережением. FIDO U2F не включен по умолчанию
25 вещей, которые вы можете сделать с VLC Media Player!
Несомненно, VLC - самый популярный кроссплатформенный медиаплеер с открытым исходным кодом и мультимедийная инфраструктура, созданная проектами VideoLAN. VLC плеер небольшой по размеру, всего около 17 Мб и невероятно мощный! В этом посте мы рассмотрим плеер и перечислим более 25 вещей, которые вы можете делать с VLC player. 1- Запустите / установите VLC с флешек VLC может быть установлен или запущен непосредственно с флэш-памяти или другого внешнего
Как оплатить игры в интернете с помощью быстрых платежей?
В настоящее время все больше и больше разработчиков игр предпочитают разнообразить свои игры дополнениями, за которые платят реальные деньги. Эти транзакции могут выполняться все больше и больше - быстрее, проще и удобнее. Почти все онлайн-игры предлагают варианты покупки внутренней валюты за деньги. Нельзя купить различные аксессуары: скины (альтернативные костюмы для персонажей и предметов), лутбоксы (коробки со случайным контентом, ценные во вселенной игры), полезные или необходимые
Запрет всей страны с помощью IPTables / IPSet |
... стой идеей. Запретить когда-либо всей стране пользоваться услугами одного из моих общедоступных серверов. Я бы никогда не предложил и даже не согласился с такой идеей. Это было давным-давно, и теперь ландшафт Интернета настолько изменился, что я решил использовать это простое, но очень эффективное решение. Я имею в виду, это идет вразрез с основной природой существования Интернета; Информация хочет быть бесплатной, и она должна быть доступна всем, кто хочет получить к ней доступ, в любой
Что такое ошибка 400 Bad Request (и как я могу ее исправить)?
Ошибка 400 Bad Request возникает, когда запрос, отправленный на сервер веб-сайта, неверен или поврежден, а сервер, получающий запрос, не может его понять. Иногда проблема заключается в самом веб-сайте, и вы ничего не можете с

Комментарии

Что такое коробка Kodi?
Что такое коробка Kodi? Kodi Box, рекламируемый за возможность Plug and Play, по сути, является приставкой или палкой HDMI с установленным на ней программным обеспечением. Это позволяет людям транслировать шоу и смотреть их на любой платформе, включая компьютер, смартфон, планшет или телеприставку. Но некоторые боксы модифицируются для доступа к платным каналам контента с использованием сторонних плагинов, что позволяет нелегально людям смотреть шоу без оплаты.
Мимо проходил юноша, который подбежал к нам и сказал:" Что же вы такое делаете?
Мимо проходил юноша, который подбежал к нам и сказал:" Что же вы такое делаете? Что вы себе позволяете? ". В этот момент мне удалось от него как-то убежать, я побежала в сторону машин, которые были припаркованы около Новинского бульвара. Там стояли наши коллеги. Я забежала к ним в машину». После того, как Меладзе уехал, пострадавшая отправилась жаловаться полицию. "Мне пообещали, что ситуацию без внимания не оставят. Будут изъяты видео с камер внешнего наблюдения, показания и фото
Или есть большой двор для развлечений, но освещение не что иное, как?
Или есть большой двор для развлечений, но освещение не что иное, как? Если вы похожи на меня и большую часть ночи оказываетесь в темноте и не можете наслаждаться своим пространством, читайте дальше о некоторых блестящих и уникальных способах украсить вашу ситуацию с помощью некоторых удивительных решения для освещения заднего двора , ИЩЕТЕ СЕВЕРНОЕ ЛЕСНОЕ ВДОХНОВЕНИЕ?
Однако как мы можем быть уверены, что данная еда подходит для нашего ребенка?
Однако как мы можем быть уверены, что данная еда подходит для нашего ребенка? К сожалению, результаты недавних исследований показали разрушительную правду. Оказывается, более 60% детских товаров содержат мышьяк - химический элемент из группы нитритов.
Что с этим можно сделать?
Что с этим можно сделать? Согласие пользователя и возможность отказа. После обширного злоупотребления Coinhive компания, стоящая за ним, выпустила новую версию под названием «Authedmine», которая явно требует согласия пользователя перед началом криптомайнинга. Законные компании, которые выбирают решения, подобные Coinhive, должны запросить согласие пользователя перед запуском любого криптоминирующего кода в своих браузерах, предлагая при этом также возможность отказаться.
Но что делает карту Nvidia RTX лучше, чем обычную старую GTX, и как они складываются по сравнению со всем остальным?
Но что делает карту Nvidia RTX лучше, чем обычную старую GTX, и как они складываются по сравнению со всем остальным? И что это за ерунда о Тьюринге, трассировке лучей и DLSS? В этом руководстве я раскрою все. К тому времени, когда мы закончим, вы будете знать все, что нужно знать о RTX-картах Nvidia, что на самом деле означает трассировка лучей и DLSS, и (надеюсь), какую карту вы должны выбрать для своего следующего обновления. Так давай взломать, ладно? Nvidia RTX: что это такое
Что такое Microsoft Lumia 435?
Что такое Microsoft Lumia 435? Microsoft Lumia 435 - это компактный, многофункциональный бюджетный 4-дюймовый мобильный телефон для владельцев смартфонов впервые или для тех, кто хочет простой смартфон по низкой цене. Это всего лишь 59 фунтов стерлингов без SIM-карты или менее 50 фунтов стерлингов при оплате по мере необходимости - это примерно так же дешево, как и смартфоны. Несмотря на то, что Lumia 435 является самым дешевым телефоном от Microsoft, он все же обладает некоторыми
Что в этом для педагогов?
Что в этом для педагогов? Эта статья больше фокусируется на Windows 10 S с точки зрения потребителя, но Microsoft поддерживает Windows 10 S push с многочисленными преимуществами для школ.
Если вы являетесь продавцом садового разбрызгивателя, вы можете опубликовать статью на одной из своих подстраниц, озаглавленную «Что такое садовый разбрызгиватель?
Если вы являетесь продавцом садового разбрызгивателя, вы можете опубликовать статью на одной из своих подстраниц, озаглавленную «Что такое садовый разбрызгиватель?» Или «Как это работает ...?». Люди, интересующиеся этой темой, могут вводить похожие запросы в поисковую систему Google и таким образом попадать на ваш сайт. Согласно исследованиям, проведенным SENUTO Наиболее частые запросы, вводимые пользователями в
Что такое ошибка 400 Bad Request?
Что такое ошибка 400 Bad Request? Ошибка 400 Bad Request происходит, когда сервер не может понять запрос, который был сделан из него. Это называется ошибкой 400, потому что это код состояния HTTP, который веб-сервер использует для описания такого рода ошибок. Ошибка 400 Bad Request может возникнуть из-за простой ошибки в запросе. Возможно, вы неправильно набрали URL, и сервер не может вернуть
Что вы думаете о том, что Apple Watch могут оставаться привязанными к iPhone через Wi-Fi, когда телефон находится за пределами диапазона Bluetooth?
Что вы думаете о том, что Apple Watch могут оставаться привязанными к iPhone через Wi-Fi, когда телефон находится за пределами диапазона Bluetooth?

Что такое корона?
Что такое корона?
Итак, я знаю, что вы все задаетесь вопросом - какой из них вы должны выбрать, когда?
Это может быть легче, чем это ?
Куда пойти отсюда?
Что такое коробка Kodi?
Мимо проходил юноша, который подбежал к нам и сказал:" Что же вы такое делаете?
Мимо проходил юноша, который подбежал к нам и сказал:" Что же вы такое делаете?
Что вы себе позволяете?
Или есть большой двор для развлечений, но освещение не что иное, как?

Новости