Corona SDK

Corona SDK

Corona SDC1Current Public Release (2017.3075)
This is the complete list of Lua APIs for Corona SDK.
If you're new, download Corona SDK and proceed to the Getting Started series. There are also numerous guides on specific topics.
If you're looking to extend Corona SDK beyond the functionality provided by these Lua APIs, please see the Corona Enterprise documentation.
To obtain the most recent builds of Corona SDK, browse the latest daily builds and corresponding documentation.
To download this documentation for offline viewing, please click here.

Эти проекты являются забавным и простым способамом, чтобы начать работу с Corona SDK. Используйте их в качестве основы, чтобы начать работу с Corona SDK и построить приложение вашей мечты.

Добро пожаловать в Corona SDK!

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

ЧТО ТАКОЕ "Corona"?

Corona-это кросс-платформенная система, используемая для быстрого создания приложений и игр для мобильных устройств и настольных систем. Это означает, что вы можете создать свой проект один раз и опубликовать его на нескольких типах устройств, включая Apple iPhone и IPad, Android-телефонов и планшетов, Amazon Fire, рабочий стол Mac, рабочего стола, и даже телевизоры с подключением к интернету, Apple TV, Fire TV и Android TV.

 

ПОЧЕМУ ВЫБИРАЮТ CORONA?

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

  • Corona - это полноценная платформа, которая позволяет вам создавать игры, обучающие приложения, приложения для бизнеса и приложений и многое другое.
  • Corona является кросс-платформенной - разрабатывайте для мобильных, настольных и подключенных ТВ-устройств только одну кодовую базу.
  • Разработка осуществляется на языке Lua, - мощном и легко обучаемом языке сценариев. Learn Lua on YouTube.
  • Corona - это единственная платформа 2D-разработки, в которой реализовано тестирование устройств в реальном времени (real-time device testing). Создавайте и развертывайте приложение только один раз, а затем почти мгновенно обновляйте код / ​​активы на своих устройствах по всей локальной сети.
  • Более 1000 APIs -интерфейсов позволяют превратить ваши идеи в потрясающие и инновационные приложения.
  • plugins Corona предоставляют разработчикам доступ к дополнительным функциям, инструментам и службам.
  • Лучшие в своем классе monetization plugins и analytics plugins помогут вам добиться успеха - всего несколько строк кода. Потратьте время на создание потрясающих приложений, а не на сторонние разработки для разработчиков!
  • Огромный выбор сторонних assets /активов - графика, анимация, музыка, звуковые эффекты, инструменты и многое другое - все это удобно доступно на Marketplace в Corona.

КАК РАБОТАЕТ CORONA

Corona - это платформа на основе Lua, которая предоставляет large set of APIs и plugins, позволяя разработчикам быстро и легко создавать приложения, которые могут работать на разных типах устройств.

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

В дополнение к основной структуре Corona включает в себя множество plugins, которые добавляют определенную функциональность и помогают ускорить разработку вашего приложения. Хотите монетизировать свои приложения с помощью рекламы в приложении? Подробнее об этом можно узнать в нашем Monetization Guide. Хотите подключиться к Facebook? Просто используйте удобный плагин Facebook. Используя плагин, вы можете сосредоточиться на создании своего приложения и при использовании стабильных надстроек. Плагины Corona - это яркая часть экосистемы Corona, и новые плагины выпущены на постоянной основе.

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

Corona Люкс

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

  1. CORONA SDK    Corona SDK - это полнофункциональный, кросс-платформенный фреймворк, который позволяет разработчикам быстро создавать приложения и публиковать на всех основных платформах. Корона SDK является полностью бесплатным, и нет никаких ограничений на Поддерживаемые платформы можно построить для, ни короны лаборатории бесплатно публиковать свои приложения на различных рынках. Если вы новичок в Corona или новинке в разработке приложений, загрузите Corona SDK - он содержит все основные функции, чтобы начать быстро! Download Corona SDK
  2. Corona Enterprise  Corona Enterprise позволяет вам воспользоваться невероятно быстрой разработкой Corona и при необходимости вызывать собственные библиотеки или API-интерфейсы. Corona Enterprise идеально подходит для объединения скорости и простоты использования Corona с кодами / функциональными возможностями, к которым вы уже привыкли.
  3. CoronaCards  CoronaCards используется для реализации Corona в собственных приложениях или других средах, таких как Unity. Это позволяет разработчикам встраивать ресурсы Corona без вмешательства в основной стек приложения.

Системные Требования

Что вам нужно для начала? В дополнение к Corona вам понадобится IDE или текстовый редактор (об этом мы поговорим далее в главе 1).
Конкретные системные требования зависят от того, разрабатываете ли вы в Mac или Windows:

Corona SDK для MacOS поддерживает создание приложений для IOS, Android, tvOS и MacOS. Это требует следующих основных элементов системы: MacOS 10,11 или более поздняя версия

  • Xcode (минимальная версия разрешено Apple, чтобы представить приложения в App Store)
  • Для получения более подробной информации см System Requirements /   страницы. Если вы готовы к установке Corona сейчас, пожалуйста , перейдите к Installing Corona SDK — macOS.

Corona SDK для Windows , поддерживает создание приложений для Android и Win32 рабочего стола. Это требует следующих основных элементов системы: Windows 10, Windows 8 или Windows 7

  • Процессор 1 ГГц (рекомендуется)
  • 1 Гб оперативной памяти (рекомендуется)
  • OpenGL 2.1 или выше (доступно в большинстве современных систем Windows)
  • Для получения более подробной информации см System Requirements  страницы. Если вы готовы к установке Corona сейчас, пожалуйста, перейдите к Installing Corona SDK — Windows.

На Старт!

СОЗДАТЬ APP!

Самый интересный способ узнать Corona является create a simple game. Не беспокойтесь , если вы никогда не создали мобильное приложение или программировали - главы в этом руководстве будут ходить вас через весь процесс от начала до конца.

ОБРАЗОВАТЕЛЬНЫЕ РЕСУРСЫ

Есть несколько мест, где вы можете узнать больше о Corona:

  • Корона для Developer Guides  идти дальше в глубину по многим отдельным темам.
  • API Reference сайт содержит подробную информацию о каждом API.
  • Дополнительные книги и онлайн курсы для Corona можно найти здесь.

ПОЛУЧАТЬ ПОМОЩЬ

Corona дружелюбен и полезно! Вы можете взаимодействовать с другими разработчиками Corona различными способами:

  • Corona Forums - Получите помощь от разработчиков Corona и сотрудников, или посмотреть , как другие решать подобные проблемы.
  • IRC - #coronaна irc.freenode.net.

Демонстрационные проекты

Match 3 Space RPG / Матч 3 Космическая RPG

С открытым исходным кодом прототип как в игре «матч 3» и старой школы RPG с бесконечным коридор и пунктов сбора. Эти шаблоны сосредоточиться на модульной конструкции и проектной организации.

Sticker Knight Platformer / Афиша Рыцарь платформенная игра

С открытым исходным кодом прототип фэнтези-тематический платформер. Это не полная игра, но отправная точка для изучения современных методов программирования игр с использованием Corona и Lua.

Endless Sk8boarder / Бесконечные развлекательный sk8, сноуборд

С открытым исходным прообразом скейтборда тематикой игры бесконечных бегунов. Это не полная игра, но отправная точка для изучения современных методов программирования игр с использованием Corona и Lua.

Corona Cannon / Корона Пушка

С открытым исходным кодом игры в духе Angry Birds . Возьмите под свой контроль над пушкой и разбить все ошибки вы можете найти!

System Requirements / Системные Требования

Corona SDK System Requirements / Системные требования для Corona SDK

Mac OS X

  • OS X 10.10 или позже
  • Xcode 7.0 или позже
Примечания
  • Corona SDK  для OS X поддерживает iOS, Android, и OS X desktop
  • Мы рекомендуем использовать последние версии ОС OS X и Xcode, чтобы избежать проблем со сборкой.
  • В версии Xcode и iOS SDK должна конкретно состязание. Например, если  iOS9.0, вы должны использовать Xcode 7.0.
  • Вам не нужно присоединиться к программе разработчиков Apple, просто чтобы проверить свои приложения в короне симулятор. Вам нужно только установить Xcode и затем построить в xcode для iOS симулятор. Вы, однако, необходимо Присоединиться к программе разработчиков Apple для тестирования на реальных устройствах iOS или отправить свое приложение в магазине iTunes.
  • Corona SDK для ОС Android не требуется, чтобы создать устройство Android.
  • Мы только поддержка iOS устройств под управлением iOS 6.0 или выше.
  • Мы поддерживаем только Android устройства под управлением Android 2.3.3 или выше процессор ARMv7. Бюджетных armv6 не поддерживается.
  • Corona SDK не будет работать в виртуальной машине (ВМ), т. к. большинство  ВМ с OpenGL не поддерживают OpenGL 2.1, как это требует Corona SDK

INSTALLATION / УСТАНОВКА

Готовы начать? Пожалуйста, приступайте к установке  Installing Corona SDK — OS X.

Windows

  • Windows 10, Windows 8, Windows 7, Vista или XP с пакетом обновления 3
  • 1 ГГц процессор (рекомендуется)
  • 1 Гб оперативной памяти (рекомендуется)
  • OpenGL 2.1 или выше (доступно в большинстве современных систем для Windows)
Примечания
  • Corona SDK для Windows поддерживает  Android и Win32.
  • Пакета SDK для ОС Android не требуется, чтобы создать устройство сборки Android на Windows. Вы, однако, должны установить версию x86 в версии java 7 пакет средств разработки.
  • Мы поддерживаем только Android устройства под управлением Android2.3.3 или выше процессор ARMv7. Бюджетных ARMv6 не поддерживается.

INSTALLATION

Готовы начать? Пожалуйста, приступайте к установке Installing Corona SDK — Windows.

Установка Corona SDK - Macos

Это руководство поможет вам встать и работает с Corona SDK для MacOS.

Установка Corona SDK

Вы можете использовать Corona SDK без установки Developer Kit от Apple или Android SDK. Позже, если вы хотите построить и протестировать свой код на устройстве IOS, вам нужно будет зарегистрироваться в качестве компании Apple Developer и создать необходимые сертификаты и профили обеспечения ( руководство ).

Мы предполагаем , что вы уже загрузили Corona SDK. Если вы знакомы с тем, как приложения установлены с .dmgобразами дисков, действуйте как обычно и перейти к Corona SDK активации .

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

В окне образа диска, перетащите Corona папку в Applications псевдоним папки. Это будет копировать содержимое папки в /Applications.

Заметка

Есть два способа, чтобы остаться в курсе выпусков / сборках Corona:

  • Общественный релиз - Последний стабильный релиз Corona SDK, что обеспечивает максимальную надежность для ваших проектов. Это обновляется несколько раз в год.
  • Ежедневно Строит - Кровотечение край. Ежедневные сборки содержат новейшие функции , как они будут интегрированы в Corona.

Corona SDK активации

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

Откройте Corona Simulator из папки , где вы установили его. Первый раз , когда вы запускаете, вам будет представлен с лицензионного соглашения (EULA) . Прочитайте условия лицензионного соглашения и нажмите Принимаю . Если вы уже зарегистрированы для учетной записи Corona, просто введите учетной записи электронной почты и пароль для активации продукта. В противном случае, нажмите кнопку Register , чтобы создать учетную запись.

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

Установка Java Development Kit

Установка Corona SDK позволяет создавать и тестировать приложения локально на вашем Mac. Если вы собираетесь создавать приложения для тестирования на Android устройств, вам нужно будет установить комплект Java Development (JDK). Если вы пытаетесь построить приложение для Android без установленного JDK, Корона Simulator поможет вам установить его. В качестве альтернативы, если вы хотите установить его вручную, вы можете выполнить следующие инструкции:

  1. Перейти к загрузки пакета JDK страницы.
  2. Нажмите на ссылку , чтобы загрузить текущую платформу Java (JDK) .
  3. На следующей странице, прочитайте лицензионное соглашение и выберите опцию, чтобы принять его, если вы согласны.
  4. Найдите x64 Mac OS X ссылку и нажмите на нее , чтобы загрузить файл. Этот файл будет называться как jdk-XuYY-macosx-x64.dmg.
  5. Когда загрузка будет завершена, откройте .dmgи запустите программу установки.

Corona Editor (IDE)

Corona Editor предлагает разработчикам очень способный и легкий IDE. Корона Редактор упрощает разработку и включает в себя следующее:

  • Отладчик - установить контрольные точки и проверить переменные.
  • Отрывки - получить помощь с синтаксисом и кодирования конвенций.
  • Завершение кода - сэкономить время для всех интерфейсов и констант.
  • Docs - вызвать API - интерфейсы непосредственно из вашего кода.
  • Запуск - запустить текущее приложение в Corona Simulator от возвышенного.

Для получения дополнительной информации, пожалуйста , см Corona редактор страницы.

Другие редакторы Текстовые

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

Corona среда разработки

Среда разработки Corona SDK состоит из двух аспектов: в Corona Simulator и Corona Simulator консоли .

  1. Corona Simulator это визуальное представление и тестовая среда для вашего приложения. То , что вы видите в тренажере , как правило , что ваше приложение будет выглядеть - и как он будет функционировать - при развертывании на реальном устройстве. Corona Simulator является важным инструментом , поскольку он позволяет просматривать изменения в свой код мгновенно в активной, отзывчивый среде , которая тесно имитирует устройство.
  2. Corona Simulator консоли , где вы можете просматривать диагностические сообщения о том, что происходит в вашей программе.

WELCOME WINDOW

Окно приветствия предоставляет доступ к ресурсам разработчика Corona. Отсюда вы также можете нажать ⌘-R , чтобы повторно запустить самое последнее отредактированный приложение.

APPLICATION MENU

Это стандартное меню приложения в Mac OS. Это меню обеспечивает доступ к симулятору Preferences , которые подробно описаны ниже.

FILE MENU

Файл меню , где проекты (приложения) создаются или открыты. Это также , где вы строить свои приложения для распространения или тестирования на устройствах.

HARDWARE MENU

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

WINDOW MENU

Окно меню содержит опции для управления окно Simulator или изменить скин ( WindowView As ) .

CORONA SIMULATOR НАСТРОЙКИ

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

  • Deauthorize and Quit / Деавторизовать и Quit - число различных компьютеров , на которых вы позволили запустить симулятор ограничено, поэтому вам придется деавторизовать компьютер , если вы прекратить его использование. Вы можете также использовать эту кнопку , если необходимо изменить учетные данные Corona вы разрабатываете с.
  • Anonymous feedback / Anonymous обратной связи - одобрить отправку анонимной информации об использовании , которая помогает нам улучшить Corona Simulator.
  • Automatically show the Welcome Window / Автоматически показывать окно приветствия - показать Окно приветствия в любое время там не приложение с открытым.
  • Automatically close the Welcome Window  / Автоматически закрыть Окно приветствия - закрыть Окно приветствия в любое время есть приложение с открытым.
  • Automatically open last project  / Автоматически открывать последний проект - при загрузке Simulator, откройте самый последний отредактированный проект.
  • Automatically scale Simulator to fit screen  / Автоматическое масштабирование Simulator , чтобы соответствовать экран - автоматически подогнать имитатора к экрану , когда шкуры изменяются.
  • Show Runtime Errors  / Показать Runtime ошибки - показать диагностическое всплывающее окно , когда приложение испытывает ошибки во время выполнения. Это помогает при отладке кода приложения.
  • Relaunch Simulator when project is modified? / Relaunch Simulator , когда проект изменен? - Корона Simulator может контролировать файлы в каталоге проекта и повторно запустить приложение , если оно видит каких - либо изменений. Это позволяет редактировать и сохранять изменения в коде приложения и увидеть результат в симуляторе немедленно.

СОЗДАНИЕ ПРИЛОЖЕНИЙ

Если вы хотите построить свое приложение для распространения или для проверки на устройстве, выберите File → Build и выбрать нужный вариант сборки. Весь процесс для каждой операционной системы описана в следующих руководствах:

Использование командной строки

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

"/Applications/CoronaSDK/Corona Simulator.app/Contents/MacOS/Corona Simulator" ~/CoronaApps/MyApp

или...

"/Applications/CoronaSDK/Corona Simulator.app/Contents/MacOS/Corona Simulator" ~/CoronaApps/MyApp/main.lua

Если указанный каталог не содержит main.luaфайл , то выводится сообщение об ошибке. Дополнительно -projectмогут быть указаны (обратите внимание , что это подавляет любые сообщения об ошибках , если каталог является недействительным).

Если вы не хотите , чтобы окно консоли Simulator автоматически открывались с помощью -no-consoleопции:

"/Applications/CoronaSDK/Corona Simulator.app/Contents/MacOS/Corona Simulator" -no-console YES

Выход из имитатора появится на стандартный вывод.

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

defaults write com.coronalabs.Corona_Simulator no-console -bool yes

Используйте эту команду, чтобы включить консоль Simulator снова включите:

defaults delete com.coronalabs.Corona_Simulator no-console

Один дополнительный флаг разрешено , -debug YESкоторый позволяет IDE для подключения отладчика к имитатором сессии. Укажите его до директории / файла аргумента.

Установка Corona SDK - Windows

Это руководство поможет вам встать и работает с Corona SDK для Windows.

Установка Corona SDK

Заметка

Corona SDK на Windows , поддерживает только построение для Android и Win32 рабочего стола, в то время как Corona SDK на MacOS поддерживает создание для IOS, Android и OS X рабочий стол.

Вам не нужно устанавливать Android SDK для использования Corona SDK. Тем не менее, чтобы создать устройство сборки для тестирования на реальных устройствах Android, вам потребуется Java Development Kit в . Процесс установки описан ниже.

Мы предполагаем , что вы уже загрузили Corona SDK. Теперь дважды щелкните .msiустановочный файл и следуйте инструкциям мастера установки.

Заметка

Есть два способа, чтобы остаться в курсе выпусков / сборках Corona:

  • Общественный релиз - Последний стабильный релиз Corona SDK, что обеспечивает максимальную надежность для ваших проектов. Это обновляется несколько раз в год.
  • Ежедневно Строит - Кровотечение край. Ежедневные сборки содержат новейшие функции , как они будут интегрированы в Corona.

Corona SDK активации

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

Откройте Corona Simulator из папки , где вы установили его. Первый раз , когда вы запускаете, вам будет представлен с лицензионного соглашения (EULA) . Прочитайте условия лицензионного соглашения и нажмите Принимаю . Если вы уже зарегистрированы для учетной записи Corona, просто введите учетной записи электронной почты и пароль для активации продукта. В противном случае, нажмите кнопку Register , чтобы создать учетную запись.

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

Установка Java Development Kit

Установка Corona SDK позволяет создавать и тестировать приложения локально на вашем компьютере. Для того, чтобы создать приложение для тестирования на Android устройстве, необходимо установить Java Development Kit 7 . Мы предполагаем , что вы будете следовать этим инструкциям:

  1. Перейти к загрузки пакета JDK страницы.
  2. Найдите Java SE 7 и нажмите на ссылку.
  3. На следующей странице найдите Kit 7u80 Java SE Development ссылку и нажмите на нее. Страница должна прокрутите вниз к коробке с различными ссылками для загрузки.
  4. Прочитайте лицензионное соглашение и принять его, если вы согласны.
  5. Чуть ниже, найдите Windows x86 строку и нажмите соответствующую ссылку для загрузки файла.
  6. Когда загрузка будет завершена, запустите программу установки. Обязательно установить Java Runtime Environment (JRE) , как часть установки.

Corona Editor (IDE)

Corona Editor предлагает разработчикам очень способный и легкий IDE. Корона Редактор упрощает разработку и включает в себя следующее:

  • Debugger / Отладчик - установить контрольные точки и проверить переменные.
  • Snippets / Отрывки - получить помощь с синтаксисом и кодирования конвенций.
  • Code completion / Завершение кода - сэкономить время для всех интерфейсов и констант.
  • Docs - вызвать API - интерфейсы непосредственно из вашего кода.
  • Launch / Запуск - запустить текущее приложение в Corona Simulator от Sublime Text .

Для получения дополнительной информации, пожалуйста , см Corona редактор страницы.

Другие редакторы Текстовые

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

Corona среда разработки

Среда разработки Corona SDK состоит из двух аспектов: Corona Simulator и выход Corona Simulator окно.

  1. Corona Simulator это визуальное представление и тестовая среда для вашего приложения. То , что вы видите в тренажере , как правило , что ваше приложение будет выглядеть - и как он будет функционировать - при развертывании на реальном устройстве. Corona Simulator является важным инструментом , поскольку он позволяет просматривать изменения в свой код мгновенно в активной, отзывчивый среде , которая тесно имитирует устройство.
  2. Output Corona Simulator , где вы можете просматривать диагностические сообщения о том , что происходит в вашей программе. Это окно отображается автоматически при запуске Corona Simulator.

WELCOME WINDOW

Окно приветствия предоставляет доступ к ресурсам разработчика Corona. Отсюда, вы также можете нажать Ctrl-R , чтобы вновь начать совсем недавно отредактированный приложение.

FILE MENU

Файл меню , где проекты (приложения) создаются или открыты. Это также , где вы строить свои приложения для распространения или тестирования на устройствах. И, наконец, это меню предоставляет доступ к симулятору Preferences , которые подробно описаны ниже.

HARDWARE MENU

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

VIEW MENU

Вид меню содержит опции для управления окно Simulator или изменить скин ( ViewView As ).

CORONA SIMULATOR PREFERENCES

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

  • Deauthorize and Quit /Деавторизовать и Quit - число различных компьютеров , на которых вы позволили запустить симулятор ограничено, поэтому вам придется деавторизовать компьютер , если вы прекратить его использование. Вы можете также использовать эту кнопку , если необходимо изменить учетные данные Corona вы разрабатываете с.
  • Anonymous feedback / Anonymous обратной связи - одобрить отправку анонимной информации об использовании , которая помогает нам улучшить Corona Simulator.
  • Don't show the Welcome Window  / Не показывать Окно приветствия - не показывать окно приветствия при запуске Simulator.
  • Automatically open last project  / Автоматически открывать последний проект - при загрузке Simulator, откройте самый последний отредактированный проект.
  • Show Runtime Errors / Показать Runtime ошибки - показать диагностическое всплывающее окно , когда приложение испытывает ошибки во время выполнения. Это помогает при отладке кода приложения.

СОЗДАНИЕ ПРИЛОЖЕНИЙ

Если вы хотите построить свое приложение для распространения или для проверки на устройстве, выберите File  →  Построить и выбрать нужный вариант сборки. Весь процесс для каждой операционной системы описана в следующих руководствах:

Использование командной строки

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

"C:\Program Files\Corona Labs\Corona SDK\Corona Simulator.exe" "C:\Documents and Settings\MyAccount\My Documents\Corona Apps\My App\main.lua"

Если вы не хотите , чтобы окно Output Corona Simulator автоматически появится, используйте /no-consoleопцию:

"C:\Program Files\Corona Labs\Corona SDK\Corona Simulator.exe" /no-console

После использования /no-consoleопции выше, все Lua print()функции и сообщения журнала Corona могут быть получены через стандартный поток вывода ( stdout).

Один дополнительный флаг допускается ( /debug) , который позволяет IDE для подключения отладчика к имитатором сессии. Он должен прийти сразу после .exe.

Monetization Guide / Руководство Монетизация

Monetization Guide / Руководство Монетизация

Данное руководство поможет вам ориентироваться варианты монетизации в Corona построенных приложениях.

Что такое монетизация?

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

По мере того как мобильное приложение площадка превратилась, давление увеличилось на толкая цены вниз. Многие пользователи ожидают , что приложения, чтобы быть свободным, и больше всего хотят использовать / включить приложение, прежде чем они потенциально платить за это деньги. В других сегментах, как игровые консоли, это общие заплатить $ 20- $ 50 за игру, прежде чем вы когда - либо видеть его, и даже платить сотни долларов за бизнеса или производительности, связанных с настольным приложением не из области возможности.

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

Методы монетизации

С Corona сложенный приложение, у вас есть возможность использовать три основных формы монетизации, или сочетание всех из них.

IN-APP ПОКУПКИ

В эти дни, в приложение покупки (IAP) являются общей моделью для приложений монетизации. Используя IAP, вы можете предложить свое приложение для клиентов бесплатно - или значительно сниженной цене - а затем предлагают возможность "разблокировать" различные функции или приобрести виртуальные продукты из приложения. Эта модель может привлечь пользователей, которые не решаются платить за приложение, не пытаясь ее в первую очередь.

IN-APP РЕКЛАМЫ

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

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

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

In-App Варианты размещения рекламы

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

баннер   интерстициальный

БАННЕРЫ

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

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

Не уверен, где начать? Исследуйте Corona Объявления в качестве поставщика для рекламных баннеров, и увидеть сравнительную таблицу ниже для других вариантов.

МЕЖСТРАНИЧНЫЕ

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

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

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

Не уверен, с чего начать? Исследуйте Corona Объявления в качестве поставщика для интерстициальных объявления, и увидеть сравнительную таблицу ниже для других вариантов.

видео   Награждена Видео

ВИДЕО

Видеообъявления следующая эволюция в интерстициальных объявлений. Как телевизионный ролик, видеореклама играть около 15-30 секунд, и они, как правило, имеют призыв к действию экрана (CTA) в конце. Большинство видео объявления должны играть за минимальную продолжительность, в какой момент пользователь может перейти к экрану CTA. Если видео предлагает пользователям установить другое приложение или игру, экран CTA дает им возможность установить его.

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

Не уверен, с чего начать? Исследуйте AppLovin в качестве поставщика для видео рекламы, и посмотреть сравнительную таблицу ниже для других вариантов.

ВОЗНАГРАЖДЕН ВИДЕО

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

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

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

Не уверен, с чего начать? Исследуйте AppLovin в качестве поставщика для вознаграждена видео, и посмотреть сравнительную таблицу ниже для других вариантов.

Предложение Стена   Опрос / Голосование

ПРЕДЛОЖЕНИЕ СТЕНЫ

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

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

Не уверен, с чего начать? Исследуйте TrialPay в качестве поставщика для предложения стен, и увидеть сравнительную таблицу ниже для других вариантов.

ОПРОСЫ / ОБЗОРЫ

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

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

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

Не уверен, с чего начать? Исследуйте Pollfish в качестве поставщика для опросов / обследований, а также увидеть сравнительную таблицу ниже для других вариантов.

Ребенка-Safe

БЕЗОПАСНОЕ ДЛЯ ДЕТЕЙ ОБЪЯВЛЕНИЯ

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

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

Не уверен, с чего начать? Исследуйте KIDOZ в качестве поставщика для детей безопасных объявлений и посмотреть сравнительную таблицу ниже для других вариантов.

ПОСРЕДНИЧЕСТВО ОБЪЯВЛЕНИЯ

Рекламодатели "покупки" объявления покупки определенного количества показов через провайдера объявлений. Впечатление в основном один вид объявления. Например, рекламодатель может купить 100000 интерстициальные показов объявлений посредством данного провайдера. Эти впечатления затем распространяются среди всех пользователей, которые получают рекламу от этого поставщика. Этот пул объявлений называется инвентаризация.

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

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

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

Чтобы решить эту проблему, некоторые провайдеры объявлений предлагают услугу под названием посредничество . По существу, они включают в себя несколько серверов рекламы в качестве источника для объявлений и призывают их, пока сообщение не получено, в какой момент он доставлен в ваше приложение. Конец выгоды для вас (разработчика) является то, что вам не нужно, чтобы создать свою собственную систему для запроса и потенциально повторный запрос объявлении, как описано выше - вы просто используете один рекламный модуль провайдера и получить скорость заполнения 100%! Кроме того, поставщики объявлений которые поддерживают посреднические попытки доставки более высокооплачиваемую рекламу в первую очередь.

Не уверен, с чего начать? Исследуйте Appodeal в качестве поставщика для рекламного посредничества.

Поставщик объявлений Сравнение

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

Плагин Типы блоков Уникальные черты
Corona Объявления баннер; интерстициальный
AdColony видео; вознаграждены видео
AppLovin интерстициальный; видео; вознаграждены видео
Appnext интерстициальный; видео; вознагражден видео; предложение стены
Appodeal баннер; интерстициальный; видео; вознаграждены видео объявления посредничество
Chartboost интерстициальный; видео; вознаграждены видео
Facebook Аудитория Сеть баннер; интерстициальный
InMobi баннер; интерстициальный
KIDOZ баннер; интерстициальный; Другие Безопасное для детей
MediaBrix интерстициальный; видео; вознаграждены видео
PeanutLabs Опрос / Опрос
Persona.ly вознагражден видео; предложить стену; Опрос / Опрос
Pollfish Опрос / Опрос
RevMob интерстициальный; видео; вознаграждены видео
Супер классно баннер; интерстициальный; видео Безопасное для детей
сверхзвуковой интерстициальный; вознагражден видео; предложение стены
TrialPay видео; предложение стены
AdBuddiz интерстициальный
Vungle видео

In-App Purchasing (IAP) / In-App закупки (ИПД)

В этом руководстве описывается , как реализовать в приложении покупки (IAP) в пределах Corona приложений.

обзор

В приложении покупательная (IAP) позволяет пользователям приобретать дополнительный контент внутри приложения. Однако, это содержание не может быть доставлено через рынок , как если бы это были физические инвентаризации - вы должны либо связать содержимое с вашим приложением , когда вы строите его, ожидая , что он будет разблокирован / включены при покупке, или вы должны загрузить дополнительный контент в приложение с помощью сетевого API.

Типы продуктов

Есть четыре основных типа продукта , поддерживаемые для в приложение покупки:

  1. Элементы , которые пользователь может купить только один раз, например , платит , чтобы разблокировать полную игру, активировать специальные способности игрока, разблокировать уровни 20-40 и т.д.
  2. Элементы , которые пользователь может купить несколько раз, например , драгоценный камень / пакеты для монет, дополнительные жизни и т.д. Обратите внимание , что для Google IAP, эти предметы должны быть потребляются , прежде чем они могут быть приобретены снова.
  3. Элементы , которые могут быть приобретены на основе подписки , которая обновляет автоматически , например, ежемесячной платы за услуги , чтобы играть в многопользовательскую игру.
  4. Элементы , которые можно приобрести по подписке, не автоматически возобновлять , например , ежегодный взнос , чтобы увидеть премиум - контента в информационном приложении.

Каждый магазин имена эти по-разному. Рассмотрим эту схему:

Тип продукта яблоко Google Амазонка
покупка одноразовая неплавящийся удалось право
покупка несколько раз потребляемый управляется с потреблением потребляемый
Автоматическое обновление подписки авто возобновляемых подписок Подписки подписка
без продления подписки без продления подписки

ИДЕНТИФИКАТОРЫ ПРОДУКТА

Продукты индивидуальной идентификации уникальной строки , известной как идентификатор продукта . Каждый магазин может использовать другой термин, но во всех случаях это строковое значение , которое должно быть уникальным для вашего приложения. Рекомендуется , чтобы следовать реверс-домен именования во всех магазинах, например:

com.acmegames.SuperRunner.UnlockFullGame

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

Установка / настройка

Каждый рынок - Яблоко App Store, Google Play и Amazon Appstore - имеет различные требования и процедуры настройки для настройки в приложении покупки. Пожалуйста , выполните следующие действия для каждого рынка вы собираетесь цель.

Следующие шаги относятся к в приложении покупки на прошивке .

  1. Начните с настройки вашей банковской и налоговой информации в ITunes Connect . В приложении покупка будет не работать , пока эти шаги не будут удалены, и вы не получите сообщение об ошибке отчетов так.
  2. В Developer Apple , портал, создать новый идентификатор приложения , который является уникальным и полностью квалифицирован (вы можете не использовать подстановочные App ID для приложений , которые используют в приложение покупки) . Если вам нужна помощь в этом процессе, пожалуйста , см здесь .
  3. Назад в ITunes Connect , создать новое приложение с тем же Bundle ID , как приложение в Developer портала Apple.
  4. И, наконец, настроить через приложение покупки (продукты) в пределах ITunes Connect . Эта задача выходит за рамки данного руководства, поэтому, пожалуйста , Apple, руководство In-App Purchase конфигурации для получения дополнительной помощи.

Следующие шаги относятся к покупке в приложении на Android .

  1. Начните с настройки вашего торгового счета Google и связать его с Play Developer Console Google . В приложении покупка будет не работать , пока эти шаги не будут удалены, и вы не получите сообщение об ошибке отчетов так. Пожалуйста , смотрите здесь подробные инструкции.
  2. Еще в консоли создайте новое приложение и заполнить всю информацию , необходимую для публикации приложения - обратите внимание, однако, что некоторые детали не должны быть окончательными для простого тестирования в приложении покупки.
  3. Настройте в-приложение покупки (продукты). Эта задача выходит за рамки данного руководства, поэтому, пожалуйста , Google, Администрирование In-App Billing руководства для получения дополнительной помощи.
  4. На стороне Corona, интегрировать Google IAP плагин путем добавления записи в pluginsтаблицу проекта build.settingsфайла:
settings =
{
    plugins =
    {
        ["plugin.google.iap.v3"] =
        {
            publisherId = "com.coronalabs"
        },
    },
}
  1. Включить BILLINGразрешение в пределах androidusesPermissions таблице build.settings:
settings =
{
    android =
    {
        usesPermissions =
        {
            "com.android.vending.BILLING",
        },
    },
}
  1. Добавить licenseтаблицу проекта config.luaфайл. Внутри этой таблицы, keyзначение должно быть установлено на соответствующем каждое приложение ключа , полученном из разработчиков приложений Google Play консоли . Этот ключ указывается в лицензировании и In-App Billing разделе Услуги и API - интерфейсов .
application =
{
    license =
    {
        google =
        {
            key = "YOUR_KEY",
        },
    },
}
  1. Когда вы будете готовы к тестированию в приложении покупки, построить приложение , чтобы создать .apkфайл , который может быть загружен в Play Developer Console Google . Затем перейдите к компании Google Тестирование In-App Billing руководства.

Следующие шаги относятся к покупке в приложении на Amazon .

  1. Если вы еще не сделали, зарегистрироваться для разработчиков Amazon счета.
  2. Если вы новичок в Amazon покупки в приложении , читайте Амазонки Понимание In-App Purchasing руководства.
  3. Настройте в-приложение покупки (продукты). Эта задача выходит за рамки данного руководства, поэтому, пожалуйста , амазонки Подающего IAP Items руководства для получения дополнительной помощи.
  4. На стороне Corona, интегрировать Amazon IAP плагин путем добавления записи в pluginsтаблицу проекта build.settingsфайла:
settings =
{
    plugins =
    {
        ["plugin.amazon.iap"] =
        {
            publisherId = "com.coronalabs"
        },
    },
}
  1. Наконец, установите Amazon App Tester или опубликовать приложение в Amazon Appstore. Более подробная информация о тестировании можно найти здесь .

Инициализация IAP

МОДУЛЬ ВКЛЮЧЕНИЕ

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

Если вы только поддерживаете один магазин, вы можете просто require()надлежащий модуль следующим образом :

local store = require( "store" -- iOS
local store = require( "plugin.google.iap.v3" -- Android
local store = require( "plugin.amazon.iap" -- Amazon

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

local store
local targetAppStore = system.getInfo( "targetAppStore" )
if ( "apple" == targetAppStore ) then  -- iOS
    store = require( "store" )
elseif ( "google" == targetAppStore ) then  -- Android
    store = require( "plugin.google.iap.v3" )
elseif ( "amazon" == targetAppStore ) then  -- Amazon
    store = require( "plugin.amazon.iap" )
else
    print( "In-app purchases are not available for this platform." )
end

При создании вашего приложения для Android на основе устройств, включая устройства Kindle пожарной Амазонки, не забудьте выбрать правильный Target App Store от Corona построить диалоговое окно ( руководство ).

ИНИЦИАЛИЗАЦИЯ

После того , как собственно модуль загружен, вы должны инициализировать его с помощью store.init()вызова:

store.init( transactionListener )

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

local function transactionListener( event )
    if ( event.isError ) then
        print( event.errorType )
        print( event.errorString )
    else
        -- No errors; proceed
    end
end
-- Initialize store
store.init( transactionListener )

store.init()Требуется вызов и должны быть выполнены , прежде чем пытаться вызвать какие - либо другие хранилища , связанные с функциями.

Через некоторое время после вызова store.init(), вы можете проверить store.isActiveсвойство , чтобы подтвердить , что магазин успешно инициализирован (значение  true).

Загрузка продуктов

В приложении Corona, вы можете использовать store.loadProducts()функцию загрузки информации о продукте , который вы вошли в соответствующие магазины:

store.loadProducts( productIdentifiers, productListener )

Эта функция требует следующих два аргумента:

local productIdentifiers = {
    "com.domainname.testProduct1",
    "com.domainname.testProduct2",
    "com.domainname.testProduct3",
}
  • productListener- функция слушателя, который будет вызываться, когда магазин завершает получение информации о продукте. Например:
local productIdentifiers = {
    "com.domainname.testProduct1",
    "com.domainname.testProduct2",
    "com.domainname.testProduct3",
}
local function productListener( event )
end
-- Load store products; store must be properly initialized by this point!
store.loadProducts( productIdentifiers, productListener )

Если вы сохранили идентификаторы ваших продуктов одинаковы для всех платформ, вы можете использовать один массив продукта, но если ваши идентификаторы варьируются от магазинов, вы должны будете использовать отдельные массивы и условную логику , system.getInfo( "targetAppStore" )чтобы загрузить соответствующие продукты для соответствующего магазина.

СВОЙСТВА ПРОДУКТА

Когда продукты загружены, функция продукта слушателя ( productListener аргумент  store.loadProducts()) получит eventтаблицу в качестве единственного аргумента. Эти свойства / ключи , связанные с этой таблицей будут несколько отличаться из - за разницы в основных функциональных возможностях магазина, но на самом минимуме, эти два свойства будут доступны:

  • event.products- таблица, в которой каждый элемент является еще одна таблица, содержащая подробную информацию о продукте. Это в первую очередь таблица вам нужно проверять, чтобы получить подробную информацию о загруженных продуктах.
  • event.invalidProducts- таблица, в которой каждый элемент является строка, представляющая идентификатор продукта. Эта таблица будет заполняться только продуктами, которые не существуют или не доступны.

Как правило, вы должны повторять (контур) через , event.productsчтобы определить , какие продукты доступны. Например:

local productIdentifiers = {
    "com.domainname.testProduct1",
    "com.domainname.testProduct2",
    "com.domainname.testProduct3",
}
local function productListener( event )
    for i = 1,#event.products do
        print( event.products[i].productIdentifier )
    end
end
-- Load store products; store must be properly initialized by this point!
store.loadProducts( productIdentifiers, productListener )

Для каждого экземпляра в event.productsразличных свойства будут доступны и эти свойства могут быть использованы для создания интерфейса (магазин) сцена или отобразить доступные продукты какого - либо иным образом. Из - за основные отклонения в функциональности магазина, эти свойства будут отличаться для каждого магазина, но следующие общие свойства будут доступны для продуктов в всех магазинах:

  • productIdentifier- это строка , представляющая идентификатор продукта.
  • title- это строка , представляющая название продукта.
  • description- это строка , представляющая описание продукта.
  • localizedPrice- цена продукта в виде локализованной валютной строки , например $0.99.

Вместе вышеуказанные свойства должны быть достаточно , чтобы отобразить информативный список продуктов для пользователя / игрока, но вы можете обратиться к документации для IOS , Android и Amazon для проверки дополнительных свойств.

Обработка транзакций

Когда пользователь / игрок выбирает , чтобы купить продукт в вашем приложении, подключение будет производиться с серверами магазина инициировать транзакцию . Магазин будет обрабатывать транзакции и передавать данные обратно в приложение с результатами. Как указывалось выше, это событие обрабатывается с помощью функции транзакции слушателя ( transactionListenerаргумента в пределах store.init()) .

Ваша функция транзакции слушатель должен обрабатывать все из следующих обстоятельств:

  • Пункт был только куплен через store.purchase().
  • Сделка покупка была отменена пользователем после того, как store.purchase()был вызван.
  • Сделка о покупке не удалось по разным причинам.
  • Восстановления приобрели товар запрос был инициирован с помощью store.restore().

СВОЙСТВА ТРАНЗАКЦИЙ

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

  • state- это строка , указывающая состояние транзакции, например "purchased", "cancelled"или "failed".
  • identifier- Уникальная строка идентификатор транзакции.
  • productIdentifier- это строка , представляющая идентификатор продукта , связанный с операцией.
  • receipt- это JSON-отформатированные строки представление о получении сделки.
  • date- это строка , представляющая дату , когда произошла сделка.

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

Ниже приведен пример рамка для функции транзакции слушателя:

local function transactionListener( event )
    if ( event.isError ) then
        print( event.errorType )
        print( event.errorString )
    else
        -- No errors; proceed
        local transaction = event.transaction
        if ( transaction.state == "purchased" or transaction.state == "restored" ) then
            -- Handle a normal purchase or restored purchase here
            print( transaction.state )
            print( transaction.productIdentifier )
            print( transaction.date )
        elseif ( transaction.state == "cancelled" ) then
            -- Handle a cancelled transaction here
        elseif ( transaction.state == "failed" ) then
            -- Handle a failed transaction here
        end
        -- Tell the store that the transaction is complete
        -- If you're providing downloadable content, do not call this until the download has completed
        store.finishTransaction( transaction )
    end
end
 
-- Initialize store
store.init( transactionListener )

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

        end
        -- Tell the store that the transaction is complete
        -- If you're providing downloadable content, do not call this until the download has completed
        store.finishTransaction( transaction )
    end
end

Как было отмечено выше, свойства и значения , возвращаемые будет незначительно отличаться из - за разницы в основных функциональных возможностей магазина. Например, Apple вернется "restored"к stateсобственности восстановленных покупок, но Google Play и Amazon сгруппирует нормальные покупки и реставрированные покупки коллективно под "purchased"государством. Кроме того, каждый магазин возвращает ассортимент уникальных свойств , которые вам могут понадобиться , чтобы проверить, поэтому , пожалуйста , обратитесь к документации по прошивке , Android и Amazon соответственно.

Покупка продуктов

Для того, чтобы начать покупки, используйте store.purchase()функцию. При вызове этот будет подать запрос на покупку в магазин и, когда магазин завершает обработку транзакции, функция слушателя, указанная в store.init()будет вызвана.

store.purchase( productIdentifier )

Как отмечено в свойствах Transaction выше, event.transactionв функции транзакции слушатель получит stateсвойство "purchased"для успешно обработанной покупки.

Восстановление купленных товаров

Если пользователь вытирает чистой информацию на устройстве или покупает новое устройство, он / она нуждается в способе восстановления элементов , ранее приобретенные у вашего приложения (без снова платить за них). store.restore()Функция инициирует этот процесс:

store.restore()

При вызове, процесс восстановления будет инициирован , и, в ходе этого процесса, функция транзакции слушатель может быть вызван несколько раз (один раз для каждого элемента) . Используя каждый идентификатор продукта ( event.transaction.productIdentifier), вы можете сбросить эти продукты в «принадлежащий» или «разблокирован» , используя любые интеграции подходят для вашего приложения.

Как уже отмечалось выше, Apple вернется "restored"к stateсобственности восстановленных покупок, но Google Play и Amazon сгруппирует нормальные покупки и реставрированные покупки коллективно под "purchased"государством. Как правило, вы можете просто обрабатывать как условия с использованием orоператора , как в примере , показанном на основании свойств транзакций выше.

local transaction = event.transaction
if ( transaction.state == "purchased" or transaction.state == "restored" ) then
    -- Handle a normal purchase or restored purchase here

Магазин-Specific Функциональность

Каждый рынок предлагает некоторые уникальные и потенциально важные функции , которые вы должны быть в курсе. В следующем списке перечислены эти, но вы всегда должны обратиться к документации для IOS , Android и Amazon для проверки конкретной платформы функциональности в деталях.

ПОКУПКА DISABLED (APPLE)

IOS устройство имеет настройки , которые можно отключить в приложении покупка полностью. Это обычно используется для защиты детей от случайного приобретения товаров без разрешения. Для Apple , IAP, Corona предоставляет store.canMakePurchases свойство , чтобы проверить, включена ли покупка или отключен. Вы должны использовать это , чтобы проверить заранее , если покупка не допускается , и уведомляет пользователя , если это запрещено.

ПОТРЕБЛЯЯ ТОВАРЫ (GOOGLE)

Google IAP требует , чтобы вы потребляете покупки , чтобы сделать товар (ов) , доступный для покупки снова. По существу, как только продукт куплен, он считается «принадлежит» , и он не может быть куплен снова. Однако, так как вы почти наверняка хотите , чтобы стимулировать игроков , чтобы купить некоторые детали снова - камень / монета пакеты, дополнительные жизни и т.п. - вы должны отправить запрос на потребление вновь обратиться « в собственности» продукты в «» продукты без владельца , так что они становятся доступны для покупки снова. Потребляя продукты также сбрасывает свои предыдущие данные о покупке.

Употреблять элементы, вызов store.consumePurchase () с соответствующим идентификатором продукта:

store.consumePurchase( productIdentifier )

При вызове, и при получении успешного события потребления, значение event.transaction.stateвнутри функции транзакции слушателя будет "consumed". На данный момент, вы можете повторно активировать продукт для покупки в пользовательском интерфейсе или магазин сцене.

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

ОБРАБОТКА ВОЗВРАТОВ (GOOGLE)

Google IAP позволяет транзакция должна быть возвращена ( инструкция ). При получении события успешного возврата, то значение event.transaction.stateв функции прослушивателя транзакции будет , "refunded"и в этом случае, вы можете отключить контент , который был возвращен и / или удалить его из приложения локально , если он был загружен.

РЕЖИМ ПЕСОЧНИЦЫ (AMAZON)

Amazon позволяет тестировать в приложение покупки через режим «песочницы» , в котором не сделаны никакие реальные покупки. Если вы хотите реализовать некоторую форму отладки в вашем приложении Corona, вы можете использовать store.isSandboxMode () API , чтобы проверить , если приложение находится в режиме тестирования.

Communication / Social / Связь / Социальная

Facebook Portal Setup / Настройка портала facebook

Это руководство объясняет , как интегрировать приложение с Facebook с помощью Facebook Developer Portal для обоих прошивки и Android.

Регистрация разработчиков

Если вы еще не сделали этого, войдите в Developer Portal Facebook и зарегистрироваться в качестве разработчика. Это простой процесс , и это не влечет за загрузки или установки программного обеспечения.

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

Интеграция приложений

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

ГЕНЕРАЛЬНАЯ

  • Отображаемое имя - Это должно быть таким же , как имя приложения вошло в окно сборки коронного. На Android, неспособность соответствовать это может привести к невозможности обмениваться ссылками с вашего приложения.

IOS

  • Bundle ID - Это должно совпадать с App ID Суффикс , который используется для построения вашего приложения; он может быть получен в App идентификаторами меню для IOS Apps в рамках разработчиков Apple портала. Здесь, используют тот же обратный домен формат, например com.mycompany.myapp. Вы не пытаетесь использовать подстановочные App ID.
  • URL Суффикс Схема - укажите их , если вы хотите использовать специальные схемы URL суффиксы при публикации ваших IOS приложений. Смотрите здесь для получения дополнительной информации о настройке этого в build.settings.
  • iPhone магазин ID / IPad магазин ID - Они получены при добавлении приложения к ITunes Connect портал, даже до загрузки двоичного файла. Если вы еще не настроили приложение в магазине ITunes, вы можете использовать любой существующий идентификатор приложения - просто не забудьте изменить его на соответствующий ID , прежде чем отправить бинарный файл в Apple.
Важный

Должна быть предоставлена ID iPhone магазин или IPad магазин ID получать запросы игры, отправленные из Game Request Dialog.

  • Single Sign On - Установите в YES .
  • Deep Linking - Установите в YES для включения схемы URL для выполнения определенных действий при открытии приложения. Например, когда мобильное приложение Facebook запускает приложение по ссылке, вы получите launchArgsпараметр в приложении Corona , из которого вы можете разобрать idстроку.

ANDROID

  • Google Play Имя пакета - Используйте то же имя пакета , который вы вошли в окно сборки коронного.
  • Имя класса - используются для нативных связей, то есть, если кто - то стучит ссылку на приложение в Facebook, он будет автоматически запустить приложение. Это поле должно быть установлено значение com.ansca.corona.CoronaActivity. Facebook на Android будет запустить приложение через Android «намерение», используя имя пакета и имя класса , который вы вошли на странице разработчика. Имя пакета (выше) является уникальной вашим приложением строки ID и сообщает Android систему , которая приложение, чтобы запустить деятельность с. Таким образом , не будет конфликт, если более чем один приложение Corona устанавливается на том же устройстве.
  • Основной Хэш - Они необходимы для интеграции Facebook единого входа на вашем Android приложения. Инструкции о том , как сгенерировать ключ хэш можно найти здесь или, в качестве альтернативы, вы можете получить хэш - ключ из самой Facebook. Если вы ввели неправильный ключ хэша в Developer Portal Facebook, установлено приложение Facebook, и попробуйте запустить приложение, Facebook будет выдавать ошибку и распечатать хэш - ключа он ожидает. Вы можете добавить новый ключ хэш Developer Portal Facebook.
  • Single Sign On - Установите в YES .
  • Deep Linking - Установите в YES для включения схемы URL для выполнения определенных действий при открытии приложения. Например, когда мобильное приложение Facebook запускает приложение по ссылке, вы получите launchArgsпараметр в приложении Corona, из которого вы можете разобрать idстроку.

ПРОДВИНУТЫЙ

  • Клиент Токен - Это должно быть сгенерированы. КСН, в противном случае сделать это может привести к попыткам входа в систему не удается.

Тестирование Ограничения

В то время как ваш Facebook-интегрированное приложение находится в стадии разработки, очень важно, что вы общаетесь с и протестировать приложение с использованием только зарегистрированные аккаунтов Facebook. См Roles раздел Facebook Developer Portal для получения дополнительной информации.

Кроме того , ваше приложение должно не быть в «Live» состояние во время тестирования. Если ваше приложение использует разрешения, которые требуют обзора по Facebook, эти разрешения не будут предоставлены в ваше приложение, пока обзор от Facebook не происходит. Оставив приложение в «В развитии» государства позволит вам проверить с помощью разрешений, которые попадают в эту категорию.

Для того, чтобы обеспечить ваше приложение находится в состоянии «В разработке», перейдите в App Review раздел портала разработчиков и убедитесь, что Make [YOUR_APP] public? параметр установлен в NO.

Реализация функциональности

Предполагая , что все настроено, как указано, пожалуйста, перейдите к Implementing Facebook руководству, которая обсуждает, как реализовать общие задачи, Facebook и процессы в вашем приложении.

Implementing Faceboo / Реализация Facebook

В этом руководстве описывается, как реализовать общие задачи, Facebook и процессы в вашем приложении Corona.

Заметка

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

В том числе плагина

Важный

Для того, чтобы начать использовать Facebook плагин, вы должны сначала зарегистрироваться в качестве разработчика Facebook и настроить приложение в Developer Portal Facebook. Пожалуйста, обратитесь к установке Facebook Portal руководства для помощи в этом процессе - это требует очень точной информации, и это тщательно Тон задает следить за каждый шаг.

Как и со всеми плагинами Corona, вы должны включать в себя Facebook плагин внутри pluginsтаблицы build.settings:

settings = {
    plugins =
    {
        ["plugin.facebook.v4"] =
        {
            publisherId = "com.coronalabs"
        },
    },
}

Затем, вы должны require()плагин в любом модуле, где вы должны получить доступ к его методам и свойствам:

local facebook = require( "plugin.facebook.v4" )

Пользовательский опыт

Опыт пользователя для различных компонентов плагина Facebook изменяется в зависимости от присутствия родного приложения Facebook. Во многих случаях, если родное приложение Facebook на устройстве, такие операции, как вход в систему или представлении Share Диалог может попытаться перенаправить тяжелую в приложение Facebook. Случаи, в которых происходит перенаправление на приложение Facebook изменилось многое на протяжении истории Facebook SDK, так что ваше приложение должно быть подготовлено для работы в Facebook, чтобы приостановить, а затем возобновить приложение после операции Facebook завершается.

Заметка

На Android родное приложение Facebook может быть стандартное приложение Facebook или приложение Facebook Lite . Каждое родное приложение может привести к различному пользовательскому опыту.

Входные Соображение

Перед тем как API Facebook Graph можно использовать, приложение должно успешно войти в Facebook. Затем он должен собрать необходимую информацию для аутентификации и специальные разрешения, необходимые приложения.

  • Если мобильное устройство имеет собственное установленное Facebook приложение, ваше приложение будет запустить его и попросить необходимые разрешения. Когда это произойдет, ваше приложение временно приостановлено и помещено в фоновом режиме, когда родное приложение Facebook работает. После завершения (пользователь либо получил разрешение или отменила), приложение Facebook будет пытаться восстановить приложение и поместить его на первый план, принося с собой информацию о вашем запросе разрешения.
  • Если мобильное устройство не не установлено родное приложение Facebook, он будет использовать веб - сайт Facebook, чтобы войти. Это происходит через веб - просмотр, так что ваше приложение никогда фактически приостановлено на задний план. В целом, веб- метод Логина является очень надежным, но вы (разработчик) не можете контролировать , если пользователь вашего приложения , либо не установлено родное приложение Facebook. Таким образом, вы должны поддерживать оба метода.
Заметки
  • В Facebook v4 плагин использует SFSafariViewController войти в КСН 9 и выше.
  • На низкобюджетных устройств Android, это более вероятно, что приложение Facebook не сможет восстановить свое приложение при использовании для входа в систему. Это может быть вызвано Android OS, заканчивающихся ваше приложение, потому что это низко работает на память.

IOS Требования

Если ваше приложение для IOS, вы должны включать в себя конкретные аспекты в пределах вашего build.settingsфайла, чтобы гарантировать, что родные функции приложения Facebook правильно. Пожалуйста, обратитесь к документации плагин для деталей.

Заметка

Если вы хотите опубликовать несколько приложений IOS , которые используют один и тот же Facebook App ID, например, пробную версию и полную версию одного и то же приложение, это может быть достигнуто с помощью FacebookUrlSchemeSuffixключа в iphoneplistтаблице build.settings, наряду с другими незначительными правками , как указано ниже, Смотрите на Facebook IOS SDK FAQ для получения дополнительной информации.

settings = {
    iphone =
    {
        plist =
        {
            FacebookUrlSchemeSuffix = "suffix",
            ["URL types"] =
            {
                item =
                {
                    ["URL Schemes"] = { ["Item 0"] = "fbXXXXXXXXXXsuffix" },  -- Replace XXXXXXXXXX with your Facebook App ID
                },
            },
            
            MinimumOSVersion = "8.0",
            UIApplicationExitsOnSuspend = false,
            FacebookAppID = "XXXXXXXXXX"-- Replace XXXXXXXXXX with your Facebook App ID
            CFBundleURLTypes =
            {
                { CFBundleURLSchemes = { "fbXXXXXXXXXXsuffix", } }  -- Replace XXXXXXXXXX with your Facebook App ID
            },
        }
    }
}

Android Требования

На Android, Facebook использует приложение Имя пакета , например com.yoursite.yourapp. Для того, чтобы гарантировать , что родные функции приложения Facebook правильно, вы должны предоставить портал Facebook с двумя важными частями информации - это включает в себя имя класса из com.ansca.corona.CoronaActivityи Key Hash собрали из хранилища ключей вы построили приложение с. Они обсуждаются в настройки Facebook портала руководства.

Кроме того, в Facebook v4 плагин должен знать о вашей уникальной Facebook App ID ( facebookAppId):

settings =
{
    android =
    {
        facebookAppId = "XXXXXXXXXX"-- Replace XXXXXXXXXX with your Facebook App ID
    },
}

Вход / Выход

Вход в Facebook осуществляется через facebook.login (). Если вы еще не установили слушатель функции через facebook.setFBConnectListener (), вы можете установить его, передавая ссылку слушателя в качестве первого аргумента facebook.login ()

Во- вторых, вы можете запросить массив разрешений. Оба только для чтения и неопубликованные разрешения могут быть определены, с некоторыми оговорками, которые изложены в facebook.login () документации.

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

facebook.login( facebookListener, { "email", "user_birthday" } )

Вход пользователя за еще проще. Чтобы отключить приложение от услуг Facebook, просто позвоните facebook.logout (). Однако следует отметить, что это не войти пользователь устройства из Facebook полностью - если пользователь вошел в Facebook через родное приложение Facebook или в браузере устройства, они будут оставаться в системе с помощью этих средств.

facebook.logout()

facebook Слушатель

Все запросы Facebook будет вызывать функцию слушателя , который вы передаёте facebook-v4.login()или установить с помощью facebook.setFBConnectListener (). Например:

local json = require( "json" )
local function facebookListener( event )
    print( "event.name:" .. event.name )  -- "fbconnect"
    print( "isError: " .. tostring( event.isError ) )
    print( "didComplete: " .. tostring( event.didComplete ) )
    print( "event.type:" .. event.type -- "session", "request", or "dialog"
    -- event.type of "session" covers various login/logout events
    if ( "session" == event.type ) then
        -- event.phase may be "login", "loginFailed", "loginCancelled", or "logout"
        if ( "login" == event.phase ) then
            local access_token = event.token
            -- Code for tasks following a successful login
        end
    -- event.type of "request" handles calls to various Graph API functionalities
    elseif ( "request" == event.type ) then
        if not event.isError then
            local response = json.decode( event.response )
            -- Process response data here
        end
    -- event.type of "dialog" indicates standard popup boxes that can be displayed
    elseif ( "dialog" == event.type ) then
        print( "dialog", event.response )
        -- Handle dialog results here
    end
end

Делать запросы

Для того, чтобы различные запросы Graph API, используйте facebook.request () вызов. По умолчанию, этот вызов делает HTTP GETзапросы на Facebook. Если вы хотите использовать другой метод, установите второй параметр ( httpMethod) до значения, изложенного в facebook.request () документации.

facebook.request( path [, httpMethod] [, params] )

Единственный обязательный параметр, pathкоторый основан на API Facebook Graph пути. Обычно это будет объект REST, который вы хотите получить доступ. Например, следующая команда будет получать последние сообщения из фида аккаунта пользователя:

facebook.request( "me/feed" )

Некоторые вызовы Graph API также требуют параметры , которые будут переданы facebook.request () . Это делается с помощью опциональной paramsтаблицы, например:

facebook.request( "me/feed", "POST", { message="Hello Facebook" } )

Чтобы загрузить фото в свой фотоальбом Facebook, то paramsтаблица может быть заполнена на основе стандартных параметров Graph API, найденных здесь:

local attachment = {
    caption = "Corona icon file",
}
facebook.request( "me/photos", "POST", attachment )

Когда facebook.request () вызывает полным, ваша функция слушателя Facebook будет называться с event.typeиз "request". Facebook обычно возвращает данные, как event.response, в JSON-закодирован таблицу данных. Для того, чтобы преобразовать это в таблицу Lua, вызовите json.decode (), вспоминая первую require()библиотеку JSON:

local json = require( "json" )
local data = json.decode( event.response )

Чтобы узнать больше о том, какие запросы, параметры, данные и Facebook предоставляет, обратитесь к API Facebook Graph документацию.

Использование Диалоги

Facebook требует, чтобы некоторые задачи быть сделаны с помощью диалоговых окон , которыми они управляют. Чтобы использовать диалоговое окно, вызовите facebook.showDialog () функции:

facebook.showDialog( action, params )

Для этого вызова actionпараметр определяет тип диалога:

  • Share Диалог отображает диалог Facebook для совместного использования контента. Например, если вы хотите разместить ссылку на вашей стене Facebook и отправить сообщение вместе с ним, вы могли бы сделать что - то вроде:
facebook.showDialog( "link",
    {
        name = "Implementing Facebook with Corona",
    })
  • Игра Запрос Диалог отображает нативный вид , который позволяет пользователю посылать запросы игры на свой выбор друзей. Например:
facebook.showDialog( "requests",
    {
        message = "You should download this game!",
        filter = "APP_NON_USERS"
    })

Обратите внимание, как paramsаргумент представляет собой таблицу пар ключ / значение, которое получает передаваемый в API вызова Facebook. Клавиши, которые вы передаете соответствуют конкретным вариантам, которые доступны для диалога. См facebook.showDialog () документацию для деталей.

Опубликован Установлено

Хотя это не часть API Graph, Опубликовано Устанавливает способ для приложений для участия в мобильной рекламной кампании Facebook, которая может сообщить (в Facebook), который было установлено приложение. Этот процесс очень прост и нет никакой информации обратного вызова или нужно вызвать facebook.login ()  - просто позвоните facebook.publishInstall ():

facebook.publishInstall()

Introduction to Lua / Введение в Lua

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

Условные обозначения

Имена (также называемые идентификаторы ) в Lua может быть любая строка из букв, цифр и символов подчеркивания, не начинающаяся с цифры. Это совпадает с определением имен в большинстве языков. Определение «буква» зависит от текущей локали: любой символ считается алфавитным текущем локалью может использоваться в качестве идентификатора. Идентификаторы используются для именования переменных и полей таблицы.

Следующие ключевые слова зарезервированы и не могут быть использованы в качестве имен:

and     break        do         else     elseif     end       false
for     function     if         in       local      nil       not
or      repeat       return     then     true       until     while

Следующие строки обозначают другие символы:

+      -      *      /      %      ^      #
==     ~=     <=     >=     <      >      =
(      )      {      }      [      ]
;      :      ,      .      ..     ...

Lua является чувствительны к регистру язык: andявляется зарезервированным словом, но Andи ANDдве разные, действительные имена. По соглашению, имена , начинающиеся с символа подчеркивания , затем прописными буквами (например _VERSION) зарезервированы для внутренних глобальных переменных , используемых Lua.

Комментарий начинается с двойным дефисом ( --) где - либо за пределами строки. Они не работать до конца строки. Вы можете закомментировать полный блок кода, окружив его --[[и --]]. Чтобы раскомментировать тот же блок, просто добавьте еще один дефис в первый корпус, как и в ---[[.

-- Single line commented out
--[[ Entire block commented out
print( 10 )
print( 15 )
--]]

Числовая константа может быть записана с помощью дополнительной десятичной части и необязательной десятичной экспоненты. Луо также принимает целые константы шестнадцатеричных, предваряя их 0x. Примеры допустимых числовых констант:

3    3.0    3.1416    314.16e-2    0.31416E1    0xff    0x56

Виды и значения

Lua является динамически типизированным языком . Это означает , что переменные не имеют типов; только значения делают. Там нет определения типов в языке. Все значения несут свой собственный тип.

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

Основные типы вы должны быть заинтересованы в:

  • ноль - тип значения nil, чье основное свойство должно отличаться от любого другого значения; как правило , представляет собой отсутствие полезного значения.
  • булево - тип значений falseи true. Как nilи falseсделать условие ложно; любое другое значение делает его истинным.
  • номер - представляет реальное ( с плавающей точкой двойной точности) число.
  • строка - представляет собой массив символов. Lua является 8-битным: строки могут содержать любой 8-битный символ, включая вложенные нули.
  • функция - см Функции для получения дополнительной информации.
  • Таблица - единственный механизм структурирования данных в Lua. См таблицы для получения дополнительной информации.

Lua обеспечивает автоматическое преобразование между строками и числовыми значениями во время выполнения. Любая арифметическая операция применяется к строке пытается преобразовать эту строку в число, следуя обычные правила преобразования. С другой стороны , всякий раз , когда число используется , когда строка , как ожидается, число преобразуется в строку, в приемлемом формате. Для полного контроля над тем, как числа будут преобразованы в строки, используйте string.Format функцию из библиотеки строки.

таблицы

Таблицы являются единственным механизмом структурирования данных в Lua. Они реализуют ассоциативные массивы , а это означает , что массивы могут быть индексированы не только с номерами, но с любым значением , за исключением nil. Таблицы могут быть гетерогенными , и они могут содержать значения всех типов , кроме nil.

Для представления записей (свойств), Lua использует имя поля в качестве индекса . Язык поддерживает это представление, предоставляя в a.nameкачестве синтаксического сахара для a["name"].

Как индексы, значение поля таблицы может быть любого типа , за исключением nil. В частности, потому , что функции значение первого класса, поле таблицы может содержать функции. Таким образом , таблицы могут также нести методы .

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

Конструктор таблицы записывается с помощью фигурных скобок (фигурных скобках) , как в {}.

t = {}           -- Create a table
k = "x"
t[k] = 3.14      -- New table entry with key = "x" and value = 3.14
print( t[k] )    --> 3.14
print( t["x"] )  --> 3.14
print( t.x )     --> 3.14
t[2] = "foo"     -- New table entry with key = 2 and value = "foo"
print( t[2] )    --> "foo"
Доступ к последним

В приведенном выше примере, запись с именем поля "x"был доступ двумя способами: в качестве имущества с использованием оператора точки t.xи в качестве индекса массива с использованием t["x"].

Распространенной ошибкой является путать t.xс t[x]. Первый эквивалентно t["x"]: таблицы индексируется строкой "x". Второй представляет собой таблицу , индексированных по значению переменной x.

Важный

Многие API , Corona возвращают объекты. Вы можете управлять документированные свойства этих объектов, как вы бы для свойств таблицы. Вы даже можете добавить свои собственные свойства при условии , вы не префикс любой из ваших пользовательских свойств с подчеркиванием, как в t._custom = 10. Corona оставляет за собой право использовать любое имя свойства , которое начинается с символом подчеркивания.

переменные

Переменные места, хранящие значения. Есть три вида переменных в Lua: глобальные , локальные и полей таблицы (свойства). Любая неинициализированная переменная nilпо умолчанию.

ГЛОБАЛЬНЫЙ

Глобальные переменные не нужны декларации. Вы просто присвоить значение одного для его создания:

print( s )  --> nil
s = "One million dollars"
print( s )  --> One million dollars

Глобальные переменные живут до тех пор , как приложение работает. Вы можете удалить глобальную переменную, присвоив nilей. На данный момент, глобальная переменная ведет себя так , как будто он никогда не инициализируется.

s = nil
print( s )  --> nil

МЕСТНЫЙ

Локальные переменные объявляются с помощью локального заявления:

x = 1         -- Global variable
local y = 10  -- Local variable

В отличие от глобальных переменных, локальные переменные видны только в том блоке , где они объявлены. Объем локальной переменной начинается после объявления и заканчивается в конце блока.

a = 10
local i = 1
while ( i <= 10 ) do
    local a = i*i  -- Different variable "a", local to this "while" block
    print( a )     --> 1, 4, 9, 16, 25, ...
    i = i + 1
end
 
print( a )         --> 10 (the global "a")

ТАБЛИЦА ПОЛЕ

Таблица поле являются только элементами самих таблиц. Индексирование в массив присвоить значение поля.

t = { foo="hello" -- Create table with a single property "foo"
print( t.foo )       --> "hello"
t.foo = "bye"        -- Assign a new value to property "foo"
print( t.foo )       --> "bye"
t.bar = 10           -- Create a new property named "bar"
print( t.bar )       --> 10
print( t["bar"] )    --> 10

Выражения

АРИФМЕТИЧЕСКИЕ ОПЕРАТОРЫ

Lua поддерживает обычные двоичные арифметические операции:

оператор Цель
+ прибавление
- вычитание
* умножение
/ деление
% по модулю
^ экспоненцирование

Он также поддерживает унарное -(отрицание).

Заметки
  • Если операнды числа или строки , которые могут быть преобразованы в числа, все операции имеют обычный смысл. Возведение работает для любого показателя. Например, x^(-0.5)вычисляет обратный квадратный корень x.
  • Модульный определяются как: a % b == a - math.floor(a/b)*b, как и в остальной части дивизии , которая округляет фактор по отношению к минус бесконечности.

ОПЕРАТОРЫ ОТНОШЕНИЯ

Реляционные операторы в Lua являются:

оператор Цель
== равно
~= не равно
< меньше, чем
> больше чем
<= меньше или равно
>= больше или равно

Эти операторы всегда приводят trueили false.

Заметки
  • Равенство ( ==) первый сравнивает тип своих операндов. Если типы различны, то результат false. В противном случае, значение операндов сравниваются.
  • Числа и строки сравниваются обычным способом. Объекты сравниваются по ссылке: два объекта считаются равными, только если они являются тем же объектом. Каждый раз, когда вы создаете новый объект, этот объект отличается от любого ранее существующего объекта.
  • Правила автоматических преобразований этого не применяются к сравнениям равенства. Таким образом, имеет "0" == 0значение false.

ЛОГИЧЕСКИЕ ОПЕРАТОРЫ

Логические операторы в Lua являются and, orи not. Все логические операторы рассматривают как falseи nilкак ложные и ничего другого , как верно.

  • и - оператор конъюнкции andвозвращает свой первый аргумент , если это значение falseили nil; в противном случае andвозвращает второй аргумент.
  • или - оператор дизъюнкции orвозвращает свой первый аргумент , если это значение отличается от nilи false; в противном случае orвозвращает второй аргумент.
  • не - оператор отрицания notвсегда возвращает falseили true.

Как andи orиспользовать ярлык оценки - второй операнд вычисляется только тогда , когда это необходимо.

10 or 20           --> 10
10 or error()      --> 10
nil or "a"                  --> "a"
nil and 10          --> nil
false and error()   --> false
false and nil             --> false
false or nil               --> nil
10 and 20           --> 20

КОНКАТЕНАЦИЯ

Оператор конкатенации в Lua обозначен двумя точками ( ..). Если оба операнда строки или числа, то они преобразуются в строки в соответствии с правилами преобразования упомянутых выше.

local s = "foo".."10"

ДЛИНА OPERATOR

Оператор длина обозначается через одноместной операции #. Длина строки является количество байтов - обычное значение длины строки , когда каждый символ занимает один байт.

Длина таблицы t определяется как любое целое число , индекс nтаким образом, что t[n]не является , nilи t[n+1]это nil; кроме того, если t[1]это nil, nможет быть равно нулю. Для обычного массива, с не- nilзначениями от 1 до заданного n, его длина точно , что n, индекс его последнего значения. Если массив имеет «дыру» ( nilзначения между другими , не являющиеся nilзначениями), то #tможет быть любым из индексов , которые непосредственно предшествует nilзначение. Таким образом, она может рассматривать любое такое nilзначение , как в конце массива.

СТАРШИНСТВО

Приоритет операторов в Lua следует список ниже, от низшего к высшему приоритету:

  • or
  • and
  • <, >, <=, >=, ~=,==
  • ..
  • +, -
  • *, /,%
  • not, #, -(Унарный)
  • ^

Как обычно, вы можете использовать круглые скобки , чтобы изменить старшинство выражения. Конкатенации ( ..) и экспоненцирование ( ^) операторы правой ассоциативно. Все остальные бинарные операторы левоассоциативны.

функции

Простые функции так же, как ожидалось: вы предоставляете аргументы в качестве входных данных (в скобках), функция выполняет некоторые задачи, и результаты могут быть возвращены.

Следующие общие методы объявить функцию:

local function f ()
--body
end
local f = function()
--body
end
function f ()
--body
end
f = function ()
--body
end

Функции могут быть переменными, поэтому таблица может хранить их в качестве свойств. Это позволяет очень гибкое использование таблицы. Он может быть использован логически группировать семейство функций в таблице, например, mathбиблиотека. В этом случае, чтобы вычислить синус 100, можно было бы написать math.sin(100). Здесь mathэто просто таблица, а свойство sinявляется фактической функцией.

МЕТОД ОБЪЕКТА

Объекты в Lua представлены в таблицах. Экранные объекты и глобальный объект выполнения все объекты . Как и в mathбиблиотеке, эти объекты аналогично хранить методы объекта (методы экземпляра) в качестве свойств. Ключевое различие, однако, является синтаксисом. Вы должны сказать Lua , что вы собираетесь эту функцию можно назвать как метод объекта , а не только простой функции. Для этого необходимо использовать двоеточие ( :оператор) вместо оператора точки. Это может быть отличным от других языков. Сравните синтаксис Javascript и Lua:

Javascript принимать
object.translate( 10, 10 ); object:translate( 10, 10 )

Область применения Правила

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

x = 10                  -- Global variable
do                                        -- New block
    local x = x         -- New "x" with value 10
    print(x)            --> 10
    x = x+1
    do                                 -- Another block
        local x = x+1   -- Another "x"
        print(x)        --> 12
    end
    print(x)            --> 11
end
print(x)                --> 10  (the global one)

Обратите внимание на то, что в декларации , как local x = xновый xбыл объявлен не в рамках еще и поэтому вторая xотносится к внешним переменной.

Из - за лексических правил областей видимости, локальные переменные могут быть свободно доступны с помощью функций , определенных внутри их объема. Локальная переменная используется внутренней функцией называется повышать стоимость или внешний локальной переменной, внутри внутренней функции.

Обратите внимание на то, что каждое исполнение в localзаявлении определяет новые локальные переменные:

a = {}
local x = 20
for i = 1, 10 do
    local y = 0
    a[i] = function () y = y+1; return x+y end
end

Петля создает десять замыканий (десять экземпляров анонимной функции). Каждая из этих закрытий использует другую yпеременную, в то время как все они одни и те же x.

Выделение памяти

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

Луа выполняет автоматическое управление памятью. Это означает , что вам не придется беспокоиться о выделении памяти для новых объектов. Также вам не нужно явно освободить память , когда объекты больше не нужны. Lua управляет памятью автоматически путем запуска сборщика мусора время от времени , чтобы собрать все «мертвые» объекты (объекты, которые больше не доступны из Lua). Вся память используется Lua подлежит автоматическому управлению. Тем не менее, это до вас , чтобы сказать Lua , что считать мусор. Например, все, что хранится в глобальной переменной не считается мусором, даже если приложение не использует его снова. Аналогично, все, что хранится в таблице или массив не будет считаться мусора , если эта таблица / массив не может быть удален сборщиком мусора, даже если хранить переменную / объект был первоначально объявлен в локальной области. В обоих случаях, это до вас , чтобы назначить nilна эти должности. Это гарантирует , что их соответствующая память не будет заблокирована и может быть освобождена сборщиком мусора.

Объект отображения требуется дополнительный шаг. Вы должны сначала удалить объект из иерархии отображения с помощьюobject:removeSelf()или display.remove( object ), то вы должны установить ссылку на нее nil.

myObject:removeSelf()
-- OR...
display.remove( myObject )
myObject = nil

Синтаксис Сравнение

Некоторые различия в синтаксисе между Lua и другими языками стоит отметить, потому что они могут помочь предотвратить ошибки компилятора:

  • точка с запятой - замыкающие точку с запятой в конце каждого оператора (фактически строка кода) являются необязательно в Lua.
  • брекеты - Вы можете быть привыкли использовать { }для определения переменной сферы. В Lua, вы делаете это, заключая код с doи end. Скобы в Lua интерпретируются как таблица конструкторов .
  • если - то - иначе - если вы приехали из C, Java, JavaScript и т.д., общей ошибки вы будете делать в письменной форме ifи elseifотчетности забывает добавлять thenк концу if/elseifусловий испытания. Еще одна распространенная ошибка случайно используя else if(с пробелом) , когда Lua ожидает elseif.
  • массивы - в Lua, массивы 1 на основе . Технически, вы можете индекс в массиве , начиная с 0. Тем не менее, Lua и Corona API , предположим , что первый элемент таблицы tэто t[1]не t[0].
  • множественные возвращаемые значения - нетрадиционный , но полезная функция в Lua является способность функции возвращать более одного результата .
  • Многократное назначение - несколько назначения предлагают удобный способ поменять значение. Заявление x,y = y,xбудет поменять xна yи наоборот.
  • Тройной оператор ( ? :) - Lua не предлагает эквивалент тройного оператора C a?b:c. Идиома Lua (a and b) or cпредлагает близкое приближение при условии bне является ложным. Например, эквивалент Lua для max = (x>y?x:y)будет max = ( x>y and x or y).

Lua функции

Базовая библиотека Lua предоставляет несколько основных функций. По соображениям безопасности, то dofile(), load(), loadfile()и loadstring()функции недоступны в Короне.

См (Глобал) ссылка API для полного списка доступного для вас.

Содержание в данном руководстве, цитируется по Lua 5.1 Reference Manual , в свободном доступе в соответствии с условиями лицензии Lua

Corona Basic

Project Configuration / Конфигурация проекта

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

Базовая структура

config.luaФайл устанавливается с помощью contentтаблицы вложен в applicationтаблице следующим образом :

application =
{
    content =
    {
        -- Parameters
    }
}

Содержание Scaling

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

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

Содержание Область

Фундаментальная концепция масштабирования контента является областью содержимого . В Corona, ваша базовая область содержимого может быть все , что вы хотите, но часто он базируется на общей экрана ширина / высота пропорции , как 2: 3, например , 320 × 480.

Область содержимого представляет общий «этап» , на которой отображаются текстовые, векторные объекты и изображения активов. Все будет позиционироваться по отношению к этой области контента, которые могут быть или могут не соответствовать реальному пиксельному разрешению экрана. Область содержимого будет масштабируется по размеру экрана, с тонкими различиями , диктуемых scaleопределению (см масштабироваться ниже).

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

ШИРИНА | ВЫСОТА

Область содержимого определяются widthи heightзначение в config.lua. Если опустить или установить либо из этих значений 0, будет масштабирование контента не будет использоваться.

application =
{
    content =
    {
        width = 320,
        height = 480,
    }
}
Важный

Область содержимого всегда должны быть определены в отношении портретной ориентации. Если ваше приложение предназначено для альбомной ориентации, вы все равно должны установить widthи в heightсоответствии с портретной ориентацией. В приведенном выше примере альбомной ориентации приложение должно по- прежнему использовать widthи heightпараметры 320 и 480 соответственно, а не 480 и 320.

Для контроля описания ориентации приложения на реальных устройствах, необходимо определить конкретные параметры в build.settingsфайле. См сборки проекта настройки для получения дополнительной информации.

МАСШТАБ

Метод масштабирования области содержимого определяется scaleзначением. Если это опускает (не рекомендуется), то widthи heightзначения будут игнорироваться , а область содержимого будет установлена на фактические ширины пикселя устройства и высоту.

application =
{
    content =
    {
        width = 320,
        height = 480,
        scale = "letterbox",
    }
}

Возможные scaleзначения включают в себя следующее:

  • "letterbox"- масштабирует область содержимого для заполнения экрана, сохраняя при этом тот же формат. Область все содержимое будет находиться на экране, но это может привести к «черным полосам» на устройствах с соотношением сторон , которые отличаются от вашего контента соотношения сторон. Однако следует отметить, что вы можете использовать этот «пустой» области и заполнить его с визуальными элементами, позиционируя их или расширяя их за пределы области содержимого. По сути, "letterbox"это режим идеального масштаба , если вы хотите , чтобы убедиться , что все в области контента отображается в пределах экрана границ на все устройства.
  • "zoomEven"- масштабирует область содержимого для заполнения экрана, сохраняя при этом тот же формат. Некоторые материалы могут «кровоточить» от краев экрана на устройствах с соотношением сторон , которые отличаются от вашего контента соотношения сторон. В принципе, "zoomEven"это хороший вариант , чтобы гарантировать , что весь экран заполнен области содержимого на все устройства (и содержание вырезке вблизи внешних краев приемлемо).
почтовый ящик zoomEven
  • "adaptive"- вместо статического контента области, динамический контент ширина и высота выбирается на основе устройства. При этом используется зависят от платформы эвристики , так что виртуальный DPI (количество Corona единиц контента на дюйм) составляет около 160 различных устройств. КСН, ширина и высота выбирается в соответствии с родной IOS , точка ширина / высота устройства (большинство IOS - устройства поддерживают примерно 160 точек на дюйм). На Android, сочетание стандартизированного DPI ( mdpi, hdpiи т.д.) и фактический экран ширина / высота в пикселях используется для расчета виртуального ширина / высота, предполагая , что виртуальный DPI 160. В Corona Simulator, эта шкала соответствует содержание ширина и высота для имитации устройства. Обратите внимание , что "adaptive"режим не поддерживается для MacOS настольных приложений, Win32 настольных приложений или приложений Windows Phone.
  • "zoomStretch"- масштабирует область содержимого, чтобы заполнить весь экран на любом устройстве, не обращая внимания на содержание соотношения сторон. Этот режим следует использовать с осторожностью, так как он будет растягиваться / основами изображения и текста, если соотношение сторон устройства не точно соответствует пропорции области содержимого в.

XALIGN | YALIGN

По умолчанию, масштабируется содержание центрируется на экране. В letterboxмасштабе режиме пустая область экрана будет поровну разделена между обеими сторонами. В zoomEvenрежиме область обрез будет обрезана одинаково с обеих сторон.

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

  • xAlign- строковое значение , которое задает выравнивание в й направлении. Возможные значения "left", "center"или "right".
  • yAlign- строковое значение , которое задает выравнивание в у направления. Возможные значения "top", "center"или "bottom".
application =
{
    content =
    {
        width = 320,
        height = 480,
        scale = "letterbox",
        xAlign = "left",
        yAlign = "top"
    }
}

Динамический выбор изображения

В дополнение к масштабирования контента, Корона поддерживает динамический выбор изображения . Если вы разрабатываете приложение для нормальных и / HD устройств Retina, вы не должны полагаться на Corona просто масштабировать один набор изображений через широкий спектр разрешений экрана. Есть несколько вопросов , связанных с этим:

  1. Если вы проектируете все ваши изображения с низким разрешением и позволяет Corona масштабировать их для Retina / HD устройств, изображения будут выглядеть размытыми или некачественно. Мало того, что этот результат в плохом внешнем виде, но это может вызвать приложение должно быть отвергнуто, прежде чем он достигнет рынка.
  2. В отличие от этого, если вы проектируете все ваши изображения для Retina / HD и позволяют Corona масштабировать их для устройств с низким разрешением, тем больше изображений потребуется такое же количество текстурной памяти на этих устройствах. Это может негативно повлиять на производительность вашего приложения - или еще хуже, эти изображения не будут появляться, если они превышают максимальный размер текстуры на устройстве.

Решение состоит в том, чтобы создать несколько версий каждого изображения, адаптированные для двух или трех различных разрешений, и назвать их в соответствии с «набором изображений» они принадлежат. На каждом устройстве, Corona будет автоматически выбирать изображения из набора , который наиболее точно соответствует области содержимого и масштаба.

Важный

Эта функция поддерживается только изображениями , отображаемой с помощью display.newImageRect () или с помощью спрайтов и изображений , полученных из графических листов , которые содержат общие параметры размера листа.

Чтобы настроить динамический выбор изображения, вы должны включать в себя imageSuffixтаблицу внутри contentтаблицы. Внутри этой таблицы, объявить по меньшей мере один ключ-значение пару , состоящую из суффикса изображения и масштабного коэффициента .

imageSuffix =
{
    ["@2x"] = 2.0,
    ["@4x"] = 4.0
}

Как указано, каждый суффикс изображения должны быть указаны в скобках и кавычках , как в ["@2x"]. Суффикс можно назвать все , что вы хотите, но это должно быть коротким и логично , так как вы должны добавить один и тот же суффикс всех файлов изображений , предназначенных для этого набора изображений. При добавлении суффикса к каждому файлу изображения, не включают в себя кронштейн или кавычки - просто добавьте сам суффикс, например , myImage@2x.pngили myImage@4x.png.

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

print( display.pixelWidth / display.actualContentWidth )

Добавьте этот код в свой проект, получить доступ к Corona Simulator, и использовать Window → View Как имитировать различные устройства. Обратите внимание на выход в Corona Simulator консоли - это масштабный коэффициент для устройства. Если значение на конкретном устройстве больше или равно количеству, указанному для масштабного коэффициента, Corona будет использовать изображения из этого набора суффикса.

Важный

Если вы используете виджеты из Corona виджетов библиотеки, вы должны придерживаться стандартных @2xи @4xсуффиксов опций, в противном случае соответствующие привет разрешения активы не будут выбраны на Retina / HD устройств. Обратите внимание , что это правило не относится к визуально настроенным виджетам , для которых вы создали собственные активы и / или графические листы - в этом случае вы можете использовать любые настройки суффиксов и название активов соответственно.

ПРИМЕР

В следующем примере, только один суффикс определен ( "@2x"), но он вмещает несколько с высоким разрешением устройств. Решения ниже этого масштабного коэффициента будет просто использовать не-суффиксом набор изображений. Не суффиксом набор изображений должны быть включены в каждый проект в качестве основной меры предосторожности - это гарантирует , что если конкретное устройство выходит за пределы диапазона масштабного коэффициента (ов) вы определили, Корона может использовать эти изображения вместо.

application =
{
    content =
    {
        width = 320,
        height = 480,
        scale = "letterbox",
        xAlign = "center",
        yAlign = "center",
        
        imageSuffix =
        {
            ["@2x"] = 1.5
        }
    }
}
Заметка

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

Свойства контента

Некоторые свойства подвергаются в Короне , чтобы помочь вам работать с масштабируемым содержимым, в том числе тех , которые упомянуты ниже. Пожалуйста , обратитесь к API Reference для полного списка.

  • display.contentWidth и display.contentHeight - только для чтения свойства , представляющие первоначальную ширину и высоту содержимого, в пикселях.
  • display.pixelWidth и display.pixelHeight - только для чтения свойства , представляющие всю ширину и высоту экрана в пикселях.
  • display.viewableContentWidth и display.viewableContentHeight - только для чтения свойства , представляющие видимую ширину и высоту. Это полезно , если вы используете zoomEvenмасштабирование, так как она покажет просматриваемые (Некупированные) измерения в пикселях.
  • display.actualContentWidth и display.actualContentHeight - только для чтения свойства , представляющие ширину и высоту в Corona единиц контента на экране. Результат зависит от scaleнастройки , упомянутой выше.
  • display.contentCenterX и display.contentCenterY - только для чтения свойства , представляющие центральную часть области контента, полезные для позиционирования объектов вдоль любой центральной оси.

Ошибки среды выполнения

В Corona Simulator, есть настройка под Preferences называется Показать время выполнения Ошибки , которые по умолчанию на . Эта глобальная настройка вызывает всплывающие сообщения об ошибках при запуске приложения в симуляторе. Если вам не нравится эта функция или , если он не соответствует вашей работе, вы можете отключить его.

Вы также можете установить это на основе каждого приложения от config.luaконтроля сообщений об ошибках при запуске приложения на устройстве. showRuntimeErrorsпринимает логическое значение ( trueили false) . Значение по умолчанию зависит от того , строится приложение для распространения: если приложение построено с разработчиком провизий профиля или отладочной хранилище , то по showRuntimeErrorsумолчанию будет true, в противном случае он будет по умолчанию false. Очевидно, что явная установка будет переопределить значение по умолчанию.

application =
{
    showRuntimeErrors = true,
}
Заметки
  • Помните , что отключение сообщений об ошибках не означает , что ошибки не происходит. В всплывающие предупреждения просто помочь вам обнаружить эти ошибки.
  • Другой вариант заключается в использовании unhandledErrorвремени выполнения слушателя перехвата ошибки , которые бы в противном случае вызвать об ошибке всплывающего окна . Это позволяет реализовать пользовательские отчеты об ошибках. Обратите внимание , что даже если отключить сообщения об ошибках, слушатель еще называют, но returnзначение не имеет значения , так как всплывающий никогда не отображаются.
function myUnhandledErrorListener( event )
    local iHandledTheError = true
    if ( iHandledTheError ) then
        print( "Handling the unhandled error", event.errorMessage )
    else
        print( "Not handling the unhandled error", event.errorMessage )
    end
    
    return iHandledTheError
end
Runtime:addEventListener( "unhandledError", myUnhandledErrorListener )

Частота кадров (кадров в секунду)

Частота кадров по умолчанию составляет 30 кадров в секунду, но вы можете установить его до 60 кадров в секунду, добавив fpsключ. Кроме значения 30или 60будут проигнорированы.

application =
{
    content =
    {
        fps = 60,
    }
}

App Лицензирование

Корона лицензирования библиотека позволяет подтвердить , что приложение было куплено в магазине. Для осуществления лицензирования, то licenseтаблица должна быть добавлена в applicationтаблицу config.lua.

application =
{
    license =
    {
        google =
        {
            key = "Your key here",
            policy = "this is optional",
        },
    },
}

Кроме того, вы должны лицензирования библиотеки в файле проекта ядра ( ):require()main.lua

local licensing = require( "licensing" )
licensing.init( "google" )

Shader Precision

Это используется для замены шейдеров по умолчанию точности для всех шейдеров OpenGL ES (на устройствах).

Допустимые значения "highp", "mediump"и "lowp".

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

application =
{
    content =
    {
        shaderPrecision = "highp",
    },
}

ТОНКАЯ НАСТРОЙКА

Присвоение значения строки , как описанные выше изменит значение всех точности квалификационных макросов. Таким образом, еще один вариант , чтобы установить индивидуальные точности макросы, назначая таблицу shaderPrecision. Эта таблица должна содержать Corona точности квалификаторов макросов в качестве ключей и OpenGL ES прецизионных классификаторов в качестве значений, например:

application =
{
    content =
    {
        shaderPrecision =
        {
            P_POSITION = "highp",
            P_UV = "mediump",
            P_COLOR = "lowp",
        },
    },
}

Приемлемые ключи P_DEFAULT, P_RANDOM, P_NORMAL, P_POSITION, P_UV, и P_COLOR.

Допустимые значения для этих клавиш "highp", "mediump"и "lowp".

Для получения дополнительной информации см Precision Классификатор Macros раздел Пользовательские Shader Effects руководства.

Заметка

Присвоение значения / таблицы shaderPrecisionбудет изменить поведение и производительность всех пользовательских шейдерных эффектов и встроенных эффектов .

Application Environment / Облость применения

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

Жизненный цикл

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

После того , как первоначальная настройка завершена, программа вводит событие / рисунок цикл , в котором событие вызвать слушатель в коде, что приводит к изменениям в экране. Имейте в виду , что экран не будет обновляться , пока ваша начальная установка не завершена. Поэтому рекомендуется , чтобы вы «ленивую» выполнять операции.

Глобальное время выполнения объекта

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

песочница

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

События приложений

ПРЕКРАЩЕНИЕ

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

ПЕРЕРЫВЫ

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

Performance and Optimization / Производительность и оптимизация

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

Использование памяти Эффективно

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

  1. Устранение утечек памяти - приложение должно не иметь утечек памяти. Хотя Lua обрабатывает управление памятью и очистки автоматически, утечки памяти все еще может произойти. Например, глобальные переменные никогда не считается мусором; это до вас , чтобы сказать Lua , что эти переменные мусора, установив их nil. Глобальные переменные не рекомендуется вообще, но если вы должны использовать их для удобства, убедитесь , что вы не удалите их из памяти , когда они больше не нужны.
  2. Храните файлы ресурсов как можно - файлы ресурсов , используемые приложением , как правило , находятся на диске. Они должны быть загружены в память , прежде чем они могут быть использованы. Изображения и звуковые файлы должны быть как можно меньше . Вы также должны повторно использовать одни и те же активы изображения всякий раз , когда это возможно. Например, если вы разрабатываете меню флипа-стиль с тем же фоновым изображением для каждой страницы, вы должны использовать это изображение на всех страницах и слой необходимых изображений переднего плана над ним. Для получения более подробной информации, пожалуйста , см Сохраняя текстурной памяти ниже.
  3. Загружайте ресурсы лениво - избежать загрузки файлов ресурсов , пока они на самом деле нужно. В то время предварительной загрузка файлы ресурсы могут показаться , как хорошая практика, это действительно может иметь неприятные последствия из - за того , как устройства реагируют на низкие ситуации памяти. Заметным исключением является аудио файлов. В общем, вы должны загрузить звуковые эффекты для конкретной сцены или уровня , прежде чем он начнет, потому что загрузка их по требованию может вызвать небольшой пропуск во время критичных кода. Для получения дополнительной информации см Управление аудио ниже.
  4. Удаление объектов из иерархии отображения - при создании объекта отображения, он неявно добавляется к иерархии дисплея. Если вам больше не нужен экранный объект, вы должны удалить его из иерархии отображения и установите ссылку на nil. Это делает объект допущено к участию в процессе сборки мусора. Тем не менее, это не является гарантией того, что объект будет удален из памяти. Если другие переменные в памяти ссылки на экранный объект, Lua будет не рассматривать это мусор. См Экранные объекты , руководство для получения дополнительной информации об удалении объектов.

Снижение энергопотребления

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

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

  1. Не «опрос»; вместо этого, подключаться к внешним серверам сети только в случае необходимости.
  2. Оптимизация данных, которую вы передаете, так что это как можно меньше.
  3. Передача в пачках. Больше мощности расходуется на дольше сеть активно передает данные. Это лучше для передачи данных в пакетах, а не распространяя его на более мелкие пакеты передачи с течением времени.

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

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

Переходы и Анимация

Если вам необходимо установить или переход конкретного свойство нескольких экранных объектов с тем же значением - например, выцветает целиком меню наложения на alpha=0- это лучше , чтобы добавить объекты к группе отображения и изменить свойство всей группы. Это проще код и оптимизирует память и скорость. См Programming Group руководство для получения дополнительной информации.

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

Сохраняя Texture Memory

Texture память часто игнорируется , пока он не достигнет «Критикал Масс» , на котором указывают , что это отнимает много времени , чтобы внести необходимые изменения в художественных активов.

Как общая практика, помните эти советы в отношении к управляющей памяти текстуры:

  1. Всегда вынимайте текстуры (не удалять их из иерархии дисплея), когда они больше не нужны.
  2. Если вы используете изображения листов, рекомендуется использовать инструмент , как TexturePacker упаковать ваши изображения в наименьшей конфигурации возможно.
Важный

Существует ограничение на максимальный размер текстуры , который будет поддерживать устройство. При превышении этого предела, то текстура будет автоматически уменьшение масштаба , чтобы вписываться в максимуме. Вы можете использовать system.getInfo( "maxTextureSize" )команду , чтобы определить максимальный размер текстуры для конкретного устройства. См system.getInfo () для получения дополнительной информации.

Draw Calls / Дозирование

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

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

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

Lua Оптимизация

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

ЛОКАЛИЗОВАТЬ, ЛОКАЛИЗУЙТЕ

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

--NON-LOCAL (DISCOURAGED)
CCX = display.contentCenterX  --global variable
for i = 1,100 do
    local image = display.newImage( "myImage" )
    image.x = CCX
end
--LOCAL (RECOMMENDED)
local CCX = display.contentCenterX  --local variable
for i = 1,100 do
    local image = display.newImage( "myImage" )
    image.x = CCX
end

Это также относится к основным Lua библиотек , таких как mathбиблиотеки. В критических по времени процедур, вы всегда должны локализовать библиотечные функции.

--NON-LOCAL (DISCOURAGED)
local function foo( x )
    for i = 1,100 do
        x = x + math.sin(i)
    end
    return x
end
--"EXTERNAL" LOCAL (RECOMMENDED)
local sin = math.sin  --local reference to 'math.sin'
local function foo(x)
    for i = 1,100 do
        x = x + sin(i)
    end
    return x
end

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

--NON-LOCAL (DISCOURAGED)
function func1()
   func2( "myValue" )
end
function func2( y )
   print( y )
end
func1()
--LOCAL (RECOMMENDED)
local function func2( y )  --'func2' properly scoped above 'func1'
   print( y )
end
local function func1()
   func2( "myValue" )
end
func1()

ИЗБЕГАЙТЕ "TABLE.INSERT ()"

Давайте сравним четыре методы , что все достижения то же самое: общий акт вставки значений в таблицу. Из четырех, то Lua table.insert()функция является посредственным исполнителем и его следует избегать.

--table.insert() (DISCOURAGED)
local a = {}
local table_insert = table.insert
for i = 1,100 do
   table_insert( a, i )
end
--LOOP INDEX METHOD (RECOMMENDED)
local a = {}
for i = 1,100 do
    a[i] = i
end
--TABLE SIZE METHOD (ACCEPTABLE)
local a = {}
for i = 1,100 do
   a[#a+1] = i
end
--COUNTER METHOD (RECOMMENDED)
local a = {}
local index = 1
for i = 1,100 do
   a[index] = i
   index = index+1
end

ИЗБЕГАЙТЕ «РАСПАКОВАТЬ ()»

Lua unpack()функция не является большим исполнителем. К счастью, простой цикл можно записать , чтобы выполнить то же самое.

--unpack() (DISCOURAGED)
local a = { 100, 200, 300, 400 }
for i = 1,100 do
   print( unpack(a) )
end
--LOOP METHOD (RECOMMENDED)
local a = { 100, 200, 300, 400 }
for i = 1,100 do
   print( a[1],a[2],a[3],a[4] )
end

Проблема заключается в том , что вы должны знать длину стола , чтобы получить все значения в методе цикла. Таким образом, по- unpack()прежнему имеет свои преимущества - в таблице неизвестной длины, например , - но следует избегать критических по времени процедур.

ИЗБЕГАЙТЕ "IPAIRS ()"

При переборе таблице, накладные расходы на Lua ipairs()функции не оправдывает его использование, особенно , когда вы можете сделать то же самое с помощью Lua построить.

--ipairs() (DISCOURAGED)
local t1 = {}
local t2 = {}
local t3 = {}
local t4 = {}
local a = { t1, t2, t3, t4 }
for i,v in ipairs( a ) do
   print( i,v )
end
--LUA CONSTRUCT (RECOMMENDED)
local t1 = {}
local t2 = {}
local t3 = {}
local t4 = {}
local a = { t1, t2, t3, t4 }
for i = 1,#a do
   print( a[i] )
end

MATH PERFORMANCE

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

--MULTIPLICATION BY DECIMAL (RECOMMENDED)
x * 0.5 ; y * 0.125
--DIVISION (DISCOURAGED)
x/2 ; y/8

Умножение также быстрее, чем экспоненциации:

--MULTIPLICATION (RECOMMENDED)
x * x * x
--EXPONENTIATION (DISCOURAGED)
x^3

Наконец, во избежание math.fmod()для положительных чисел и использовать оператор модуля вместо этого:

--math.fmod() (DISCOURAGED)
local fmod = math.fmod
for i = 1,100 do
   if ( fmod( i,30 ) < 1 ) then
      local x = 1
   end
end
--MODULUS OPERATOR (RECOMMENDED)
for i = 1,100 do
   if ( ( i%30 ) < 1 ) then
      local x = 1
   end
end

Управление аудио

Звуковые эффекты для приложения почти всегда должны быть предварительно загружены в , не -time критичных кода, например, перед началом сцены или уровня. Кроме того, вы должны сжать / образец звуки наименьшему приемлемого качества в большинстве случаев. 11kHz моно (не стерео) считается приемлемым в большинстве случаев, так как пользователь, вероятно , будет слушать через телефон / планшет динамик или наушники. Кроме того , используя простые форматы кросс-платформенный , как WAV не облагают процессор сильно.

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

local soundTable = {
   mySound1 = audio.loadSound( "a.wav" ),
   mySound2 = audio.loadSound( "b.wav" ),
   mySound3 = audio.loadSound( "c.wav" ),
   mySound4 = audio.loadSound( "d.wav" ),
   mySound5 = audio.loadSound( "e.wav" ),
   mySound6 = audio.loadSound( "f.wav" ),
   mySound7 = audio.loadSound( "g.wav" ),
   mySound8 = audio.loadSound( "h.wav" ),
}

С этой структурой, воспроизведение так же просто, как:

local mySound = audio.play( soundTable["mySound1"] )

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

local ST = soundTable
for s=#ST,1,-1 do
    audio.dispose( ST[s] ) ; ST[s] = nil
end

Debugging Guide / Руководство по отладке

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

Задний план

К сожалению! Что-то ужасно неправильно. Моя программа разбилась, или распечатана нонсенс, или, кажется, бежит навсегда. Что теперь?

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

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

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

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

Использование Corona Editor

Корона Редактор является дополнением функции для Sublime Text . Это позволяет увидеть отладочные сообщения в Sublime Text , не нуждаясь в окне консоли. Она также позволяет проверять свой код , используя интерактивный отладчик.

После того как вы Sublime Text и Corona Editor установлен, то он может помочь вам отладки кода. Например, вы можете остановить Corona Simulator в определенных точках и проверить состояние вашего кода, или вы можете пройти через код и проверять значения переменных по пути. Кроме того, вы можете следить за трассировку стека из приложения для более всеобъемлющих целей отладки.

ИСПОЛЬЗОВАНИЕ ТОЧЕК ОСТАНОВА

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

Вы можете включить или отключить точки (тумблер) перерыв в одном из двух способов:

  • Нажмите на строку кода и выберите Corona EditorCorona DebuggerToggle Breakpoint из главного меню.
  • Щелкните правой кнопкой мыши на строку кода и выберите Toggle Breakpoint из всплывающего контекстного меню.

Когда вы установите точку останова, небольшой Corona логотип появится на линии. Затем, когда вы запускаете приложение из Sublime Text через Corona EditorCorona DebuggerRun , он остановится , когда он достигнет этой строки кода и вернуться к Sublime Text. На данный момент, у вас есть несколько вариантов:

  • Run - Бегите код до следующей точки останова или до завершения.
  • Step Over - Это шаг вперед на одну строку кода, и если это функция, она завершит функцию и останавливается на следующей строке кода.
  • Step Into - Это шаг вперед на одну строку кода, и если это функция, она будет ввести функцию и остановится на первой строке этой функции.
  • Переключить точку останова - Выключить контрольную точку или установить новый.
  • Проверьте Variable - См Проверка переменных ниже.
  • Стоп - Остановить программу.

ПРОВЕРКА ПЕРЕМЕННЫХ

В главном меню выберите Corona DebuggerПроверьте переменную . Поиск бар откроется в нижней части Sublime Text и вы можете ввести любой допустимой переменной. После этого вы увидите детали этой переменной, а если это таблица, это может обеспечить лучшее визуальное представление по сравнению с тем, что , как правило , доступны.

СТЕК TRACING

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

Для получения дополнительной информации о трассировке стека см Просмотр Runtime ошибки ниже.

Консоль / Отладка устройств

ПРОСМОТР RUNTIME ОШИБКИ

Если у вас есть шоу Runtime ошибок включена в настройках Corona Simulator, ошибка во время выполнения (те , которые сбоят приложение) прервет программу и открыть диалоговое окно сообщения с дополнительной информацией об ошибке, в том числе:

  • Имя файла , в котором произошла ошибка, например main.lua.
  • Номер строки в этом файле , где произошла ошибка, например Line 218.
  • Причина ошибки, такие как Attempt to perform arithmetic on a nil value..
  • Трассировки стека , который может помочь вам найти происхождение ошибки, например:
stack traceback:
    main.lua:218: in function 'start'
    main.lua:222: in main chunk

Эта коллективная информация , как правило , выявляет точное место в коде , где проблема лежит. В этом примере, вы можете открыть main.luaфайл, найдите строку 218, и искать работу по математике , где один из значений nil- в частности, это место , где вы пытаетесь выполнить математику на неопределенной переменной. Кроме того, трассировки стека показывает , что ошибка находится в пределах функции по имени start, и эта функция была вызвана из линии 222.

Иногда трассировки стека менее специфичен и должны соблюдаться тщательно. Например:

?: in function

ОТЛАДКА УСТРОЙСТВ - ANDROID

Отладка Android является немного более «командной строкой ориентированной», но как только вы выясните команды, это достаточно быстро, чтобы установить приложение, просматривать журнал как прогоны приложения, и обратите внимание на сообщения об ошибках.

Во- первых, необходимо установить некоторые бесплатные инструменты от Google под названием Android Debug Bridge . Просто выполните следующие действия:

  1. Посетите загрузки страницы. Вместо того , чтобы нажать на кнопку загрузки большой, нажмите на Параметры загрузки ссылки. Затем, в получить только инструменты командной строки раздела, выберите правильный вариант для вашей системы.
  2. Установите инструменты. В операционной системе Windows, запустите программу установки; на MacOS, распаковать файл и переместить папку в разумном месте.
  3. Следуйте инструкции для добавления SDK пакетов . Установите по крайней мере Android SDK Tools и Android SDK Platform-инструменты .

После того , как средства будут установлены, вы можете использовать инструменты командной строки. С подключен ваш Android устройство, просто введите следующую команду в терминале (MacOS) или командной строки (Windows) и часы появляются сообщения. Эта команда будет отфильтровывать все сообщения , за исключением тех , порождено Corona.

adb logcat Corona:v *:s

Иногда ошибки генерируются вещи , кроме Corona, например сообщения из Google Play связан с Google In-App покупок. Чтобы увидеть весь журнал, используйте эту команду вместо:

adb logcat

Это позволит предотвратить фильтрацию для Corona-специфической активности, но он будет генерировать большое количество сообщений , и это будет трудно найти те , которые относятся к этой проблеме. Таким образом, это может быть полезно включать некоторые print()заявления в пределах кода вблизи области, подозреваемый является проблематичным. Например:

print( "MYAPP - Purchase: *********************************************" )
store.purchase( "com.coronalabs.NewExampleInAppPurchase.NonConsumableTier1" )

Если вы предпочитаете более визуальный инструмент, ADB также предлагает версию с графическим интерфейсом adb logcatпод названием монитора . Вам может понадобиться установить устройство в «режим разработчика» , чтобы использовать эти инструменты, и каждое устройство и версию Android обнажает это по - разному, поэтому мы предлагаем вам искать в Интернете для конкретной операционной системы и «режим разработчика» , чтобы найти инструкции ,

ОТЛАДКА - WIN32 DESKTOP

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

ОТЛАДКА - MACOS DESKTOP

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

Советы и распространенные ошибки

Есть некоторые общие проблемы, которые, как правило, просто, чтобы решить, как только вы знаете о них.

ПРАВИЛЬНОЕ ОТСТУП

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

local function doSomething( params )
if params.someValue == 10 then
if params.someOtherValue == "test" then
params.yetAnotherValue = params.someValue
end
end

Без отступа линии, чтобы показать различные блоки кода, это очень трудно читать. В самом деле, есть ошибка, которая была бы очевидна, если код был отступом правильно. Сравните разницу:

local function doSomething( params )
    if params.someValue == 10 then
        if params.someOtherValue == "test" then
            params.yetAnotherValue = params.someValue
        end
    end

Как вы можете видеть, есть отсутствует endключевое слово для doSomethingфункции, и это отчетливо проявляется , когда код правильно отступ.

Многие редакторы кода может помочь вам автоматически отступы код и, когда вы закрываете блок, он будет отступить на один уровень и поставить endв правильное место. Каждая операционная система имеет выбор редакторов кода, а также лучшие редактор функции Lua подсветку синтаксиса. Список рекомендуемых редакторов, ознакомьтесь с руководством по установке для MacOS или Windows , .

ОПИСАТЕЛЬНАЯ НЕЙМИНГ

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

local function a( b )
    local c = b.target
    if c.x < 100 then
        c.alpha = 0
    end
    return true
end
local function touchEventHandler( event )
    local target = event.target
    if target.x < 100 then
        target.alpha = 0
    end
    return true
end

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

СООБРАЖЕНИЯ УСТРОЙСТВА

Некоторые разработчики встревожены, чтобы найти, что их проект работает в Corona Simulator, но не на их реальном устройстве. Как правило, один из следующих факторов виновато:

  • Имена файлов не чувствительны к регистру . При тестировании на MacOS или Windows, имена файлов не чувствительны к регистру , но при запуске на устройстве, имена файлов должны совпадать в случае. Например, имя файла titleimage.pngи TitleImage.PNGто же в Corona Simulator, но они считаются разными , на устройстве.
  • Существует ошибка в build.settingsфайле, и часто это происходит потому , что различные блоки и таблицы не правильно вложены. Пожалуйста , ознакомьтесь с Параметрами построения проекта руководством для получения инструкций о том , как правильно построить build.settingsфайл и каждый раздел в нем.
  • Там проблема с плагином . Каждый модуль должен быть включен в точности , как указано, и несколько плагинов требуют устройств разрешения для того , чтобы нормально функционировать. Пожалуйста , смотрите соответствующий плагин документацию для деталей.

СЛУШАТЕЛЬ УДАЛЕНИЕ

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

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

local function handleGPS( event )
    timer.performWithDelay( 10, function() Runtime:removeEventListener( "location", handleGPS ); end )
end

Поддержка сообщества

РАСПОЛОЖЕНИЕ РЕШЕНИЯ

Если вы исчерпали все вышеперечисленные методы отладки, перейдите к Форумам Corona . Там вы можете найти темы , которые описывают один и тот же вопрос вы боретесь с. Часто, другой разработчик сообщил тот же вопрос , и, во многих случаях, поток будет содержать решение - как таковые, пожалуйста , не создать новую тему , не первый в поисках ответа на существующих потоках.

Обратите внимание, что новые вкладчики будут иметь свои первые после замедлителя - они будут введены в систему, но они не будут видны другими пользователями, пока не одобрен модератором.

ЗАПРОС ПОМОЩИ

Если вы не можете найти решение в любых предыдущих темах форума, пожалуйста, напишите новый запрос и следуйте этим рекомендациям:

  • Не размещайте эту же тему несколько раз. Кроме того , выбрать наиболее подходящий суб-форум для вашей теме, а также воздержаться от размещения и ту же тему в нескольких суб-форумах.
  • Включить достаточно информации для того, чтобы сообщество может помочь. Вы должны предоставить следующие документы:- Подробное описание проблемы вы имеете.
    - краткое количество коды вокруг проблемной области, если это необходимо.
    - Если вы используете MacOS или Windows.
    - Если вы строите для IOS, Android или Windows Phone.
    - Какая версия / сборка Corona , которую вы используете.
    - Соответствующие сообщения об ошибках из журнала консоли.
    - Скриншоты / изображения , которые могут помочь сообществу визуализировать проблему.
  • При включении кода в сообщении на форуме, окружать его с [lua] [/lua]тегами для ясности и читаемости:
[lua]
...
[/lua]
  • Чтобы включить скриншоты или изображения, щелкните Дополнительные параметры ответа кнопку ниже входного окне сообщения. На следующем экране, используйте присоединять файлы в раздел , чтобы загрузить файлы изображений. Для видео на YouTube или Vimeo, просто вставьте URL видео вместе с сообщением.

Building and Distribution

Время построения свойство для приложения определяется с помощью дополнительного build.settingsфайла , написанного в синтаксисе Lua. Он должен находиться в базовой директории проекта.

Заметка

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

Важный

Базовая структура

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

settings =
{
    -- Child tables here
}

App Ориентация

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

Важный

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

  1. Заставка (см заставку ниже).
  2. Родные элементы пользовательского интерфейса, такие как предупреждения и визуальная клавиатура.
  3. Сам дисплей этап Корона.

Все настройки ориентации должны содержаться в orientationтаблице в settings:

settings =
{
    orientation =
    {
        -- Parameters
    },
}

В orientationтаблице есть два дополнительных ключевых значений: defaultи supported:

settings =
{
    orientation =
    {
        default = "",    -- Initial launch orientation
        supported = {},  -- Table of allowed options for auto-orientation
    },
}

Каждый из них принимает следующие условные ориентации :

имя ориентация
"portrait" Устройство в вертикальном положении с домашней кнопкой в ​​нижней части
"portraitUpsideDown" Устройство в вертикальном положении с домашней кнопкой в ​​верхнем
"landscapeLeft" Устройство в горизонтальном положении с домашней кнопкой слева
"landscapeRight" Устройство в горизонтальном положении с домашней кнопкой в ​​правом

АВТО-ОРИЕНТАЦИЯ

На большинстве устройств автоматической ориентация инициируются акселерометром , если устройство вращается или отраженным во время выполнения. Если вы хотите ограничить приложение к любому альбомной ориентации, укажите , как "landscapeLeft"и "landscapeRight"в supportedтаблице.

supported = { "landscapeLeft", "landscapeRight" },

Аналогичным образом , чтобы ограничить приложение к любой портретной ориентации, указать , как "portrait"и "portraitUpsideDown":

supported = { "portrait", "portraitUpsideDown" },
Важный
  1. Когда изменения ориентации устройства, то координаты положения (0,0) на этапе отображения Corona будет соответствовать в верхнем левом углу текущей ориентации.
  2. IPAD игнорирует defaultнастройки и пытается запустить в текущей физической ориентации устройства, при условии , что ориентация указана в списке поддерживаемых.
  3. Если вы когда - нибудь нужно определить ориентацию текущего устройства, оно может быть считан из system.orientation собственности. Это обеспечит значение из четырех стандартных конвенций , перечисленных выше. Кроме того, IOS , устройства могут сообщить либо "faceUp"или "faceDown"ориентацию.

IOS Построить Настройки

В settingsтаблице, вы можете включить plistтаблицу вложенной в пределах iphoneтаблицы. Эта plistтаблица используется для установки значения для скомпилированного приложения Info.plistфайла.

settings =
{
    iphone =
    {
        plist =
        {
            CFBundleIconFiles = {},  -- Required!
            UILaunchStoryboardName = "LaunchScreen"-- Required!
            UIStatusBarHidden = true,
            CFBundleDisplayName = "Corona App",
            CFBundleName = "Corona App",
        },
    },
}
Важный
  • iphoneТаблица охватывает все IOS устройств, а не только картинки устройств.
  • Для логических значений в plistключах, использовать Лу стиль булевы ( trueили false) , а не Objective-C булевых ( YESили NO) .

В приведенном выше примере, несколько общих plistключей показаны:

  • CFBundleIconFiles( Таблица ) - это требуется таблица файлов приложения значок изображение , чтобы связать с приложением. См пользовательских приложений иконки ниже подробно.
  • UILaunchStoryboardName- это требуется строка указывает на действительный .storyboardcфайл. См IOS Launch экрана ниже для важных деталей.
  • UIStatusBarHidden( Булево ) - определяет , является ли строка состояния первоначально должны быть скрыты , когда приложение запускается.
  • CFBundleDisplayName( Строка ) - на дисплее имя пакета. Если вы не нужны локализовать приложение и имя пакета содержат только символы ASCII, опустить этот ключ и указать имя пакета , как имя приложения в имитаторе Строить для IOS окна. Если локализовать приложение ( руководство ), включить этот ключ как plistтаблицы и в InfoPlist.stringsфайлах ваших языковых подкаталогов наряду с локализованными CFBundleNameключами.
  • CFBundleName( Строка ) - это короткое имя , приложение 16 символов или менее. Если имя пакета содержит только символы ASCII, опустить этот ключ и указать имя пакета , как имя приложения в имитаторе Строить для IOS окна. Если локализовать приложение ( руководство ), этот ключ должен быть включен в plistтаблицу , а также рядом CFBundleDisplayNameв InfoPlist.stringsфайлах ваших языковых подкаталогов . Если вы не локализовать приложение, вы можете включить этот CFBundleNameключ в plistтаблице, но не включают в себя CFBundleDisplayNameключ.

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

ПРАВА ДОСТУПА

КСН, при доступе к определенной аппаратной или OS уровня функциональности, вы должны уведомить пользователя , почему вы делаете это. Это достигается за счет включения конкретных ключи / описания в plistтаблице build.settings. Например:

settings =
{
    iphone =
    {
        plist =
        {
            NSCameraUsageDescription = "This app would like to access the camera.",
            NSPhotoLibraryUsageDescription = "This app would like to access the photo library.",
        },
    },
}

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

Важный

В Corona, следующие API, поражаются разрешениями IOS, так что вы должны включать ключ разрешения (ов) было отмечено в соответствующем API документации, если вы используете какой-либо из этих команд:

ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ СБОРКИ

В дополнение к настройкам IOS , упомянутых выше, следующие варианты сборки доступны , как описано в Advanced Settings Построить руководство:

Настройка / Feature Цель
Возможности устройств Используется, чтобы ограничить ваше приложение для установки на устройствах с определенными возможностями.
PNG Обработка Используется для обхода обработки PNG файлов ( pngcrush) во время сборки.

Android параметры сборки

В settingsтаблице, вы можете включить androidтаблицу для контроля параметров сборки для Android устройств.

settings =
{
    android =
    {
    },
}

КОД ВЕРСИИ

Вы можете изменить код версии введенную в Corona Simulator сборки для Android коробки с дополнительным versionCode ключ-значение пары в build.settingsфайле. Это внутренний номер , используемый для различения релизов приложений для Android магазина приложений, соответствующего versionCodeпункт подробно здесь . Этот параметр является невидимым для пользователей.

settings
{
    android =
    {
        versionCode = "11",
    },
}
Заметка

Код версии должен быть задан как целое число - оно не может содержать каких - либо знаков после запятой. Одна из возможных схем является установка versionCodeдля "10"для версии 1.0 . Следующее обновление будет "11"для версии 1.1 , и так далее.

ПРАВА ДОСТУПА

usesPermissionsТаблица создает тег в AndroidManifest.xmlфайле:

settings
{
    android =
    {
        usesPermissions =
        {
            "android.permission.INTERNET",
            "android.permission.WRITE_EXTERNAL_STORAGE",
            "android.permission.ACCESS_FINE_LOCATION",
            "android.permission.ACCESS_COARSE_LOCATION",
        },
    },
}

В приведенном выше примере, несколько полезных android.permissionключей экспонируются:

  • "android.permission.INTERNET" - позволяет приложение Corona для доступа в Интернет.
  • "android.permission.WRITE_EXTERNAL_STORAGE"- позволяет media.save()и поддержка камеры.
  • "android.permission.ACCESS_FINE_LOCATION" - позволяет получить доступ к GPS.
  • "android.permission.ACCESS_COARSE_LOCATION" - позволяет получить расположение от WiFi / сотовой связи.

Смотрите Android документации для получения дополнительной информации о поддерживаемых значениях и что вы можете сделать с ними.

APP ОСОБЕННОСТИ

usesFeaturesТаблица создает тег в AndroidManifest.xmlфайле. Эти параметры говорят о Android магазин приложений , какие возможности аппаратного / программного обеспечения приложение делает или не требует. Смотрите Android ссылку особенности для списка поддерживаемых значений.

settings
{
    android =
    {
        usesFeatures =
        {
            { name="android.hardware.camera", required=true },
            { name="android.hardware.location", required=false },
            { name="android.hardware.location.gps", required=false },
        },
    },
}
Важный

Если вы предоставляете разрешение на функцию , используя usesPermissionsтаблицу , описанную в предыдущем разделе , Android предполагает , что эта функция также требуется . Например, если вы предоставляете разрешение на CAMERA, то Android магазин приложение будет считать , что камера требуется для приложения , чтобы функционировать. Таким образом, устройство , не имеющие камеры не сможет загрузить или приобрести приложение. В качестве меры предосторожности, если ваше приложение использует камеру для некоторых функций , но не требует его для «базовой функциональности,» Вы должны включить функцию внутри usesFeaturesтаблицы и установите requiredключ false:

{ name="android.hardware.camera", required=false },

РАСШИРЕНИЕ ФАЙЛОВ

usesExpansionFileЛогическое значение указывает на то , что приложение должно быть построено с файлами расширения. Если он установлен в trueи цели сборки Google Play, все в директории проекта , кроме сценариев Lua помещаются в файл расширение. Смотрите Android документации для получения дополнительной информации.

settings =
{
    android =
    {
        -- This tells the Corona Simulator to create an expansion file
        usesExpansionFile = true,
        -- The following permissions are required to download expansion files
        usesPermissions =
        {
            "android.permission.INTERNET",
            "com.android.vending.CHECK_LICENSE",
            "android.permission.WRITE_EXTERNAL_STORAGE",
        },
    },
}

Использование файлов расширения требует установки лицензирования Google. Пожалуйста , смотрите здесь для подробностей.

ДОПОЛНИТЕЛЬНЫЕ ПАРАМЕТРЫ СБОРКИ

В дополнение к Android настроек , указанных выше, следующие варианты сборки доступны , как описано в Advanced Settings Постройте руководства:

Настройка / Feature Цель
Минимальная версия SDK Позволяет исключить приложение из устанавливаемого на устройствах с более старыми версиями Android.
Android TV Требуется, если вы устанавливаете приложение для Android TV.
Поддержка экрана Указывает / пределы, которые ЭКРАНЫ андроида поддерживает приложения.
Отключение доступа к файлам Используется для заблокировать доступ к файлам вашего приложения.
Большой Heap Прошу Android OS обеспечивает приложение с большим количеством памяти кучи.
Android Директивы Используется для точной настройки на AndroidManifest.xmlвашем приложении.

Настройки рабочего стола Построить

Для MacOS десктопе или Win32 настольных приложений, Корона build.settingsфайл поддерживает windowтаблицу для настройки рабочего стола окна соответствующего приложения:

settings =
{
    window =
    {
    },
}

Пожалуйста , обратитесь к примеру в Создание MacOS Desktop Apps или Создание Win32 Desktop Apps для деталей и полный список допустимых windowпараметров.

Плагины

Corona предлагает несколько плагинов , которые могут быть использованы в ваших проектах. Эти модули могут быть включены с помощью pluginsтаблицы вложены в settingsтаблице:

settings =
{
    plugins =
    {
    },
}

Например, Google Play Games Services плагин может быть включен следующим образом :

settings =
{
    plugins =
    {
        ["plugin.gpgs"] =
        {
            publisherId = "com.coronalabs"
        },
    },
}
Важный

Плагин ключевые имена часто включают в себя знаки препинания, например plugin.gpgs. В этих случаях необходимо использовать «скобки и кавычки» метод определения ключа ( ["plugin.gpgs"]).

Пользовательское App Иконка

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

Важный

Файлы Иконка изображения должны быть помещены в корневой папке проекта, а не в подпапках.

IOS

Для прошивки, все иконки должны придерживаться названий и размеров , перечисленных ниже. Для получения более подробной информации о создании иконок, пожалуйста , обратитесь к Руководству IOS Human Interface .

файл Размер (Ш × В)
Icon-40.png 40 × 40
Icon-58.png 58 × 58
Icon-76.png 76 × 76
Icon-80.png 80 × 80
Icon-87.png 87 × 87
Icon-120.png 120 × 120
Icon-152.png 152 × 152
Icon-167.png 167 × 167
Icon-180.png 180 × 180

Кроме того, необходимо указать эти имена файлов в CFBundleIconFilesтаблице следующим образом :

settings =
{
    iphone =
    {
        plist =
        {
            CFBundleIconFiles = {
                "Icon-40.png",
                "Icon-58.png",
                "Icon-76.png",
                "Icon-80.png",
                "Icon-87.png",
                "Icon-120.png",
                "Icon-152.png",
                "Icon-167.png",
                "Icon-180.png",
            },
        },
    },
}

ANDROID

Для Android, значок файлы будут скопированы в .apkпроцессе сборки, при условии , что они доступны в папке проекта. Эти значки должны придерживаться стандартного Android названий значков и размеров , перечисленных ниже. Для получения более подробной информации о создании иконок, пожалуйста , обратитесь к Руководству по проектированию Android Icon .

файл Размер (Ш × В)
Icon-xxxhdpi.png 192 × 192
Icon-xxhdpi.png 144 × 144
Icon-xhdpi.png 96 × 96
Icon-hdpi.png 72 × 72
Icon-mdpi.png 48 × 48
Icon-ldpi.png 36 × 36

РАБОЧИЙ СТОЛ

Настольные приложения - приложения, созданные для MacOS или Windows - требуются дополнительные значки следующим образом:

  • Для MacOS настольных приложений, необходимо добавить Icon-osx.icnsфайл в папку проекта Перед выполнением Macos построить через Corona Simulator. Этот файл должен содержать несколько изображений в различных разрешениях, затолкали в один .icnsфайл ( подробности ). Смотрите Создание Macos Desktop Apps руководство для получения дополнительной информации.
  • Для настольных приложений для Windows, необходимо добавить Icon-win32.icoфайл в папку проекта перед выполнением сборки Win32 с помощью Corona Simulator. Этот файл должен содержать несколько изображений в различных разрешениях, затолкали в один .icoфайл ( подробности ). Смотрите Создание Win32 Desktop Apps руководство для получения дополнительной информации.

TVOS / ANDROID TV

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

  • Для tvOS Apple, несколько уникальных иконок и активов требуются. Пожалуйста , смотрите здесь для подробностей.
  • Для телевизоров Android, вы должны включать в себя Banner-xhdpi.pngизображение внутри папки проекта. Это изображение должно быть 320 × 180 пикселей.

Всплеск / Запуск экрана

CORONA SPLASH SCREEN

По умолчанию экран Corona-брендинговой заставка появляется при запуске приложения. Этот экран заставки можно настроить или отключить с покупкой Всплеск Control Screen плагином. Пожалуйста , обратитесь к документации для получения подробной информации о настройке заставки с помощью build.settings, если вы купили плагин.

IOS ЗАПУСК ЭКРАНА

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

Для Вашего удобства (пусто) по умолчанию LaunchScreen.storyboardcдокумент автоматически добавляется ко всем новым шаблонам проектов. Же файл также в комплекте с самим приложением Corona, в случае , если вам нужно скопировать его к существующим проектам. Он может быть найден в папке приложения Corona SDK здесь:

/Resource Library/iOS/LaunchScreen.storyboardc

Раскадровка документ Xcode можно настроить с помощью собственных изображений / макет - смотрите в нашем руководстве для получения инструкций.

Важный

Если вы используете по умолчанию LaunchScreen.storyboardcфайл в существующем проекте, вы должны включать в себя UILaunchStoryboardNameключ внутри plistтаблицы , так что IOS признает существование файла. Обратите внимание на то, что значение ключа ( "LaunchScreen") совпадает с именем самого файла, минус расширение файла:

settings =
{
    iphone =
    {
        plist =
        {
            UILaunchStoryboardName = "LaunchScreen"-- Required!
        },
    },
}

Исключение файлов

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

Файлы должны быть исключены указаны на платформе - ios , android, macos, win32, tvos, или all- с помощью простого сопоставления с образцом , где *означает любую последовательность символов, в том числе иногда /. Другими словами, эти шаблоны совпадают имена путей файлов в приложение пачке в виде строк. Это правила имеет значение только если у вас есть сложная структура каталогов с несколькими экземплярами каталогов с тем же именем , на разных уровнях, например a/music, a/b/music, a/b/c/musicи т.д. Обратите внимание , что символ - разделитель каталогов всегда прямой слэш /, даже если строить на Windows.

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

settings =
{
    excludeFiles =
    {
        -- Exclude all files at paths which end with "secret.txt"
        all = { "*secret.txt" },
        
        -- Exclude all Android icon files and .ogg files in the "music" directory
        ios = { "Icon-*dpi.png", "music/*.ogg" },
        -- Exclude iOS "retina" image files and .m4a files in the "music" directory
        android = { "Icon.png", "*@2x.png", "music/*.m4a" },
        
        -- Exclude unnecessary assets from macOS desktop apps
        macos = { "Default*.png", "Icon*.png", "Icon*.ico", "Icon*.icns" },
        
        -- Exclude unnecessary assets from Win32 desktop apps
        win32 = { "Default*.png", "Icon*.png", "Icon*.ico", "Icon*.icns" },
        
        -- Exclude all Android icon files and .ogg files in the "music" directory
        tvos = { "Icon-*dpi.png", "music/*.ogg" },
    },
}

Исключение файлов является особенностью Corona SDK - это не работает для Corona Enterprise строит.

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

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

Улучшение вашего рабочего процесса путем тестирования на нескольких устройствах и различных платформах одновременно, все из одной кодовой базы Corona.

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

Важный

Для того, чтобы использовать Corona жить основан на Windows, вы должны установить Itunes .

Создание  онлайн сборки

Для создания живой сборки, просто выполните следующие действия:

  1. В Corona Simulator, откройте Сложение окно диалога ( Fileсборки ) для любого IOS, Android, или tvOS.
  1. Убедитесь, что первые несколько параметров являются правильными с точки зрения того, как вы обычно построить приложение с Corona Simulator. Если вы не знакомы с подготовкой / строительных приложений для устройств смотрите в следующих руководствах:
Важный

Только для разработки профилей Provisioning (IOS или tvOS) или Debug хранилище ключей (Android или Kindle пожарной) может быть использован для создания живой сборки.

  1. Проверьте Создать онлайн Постройте вариант, и, когда вы будете готовы, нажмите Построить кнопку.
Macos Windows
  1. После того, как сборка успешно завершена, .CoronaLiveBuildфайл будет создан в корневой директории проекта и проект будет добавлен Corona живого сервера.
  2. Установите приложение на нужное устройство (ы) , как обычно. Если вы не знакомы с этим процессом, обратитесь к документации для прошивки , Android , Kindle Fire или tvOS .
Заметка

Вы можете установить то же скомпилированное / встроенное приложение на нескольких устройствах. Например, если вы создаете стандарт .apkдля Android, вы можете установить его на нескольких Android питание устройств - вам не нужно создавать новую живую сборку для каждого устройства, которое вы собираетесь испытать на.

  1. Запустите приложение на устройстве, как обычно. Предполагая, что все работает, как и ожидалось, изменения кода / активов, которые вы делаете в вашем проекте должны быть отражены практически мгновенно на устройстве.
Важный
  • Когда вы запустите приложение, убедитесь, что устройство (ы) вы используете на той же локальной сети, что и компьютер, на котором Corona Живой Сервер работает.
  • Изменения в файлах проект конфигурации / установка, как build.settingsи config.luaобычно не будут отражаться, когда живые строить обновления. Таким образом, вы должны создать новую живую сборку и заново установить его на целевом устройстве (ы) после изменения этих файлов проект.
  • Если у вас возникли какие - либо проблемы с проектом синхронизации, пожалуйста, обратитесь к устранению неполадок в разделе ниже.

Corona онлайн сервер

Corona онлайн сервер представляет собой приложение, которое синхронизирует изменения проекта по локальной сети. Каждый раз, когда вы создать живую сборку , Корона Simulator будет инициировать его и автоматически добавляет встроенный проект в список проектов Живого сервера Corona.

Заметки
  • Для синхронизации проекта, Corona онлаин сервер должен найти правильный .CoronaLiveBuildфайл. Как указывалось выше, это будет создан при выполнении живой сборки проекта.
  • Для того, чтобы начать Corona Живой сервер вручную, выберите Corona SimulatorCorona Живой сервер .
  • Вы можете добавить проект, нажав кнопку [ + ] и выберите папку, содержащую проект, или просто перетащить папку на рабочем сервере значок Corona док - станции (MacOS) или ярлыка (Windows).
  • При нажатии на кнопку «Закрыть» в окне Corona Живой сервер не не закрыть его. Для выхода / выхода полностью, сделать это из своего главного меню приложения или, в качестве альтернативы, с правой кнопкой мыши контекстное меню значка дока (MacOS) или иконку в системном трее (Windows).
  • Закрытие окна списка проекта не остановится коронный сервере. Вы можете повторно открыть окно из окна меню или нажав на значок Живой сервера Corona доке (MacOS) или иконку в системном трее (Windows).

Live File Сложение

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

Как правило, вам не нужно редактировать содержимое этого файла. Однако, в особых случаях, он может быть изменен, чтобы настроить поведение живут сборки и Corona Живой Сервер:

key = XXXXXXXX-YYYY-ZZZZ-WWWW-AAA0987654321
#ip =
#port =
  • key- Не, не изменить это свойство. Это автоматически сгенерированный ключ позволяет жить и строить Corona онлайн сервер и правильно общаться.
  • ip/ port- Удалите #из каждого и указать эти два значения, чтобы использовать статический адрес и отключить автоматическое обнаружение. Это позволит жить строит работать на старых Android устройств и, возможно, решить некоторые проблемы сети. portЗначение должно быть число между 1025и 65534.

Исправление проблем

Если жить сборки не обновляется / обновления, пожалуйста, перейдите по следующей инструкции. Если функциональность возвращается к нормальной жизни в любой шаг по пути, не идти дальше.

  1. Убедитесь, что и ваш компьютер и устройство подключены к одной и той же локальной сети.
  2. Убедитесь, что ваш компьютер работает под управлением Corona Живого сервер с тем же проектом вы работаете на устройстве.
  3. Выключите Wi-Fi на устройстве, подождите несколько секунд, и включите его снова.
  4. Подождите, «понятность» вступил в силу. В зависимости от сети, это может занять до минуты.
  5. Выход Corona Живой сервер, а затем полностью закрыть / выйти из вашего приложения на устройстве. Обратите внимание, что просто закрыв окно не выходит Corona Живой сервер - вы должны явно выходить / выйти из приложения.
  6. Перезапустите Corona Живого Сервер и вручную добавить свой проект в список синхронизированных проектов, как это указано в Corona Живого сервер раздел выше.
  7. Удалить / удалить живую сборку из устройства.
  8. Восстановите приложение и убедитесь , что Создать Live Сложение выбрано в диалоговом окне сборки. Кроме того , помните, что только для разработки профилей провизий (IOS или tvOS) или Debug хранилище ключей (Android или Kindle пожарной) может быть использован для создания живой сборки.
  9. Запустите приложение на устройстве и тестирование для правильной работы. Если жить сборки еще не обновляется, эксперимент с модификацией .CoronaLiveBuildфайла , как указано в сборки Live File разделе.
  10. Если вам нужна дополнительная помощь, кроме этого, пожалуйста, обратитесь к Corona форум.

Это руководство объясняет , как настроить систему и устройство в Developer компании Apple портале. Это также объясняет , как создавать свои приложения для тестирования или распространения.

Создание сертификатов

  1. Вы должны иметь для разработчиков Apple учетной записи для установки / тестирование приложений на IOS устройствах и публиковать в App Store. После регистрации и входа в систему , введите Центр членов , перейдите в сертификатах, идентификаторами и профили приборной панели, и нажмите на кнопку Сертификаты в пределах IOS Apps колонке. С другой стороны , если вы уже вошли в IOS Apps раздел с другой страницы в рамках портала, нажмите на все кнопки под Сертификатами в левой колонке.
  2. В правом верхнем углу нажмите кнопку [ + ] , чтобы создать новый сертификат.
  3. Вам будет предложено выбрать, какой тип сертификата для создания. Есть два типа, которые имеют отношение к данному руководству:
    • РазработкаIOS App развития - использовать во время разработки , чтобы проверить на ваших собственных устройствах.
    • ПроизводствоApp Store и Ad Hoc - используется только для представления в App Store или установить приложение на ограниченное число зарегистрированных устройств.
  4. Выберите тип и нажмите кнопку Продолжить в нижней части . Вам будет предложено создать новый сертификат. Как указано в инструкции, откройте брелок доступа инструмент из приложенийСлужебные папки.
  5. В главном Keychain Access меню выберите Certificate Assistantзапрос сертификата от центра сертификации . Вам будет представлен с формой , содержащей следующие поля:
    • Адрес электронной почты пользователя - введите адрес электронной почты , связанный с вашей учетной записью Apple , Developer.
    • Common Name - введите свое имя или компанию / название команды.
    • CA Адрес электронной почты - это поле не требуется, так как вы сохраните сертификат на диск.
    • Прошение: - выберите Сохраненный на диск .
  6. Нажмите Продолжить , а затем указать , куда сохранить файл (Desktop отлично). Это будет генерировать запрос на подпись сертификата. Нажмите Готово в следующем окне.
  7. Назад на портале разработчиков, перейдите к следующему шагу, под названием Генерация сертификата . В нижней части , под Загрузить CSR файл , нажмите File , выберите ... кнопку и выберите только что созданный файл. Нажмите Generate кнопку для подтверждения.
  8. Заключительный шаг, чтобы загрузить и установить сертификат на локальную брелке. Следуйте инструкциям на экране.
  9. Назад в Certificates разделе портала разработчиков, должен появиться новый сертификат.

Регистрация устройств

Некоторые гиды начинают с созданием App ID, но мы рекомендуем вам зарегистрировать устройства первым. Это позволит вам сэкономить задачу модификации и повторной загрузки профилей инициализации позже.

  1. Подключите устройство, откройте Xcode, а затем откройте Устройство окна, выбрав Windowустройств .
  2. В левой колонке выберите устройство. Если это первый раз , когда вы используете устройство в целях развития, возможно , потребуется включить его для развития, выбрав Использовать устройство для развития в главной панели.
  3. Еще в портале разработчика, нажмите на все кнопки под устройством в левой колонке.
  4. В правом верхнем углу нажмите кнопку [ + ] , чтобы зарегистрировать новое устройство.
  5. Вам будет предложено зарегистрироваться либо одно или несколько устройств. Если вы выбираете первый вариант, введите следующую информацию:
    • Имя - это имя только вам и помогает идентифицировать устройство.
    • UDID - это 40-символьное шестнадцатеричное значение является уникальным идентификатором устройства для устройства. Вы можете обнаружить, открыв Xcode Devices окна выбора устройства в левой колонке, ищет идентификатор в информационной панели, щелкните правой кнопкой мыши значение, и выберите Копировать .
  6. Нажмите кнопку Продолжить , чтобы зарегистрировать устройство. Назад в Devices разделе портала разработчиков, должно появиться новое устройство.
  7. Повторите эту процедуру для всех ваших дополнительных устройств.

Создание приложения идентификаторов

Далее, вы должны создать новый идентификатор приложения для вашего приложения Corona.

  1. На портале разработчика, нажмите на App идентификаторы кнопку под идентификаторами в левой колонке.
  2. В правом верхнем углу нажмите кнопку [ + ] , чтобы создать новый идентификатор приложения.
  3. Заполните информацию:
    • App ID Описание - только вы увидите это; это поможет вам определить приложение.
    • App ID Prefix - это должно быть установлено на ID команды , который связан с вашим аккаунтом разработчика.
    • App ID Суффикс - это не виден потребителям, но оно должно быть уникальным. Apple , рекомендует указать Bundle ID в обратном домена формате, например com.domainname.myapp.
    • App Услуга - выбрать услуги , которые вы хотели бы включить.
  4. Нажмите Продолжить . Это должно привести к экрану , где вы можете подтвердить детали App ID. Нажмите кнопку Отправить , чтобы завершить создание App ID. Назад в идентификаторах App разделе портала разработчиков, должен появиться новый ID.
Важный

Вы не указать CFBundleIdentifierв iphoneplist разделе build.settings. Корона будет использовать идентификатор из профиля инициализации для этой цели.

Заметка

Если настроить идентификатор приложения без дополнительных сервисов , как Push - уведомления, а затем добавить эти функции в App ID, вы должны переустановить профиль обеспечения, повторяя все загрузки и установки шаги , описанные в следующем разделе. Таким образом, лучше выбрать все услуги , которые вы собираетесь использовать в приложении.

Создание Provisioning профилей

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

  1. На портале разработчика, нажмите на все кнопки под Provisioning профилей в левой колонке.
  2. В правом верхнем углу нажмите кнопку [ + ] , чтобы создать новый профиль обеспечения.
  3. Вам будет предложено выбрать, какой тип инициализации профиль для создания.
    • Разработка: IOS App развития - использовать во время разработки , чтобы проверить на ваших собственных устройствах.
    • Распространение: App Store - используется только для представления в App Store.
    • Распределение: Ad Hoc - использовать это , чтобы установить приложение на ограниченное число зарегистрированных устройств.
  4. Выберите тип , который вы хотите создать , и нажмите Продолжить . На следующем экране вам будет предложено выбрать идентификатор приложения , чтобы связать с профилем. Предполагая , что вы создали по крайней мере один идентификатор приложения, выберите его из списка и нажмите кнопку Продолжить . Если вы еще не создали никаких идентификаторов App см Создание идентификаторов App выше.
  5. Далее, вы должны связать по крайней мере один сертификат с профилем подготовки. Выберите соответствующий сертификат (ы) из списка и нажмите кнопку Продолжить . Обратите внимание , что профиль обеспечения должен быть связан с типом сертификата соответствия. Например, если вы хотите создать профиль обеспечения для распределения, вы должны сначала создать сертификат распределения. Если нет свидетельств не существует для типа профиля , который вы хотите создать, система предложит вам создать один - в этом случае, пожалуйста , см Создание сертификатов выше.
  6. Перейдем теперь к соответствующему разделу ниже, так как шаги изменяются для каждого типа профиля.

РАЗВИТИЕ

  1. Вы должны связать по крайней мере , одно устройство с профилем обеспечения разработки. Выберите устройство (ы) из списка и нажмите кнопку Продолжить . Если вы еще не зарегистрированы какие - либо устройства, пожалуйста , см регистрирующих приборов выше.
  2. На следующем экране, вы должны предоставить имя профиля для профиля подготовки. Это будет использоваться для определения профиля на портале разработчика. Кроме того , подтвердить настройки , которые вы сделали в предыдущих шагах. Когда вы будете готовы, нажмите кнопку Generate для создания профиля.
  3. Затем загрузите и установите профиль обеспечения (нажмите Загрузить кнопку , а затем дважды щелкните файл).
  4. Еще в портале разработчика, нажмите кнопку Готово . Новый профиль должен появиться в списке, помеченный как вход в Status колонке.
  5. Теперь вы должны установить профиль на каждом устройстве , которое вы выбрали при создании профиля. Подключите устройство к компьютеру и синхронизации его изнутри Itunes . Когда это сделано, откройте Xcode Devices окно, щелкните правой кнопкой мыши на изображении устройства в левой колонке, и выберите Показать профили Provisioning ... из контекстного меню. Новый профиль должен появиться в списке.
  6. Наконец, чтобы связать новый профиль с Corona перезапустите Corona Simulator. Профиль должен выглядеть как код подписание идентичность в окне сборки. См процесс сборки ниже для более подробной информации.

РАСПРОСТРАНЕНИЕ: APP STORE

  1. Вы должны предоставить имя профиля для профиля подготовки. Это будет использоваться для определения профиля на портале разработчика. Кроме того , подтвердить настройки , которые вы сделали в предыдущих шагах. Когда вы будете готовы, нажмите кнопку Generate для создания профиля.
  2. Затем загрузите и установите профиль обеспечения (нажмите Загрузить кнопку , а затем дважды щелкните файл).
  3. Еще в портале разработчика, нажмите кнопку Готово . Новый профиль должен появиться в списке, помеченный как вход в Status колонке.
  4. Наконец, чтобы связать новый профиль с Corona перезапустите Corona Simulator. Профиль должен выглядеть как код подписание идентичность в окне сборки. См процесс сборки ниже для более подробной информации.

РАСПРЕДЕЛЕНИЕ: AD HOC

  1. Вы должны связать по крайней мере , одно устройство с профилем специальной подготовки. Выберите устройство (ы) из списка и нажмите кнопку Продолжить . Если вы еще не зарегистрированы какие - либо устройства, пожалуйста , см регистрирующих приборов выше.
  2. На следующем экране, вы должны предоставить имя профиля для профиля подготовки. Это будет использоваться для определения профиля на портале разработчика. Кроме того , подтвердить настройки , которые вы сделали в предыдущих шагах. Когда вы будете готовы, нажмите кнопку Generate для создания профиля.
  3. Затем загрузите и установите профиль обеспечения (нажмите Загрузить кнопку , а затем дважды щелкните файл).
  4. Еще в портале разработчика, нажмите кнопку Готово . Новый профиль должен появиться в списке, помеченный как вход в Status колонке.
  5. Теперь вы должны установить профиль на каждом устройстве , которое вы выбрали при создании профиля. Подключите устройство к компьютеру и синхронизации его изнутри Itunes . Когда это сделано, откройте Xcode Devices окно, щелкните правой кнопкой мыши на изображении устройства в левой колонке, и выберите Показать профили Provisioning ... из контекстного меню. Новый профиль должен появиться в списке.
  6. Наконец, чтобы связать новый профиль с Corona перезапустите Corona Simulator. Профиль должен выглядеть как код подписание идентичность в окне сборки. См процесс сборки ниже для более подробной информации.

Построение процесса

Важный

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

Создание приложения представляет собой простой процесс, как только вы установили свой сертификат и профили обеспечения. Вы можете создавать приложения для тестирования в Xcode IOS Simulator или на устройстве.

  1. С Corona Simulator, выберите ФайлОткрыть ... , чтобы загрузить проект , который вы хотите построить.
  2. Выберите ФайлПостроитьIOS ...
  3. Заполните информацию:
    • Имя приложения - по умолчанию, это будет соответствовать вашей папке проекта; сохранить это имя или указать другой.
    • Версия - укажите имя версии для вашего приложения.
    • Поддерживаемые устройства - выбрать либо iPhone + IPad (Universal) , только iPhone или IPad только в зависимости от вашего целевого устройства (ов).
    • Provisioning профиля - выбрать соответствующий профиль обеспечения для любого развития или распределения .
    • IOS SDK - выберите версию прошивки , чтобы построить для.
    • Сохранить в папку - указать место сохранения скомпилированного приложения.
    • После выпуска - выберите , какое действие должно быть выполнено после того, как приложение будет успешно построен.
    • Создать Live Построить - установите этот флажок , чтобы создать живую сборку для молниеносной тестировании. См Создание Живой Сборки для деталей.
  4. Нажмите Построить и Corona будет компилировать приложение. Затем у вас будет файл приложения , которые могут быть загружены на устройство или представленное в App Store, в зависимости от профиля инициализации вы выбрали.

Установка устройства

Есть три способа установки приложения на устройстве IOS, как описано ниже.

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

КОПИРОВАНИЕ НА УСТРОЙСТВО

  1. Подключите устройство.
  2. Выполните действия , описанные в процессе сборки выше, гарантируя , что вы выберите Копировать в устройство для После Построить опции.

XCODE

  1. Подключите устройство, откройте Xcode , а затем откройте Устройство окна, выбрав WindowУстройства .
  2. В левой колонке выберите устройство.
  3. В главной панели, обратите внимание на установленные приложения раздел , который показывает установленные приложения (этот список может быть пустым изначально). Ниже приведен список, нажмите кнопку [ + кнопки] и перейдите к месту нахождения .appфайла , который был сгенерирован с помощью Corona. Выберите файл и нажмите кнопку Открыть . Если предположить , что нет ошибок инициализации / сертификата, приложение должно установить на устройстве.

ITUNES

  1. Подключите устройство и убедитесь , что ITunes работает.
  2. Выберите ФайлДобавить в библиотеку ... (⌘-O) и перейдите к .appфайлу, который был создан с помощью Corona. В качестве альтернативы, перетащите файл на значок док ITunes и выпуска.
  3. Вид должен измениться на информационном экране устройства и показать все установленные приложения. Убедитесь , что ваше приложение перечислено в Apps меню слева.
  4. Синхронизация устройства и приложение должно установить. Обратите внимание, что ITunes может быть особенно о версии приложения - если вы повторно тестировать новые версии вашего приложения, вы должны удалить предыдущую версию с устройства перед установкой новой версии. Это гарантирует, что установлена самая последняя версия.

Освежающие профили

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

  1. В Xcode, откройте Настройки окна, выбрав XcodeНастройки ... .
  2. Выберите Accounts из верхней панели вкладок.
  3. Выберите нужную учетную запись в соответствии с идентификаторами Apple, в левой панели.
  4. В правой нижней части, нажмите ... View Details кнопку.
  5. Панель должна открыться, показывая связанные профили инициализации. В правом нижнем разделе этой панели, нажмите на маленькую кнопку «Обновить».
  6. Закройте и перезапустите Xcode и Corona Simulator и приступить к процессу сборки .

Это руководство объясняет, как подписать, построить и протестировать приложение на Android устройствах.

Заметки
  • Вам не нужно устанавливать Android SDK. Тем не менее, вам нужно будет установить соответствующую версию комплекта Java Development Kit , если вы используете Windows. См Java Development Kit Setup для деталей.
  • Процесс сборки Android генерирует стандартный .apkфайл. Вы можете создавать и тестировать приложения на Android устройствах без создания учетной записи разработчика Google , но вам нужно будет зарегистрироваться , если вы хотите опубликовать в Google Play рынка.
  • Мы поддерживаем только для Android устройств , которые работают Android 4.0.3 или выше с ARMv7 процессором. Это может создать некоторую путаницу , поскольку процессоры ARM идентифицируется как в семье и архитектура . Фамилии не имеют «V» в них. Например, процессор ARM7 фактически ARMv3 архитектуры и ARM11 является ARMv6 архитектуры. Смотрите это руководство , чтобы помочь идентифицировать различные процессоры.

Имя пакета Java

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

Традиционная схема Java заключается в использовании обратного домен формата , как com.acme, затем добавить название отдела / продукт, и , наконец , добавить имя приложения. Например, com.acme.games.catchafishбыло бы хорошее имя пакета, если вы являетесь владельцем acme.comдоменного имени.

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

  • Имя пакета содержит дефис или другой специальный символ ( com.three-amigosнапример). В этом случае преобразование специального символа подчеркивания: com.three_amigos.
  • Одним из компонентов имен содержит цифру или другой недопустимый символ в начале идентификатора ( com.3amigosнапример). В этом случае попробуйте преобразовать имя пакета к чему - то вроде com.threeamigos.
  • Одним из компонентов имен содержит ключевое слово, например com.private.idaho. В этом случае суффикс часть имени пакета с подчеркиванием: com.private_.idaho.

Построение процесса

Важный
  • Если вы не знакомы с имеющимися настройками сборки для приложения, пожалуйста , рассмотреть их , прежде чем приступить к этой секции.
  • Убедитесь, что ваш Android устройство включено в качестве устройства развития.
  1. С Corona Simulator, выберите ФайлОткрыть ... , чтобы загрузить проект , который вы хотите построить.
  2. Выберите ФайлПостроитьAndroid ... .
  3. Заполните информацию:
    • Имя приложения - по умолчанию, это будет соответствовать вашей папке проекта; сохранить это имя или указать другой.
    • Код версии - это значение должно быть целым числом . Каждый раз , когда вы обновляете ваше приложение, вы должны увеличить код версии. Это соответствует versionCodeпункту подробно здесь . Это не видно пользователям.
    • Версия Имя - укажите имя версии для вашего приложения.
    • Пакет - см Java Package Name выше.
    • Target App Store - выберите Google Play из выпадающего списка.
    • Keystore / Key Алиас - для того , чтобы построить для Android устройств, вы должны поставить цифровую подпись приложения с использованием хранилища ключей . Пожалуйста , обратитесь к любой подписи для отладочных или подписи для сборки выпуска ниже.
    • Сохранить в папку - указать место сохранения скомпилированного приложения.
    • После выпуска - выберите , какое действие должно быть выполнено после того, как приложение будет успешно построен.
    • Создать Live Построить - установите этот флажок , чтобы создать живую сборку для молниеносной тестировании. См Создание Живой Сборки для деталей.
  4. Нажмите Построить и Corona компилирует приложение в стандартный .apkфайл.
Подписание для отладочных

Для отладочных сборок Corona включает в себя debug.keystoreдля тестирования приложения на устройствах. Чтобы использовать его, выполните следующие действия:

  1. Выберите Debug из хранилища ключей меню.
  2. Непосредственно справа Обзор ... в файл хранилища ключей в папке приложения Corona SDK:

Окна - C:\Program Files\Corona Labs\Corona SDK\Resources\debug.keystore

MacOS - CoronaSDK/Resource Library/Android/debug.keystore

  1. Выберите файл и введите в androidкачестве пароля.
  2. В Key Псевдоним меню выберите androiddebugkey.
Подписание для сборки выпуска

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

  1. Откройте командную строку в Windows , или терминал в MacOS. Оказавшись там, используйте cdкоманду , чтобы перейти в каталог , где вы будете держать свои хранилища ключей.
  2. Введите следующую команду в командной строке, заменив mykeystoreс именем приложения и aliasnameс таким же или равным имени псевдонима.

keytool -genkey -v -keystore mykeystore.keystore -alias aliasname -keyalg RSA -validity 999999

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

Установка устройства

Есть четыре способа , чтобы установить приложение на Android устройства. Вы можете не просто скопировать .apkфайл на устройство.

КОПИРОВАНИЕ НА УСТРОЙСТВО

Если вы используете Corona Simulator для MacOS, вы можете скопировать приложение непосредственно на подключенное устройство. Эта функция не поддерживается в Windows.

  1. Подключите устройство.
  2. Выполните действия , описанные в процессе сборки выше, гарантируя , что вы выберите Копировать в устройство и запуск для После Построить вариант.

ANDROID SDK

Если вы уже установили Android SDK , используйте adb install -r your-app.apk.

ВЕБ СЕРВЕР

Загружайте .apkна веб - сервере. Далее, точка веб - браузер вашего Android устройства к URL файла, чтобы загрузить приложение на устройство. Наконец, нажмите на файл в историю загрузок , чтобы установить его.

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

AddType application/vnd.android.package-archive .apk

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

APP INSTALLER

Получить приложение установщик Google Play, чтобы помочь этому процессу.

отладка

Android от Google SDK предоставляет набор инструментов , известных как Android Debug Bridge или ADB . Эти инструменты позволяют взглянуть на лог консоли устройства, установить и заменить существующие приложения на устройстве. Вы можете выполнить adbкоманду из MacOs терминала или из Windows , командной строки . Графический интерфейс инструмент под названием монитор также установлен; он может быть использован для изучения файла журнала и захвата снимков экрана с вашего устройства.

Для получения более подробной информации о Android отладки см Руководство отладки .

Это руководство объясняет, как подписать, построить и протестировать приложение на устройствах Kindle пожарной Амазонки.

Заметки
  • Вам не нужно устанавливать Android SDK. Тем не менее, вам нужно будет установить соответствующую версию комплекта Java Development Kit , если вы используете Windows. См Java Development Kit Setup для деталей.
  • Как и Android, разжечь процесс сборки Огня создает стандартный .apkфайл.

Подготовка к Kindle Fire

Вам не нужно делать что-либо другое, чтобы подготовить приложение к выпуску на Kindle Fire, но следует иметь в виду следующие характеристики устройства и дизайна вашего контента приложения соответственно. Технические характеристики, перечисленные ниже, в пикселях.

Модель Разрешение (ш ×) Строка состояния (вверху) Soft Keys Bar (внизу)
Kindle Fire 600 × 1024 27 60
Kindle Fire HD 7" 800 × 1280 35 78
Kindle Fire HD 8.9" 1200 × 1920 40 90

Кроме того , обратите внимание , что Amazon предпочитает приложения , чтобы занять весь экран. Если вы установите масштаб letterboxв config.lua, чтобы убедиться , что вы заполнить «пустое» пространство с фактическим содержанием. Смотрите здесь для получения дополнительной информации о содержании и масштабировании.

Имя пакета Java

При создании приложения Kindle Fire с помощью Corona, вы должны указать имя пакета . В общем, вы можете указать любое имя пакета вам нравится, но он должен быть выбран тщательно , поскольку он должен быть уникальным для вашего приложения.

Традиционная схема Java заключается в использовании обратного домен формата , как com.acme, затем добавить название отдела / продукт, и , наконец , добавить имя приложения. Например, com.acme.games.catchafishбыло бы хорошее имя пакета, если вы являетесь владельцем acme.comдоменного имени.

В некоторых случаях имя пакета , который является результатом использования обратного домена формат не может быть действительным, и он должен быть модифицирован до Corona будет строить свое приложение Kindle Fire. Это было бы верно в любом из следующих случаев:

  • Имя пакета содержит дефис или другой специальный символ ( com.three-amigosнапример). В этом случае преобразование специального символа подчеркивания: com.three_amigos.
  • Одним из компонентов имен содержит цифру или другой недопустимый символ в начале идентификатора ( com.3amigosнапример). В этом случае попробуйте преобразовать имя пакета к чему - то вроде com.threeamigos.
  • Одним из компонентов имен содержит ключевое слово, например com.private.idaho. В этом случае суффикс часть имени пакета с подчеркиванием: com.private_.idaho.

Построение процесса

Важный

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

  1. С Corona Simulator, выберите ФайлОткрыть ... , чтобы загрузить проект , который вы хотите построить.
  2. Выберите ФайлПостроитьAndroid ... .
  3. Заполните информацию:
    • Имя приложения - по умолчанию, это будет соответствовать вашей папке проекта; сохранить это имя или указать другой.
    • Код версии - это значение должно быть целым числом . Каждый раз , когда вы обновляете ваше приложение, вы должны увеличить код версии. Это соответствует versionCodeпункту подробно здесь . Это не видно пользователям.
    • Версия Имя - укажите имя версии для вашего приложения.
    • Пакет - см Java Package Name выше.
    • Target App Store - выберите Amazon из выпадающего списка.
    • Keystore / Key Алиас - для того , чтобы построить для Android устройств, вы должны поставить цифровую подпись приложения с использованием хранилища ключей . Пожалуйста , обратитесь к любой подписи для отладочных или подписи для сборки выпуска ниже.
    • Сохранить в папку - указать место сохранения скомпилированного приложения.
    • После выпуска - выберите , какое действие должно быть выполнено после того, как приложение будет успешно построен.

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

  4. Нажмите Построить и Corona компилирует приложение в стандартный .apkфайл.
Подписание для отладочных

Для отладочных сборок Corona включает в себя debug.keystoreдля тестирования приложения на устройствах. Чтобы использовать его, выполните следующие действия:

  1. Выберите Debug из хранилища ключей меню.
  2. Непосредственно справа Обзор ... в файл хранилища ключей в папке приложения Corona SDK:

Окна - C:\Program Files\Corona Labs\Corona SDK\Resources\debug.keystore

MacOS - CoronaSDK/Resource Library/Android/debug.keystore

  1. Выберите файл и введите в androidкачестве пароля.
  2. В Key Псевдоним меню выберите androiddebugkey.
Подписание для сборки выпуска

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

  1. Откройте командную строку в Windows , или терминал в MacOS. Оказавшись там, используйте cdкоманду , чтобы перейти в каталог , где вы будете держать свои хранилища ключей.
  2. Введите следующую команду в командной строке, заменив mykeystoreс именем приложения и aliasnameс таким же или равным имени псевдонима.

keytool -genkey -v -keystore mykeystore.keystore -alias aliasname -keyalg RSA -validity 999999

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

Установка и отладка

После того, как ваше приложение компилируются с помощью Corona, следующий шагом является регистрация как Amazon разработчики , настроить Kindle Fire для тестирования и тестирование / отладки приложения на Kindle пожарного устройства или разжечь огнь Emulator.

  1. Если вы еще не зарегистрировались для разработчиков Amazon счета, пожалуйста , сделайте это первым.
  2. Далее вам необходимо настроить ваш Kindle пожарной таблетки для тестирования. Вы можете использовать Android Debug Bridge для подключения Kindle Fire планшета к компьютеру разработки для тестирования и отладки. Пожалуйста , обратитесь к Amazon в учебном руководстве для деталей.
  3. Наконец, вы можете обратиться к этому руководству для получения подробной информации о тестировании приложения.

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

Системные Требования

  • MacOS 10,11 или более поздняя версия
  • Mac, который поддерживает OpenGL 2.1 или выше
Заметка

Все функции, поддерживаемые Corona Simulator для MacOS поддерживаются MacOS настольные сборки.

Строительство Большой Macos приложения

Многие разработчики начнут с приложением IOS, намереваясь дублировать его на платформе Mac. В первую очередь, избежать заманчивого предположения , что все , что вам нужно сделать , это выбрать ФайлСтроительныйMacOS ... из меню Corona Simulator , чтобы создать приложение MacOS из приложения IOS. На рабочем столе и устройства платформы совершенно разные, и в то время как Corona скрывает многие практические детали реализации, он не может волшебным образом превратить приложение , предназначенное для сенсорного экрана устройства в большой мыши на основе опыта рабочего стола.

Имейте в виду , что ваше приложение MacOS будет проходить процесс обзора Apple , прежде , чем быть принятым в Mac App Store . Это будет охватывать тот же тип вопросов , как отзывы IOS приложений, но есть дополнительный бар , который должен быть очищен , так как MacOS приложение может быть отклонено на данный момент:

Your app appears to be a mostly unmodified port of an iOS app.

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

Очевидно, что вы можете скачать из Mac App Store прошел процесс обзора, так что не забудьте скачать другие приложения в том же жанре , как ваши, посмотреть , как они работают на рабочем столе, и подумайте , как вы можете изменить ваш работать аналогичным образом .

Настройки окна

Для обоих MacOS настольных приложений и Win32 настольных приложений, коронного build.settingsфайл поддерживает windowтаблицу для настройки рабочего стола окно соответствующего приложения, в том числе по умолчанию ширина / высота в, в заголовке окна, и многое другое.

settings =
{
    window =
    {
        -- Settings for the desktop window; applies to both macOS and Win32 desktop apps
    },
}

В windowтаблице, следующие параметры поддерживаются:

режим по умолчанию

Устанавливает , как окно должно быть запущен при запуске. Поддерживаемые значения включают "normal", "minimized", "maximized", или "fullscreen". Значение по умолчанию "normal". Это также может быть установлена программно через native.setProperty () API.

settings =
{
    window =
    {
        defaultMode = "fullscreen",
    },
}
defaultViewWidth

Устанавливает ширину запуска по умолчанию области просмотра / клиента окна. Именно в этом регионе в пределах границ окна , к которому Corona делает. В идеале, это должно соответствовать или превысить config.luaширину области контента.

settings =
{
    window =
    {
        defaultViewWidth = 640,
    },
}
defaultViewHeight

Устанавливает высоту запуска по умолчанию в области просмотра / клиента окна. Именно в этом регионе в пределах границ окна , к которому Corona делает. В идеале, это должно соответствовать или превысить config.luaвысоту области содержимого.

settings =
{
    window =
    {
        defaultViewHeight = 960,
    },
}
изменяемый

Установите это , trueчтобы позволить конечному пользователю изменять размеры окна (окно не изменяемое по умолчанию). Обратите внимание , что если trueвы , возможно , придется обрабатывать коронного изменения размера событие повторно оформления контента.

settings =
{
    window =
    {
        resizable = true,
    },
}
minViewWidth

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

settings =
{
    window =
    {
        minViewWidth = 320,
    },
}
minViewHeight

Этот параметр применяется только в том случае resizableустанавливается в true. Препятствует изменение размеров окна на высоту меньше этого значения. Обратите внимание , что это представляет высоту региона в границах окна. Если resizableустановлено значение trueи этот параметр не указан, то окно может быть изменен до любой высоты позволяет ОС.

settings =
{
    window =
    {
        minViewHeight = 480,
    },
}
enableCloseButton

Включает или отключает кнопку окна «закрыть» (включено по умолчанию) . Если эта функция отключена, необходимо закрыть окно в Lua через native.requestExit () . Обратите внимание , что Corona настоящее время не вызывает событие , когда кнопка «закрыть» нажата.

settings =
{
    window =
    {
        enableCloseButton = true,
    },
}
enableMinimizeButton

Включает или отключает кнопку окна «минимизировать» (по умолчанию включено) .

settings =
{
    window =
    {
        enableMinimizeButton = true,
    },
}
enableMaximizeButton

Включает или отключает кнопку окна «максимизирует» (по умолчанию отключено) . Обратите внимание , что окно будет изменено при максимальном / восстановлении, так что, если этот параметр true, возможно , придется обрабатывать коронное изменение размера событие повторно оформления контент.

settings =
{
    window =
    {
        enableMaximizeButton = true,
    },
}
suspendWhenMinimized

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

settings =
{
    window =
    {
        suspendWhenMinimized = true,
    },
}
showWindowTitle

Вызывает строку заголовка окна, чтобы показать (по умолчанию) или скрытой делает содержание приложения заполнить все окно. Перетаскивание в верхней части окна будет двигаться как с обычным окном и щелчками в этой области не идет в приложении. Этот параметр поддерживается только в MacOS.

settings =
{
    window =
    {
        showWindowTitle = false,
    },
}
TitleText

Устанавливает строку заголовка текст в окне к указанной строке (без заголовка текста по умолчанию). Поддержка 2- х букв ISO 639-1 языковых кодов и дополнительная 2 письма ISO 3166-1 коды стран (ни один не чувствителен к регистру). defaultТекст заголовка также может быть установлен программным путем с помощью native.setProperty () API.

settings =
{
    window =
    {
        titleText = {
            -- The "default" text will be used if the system is using a language and/or
            -- country code not defined below. This serves as a fallback mechanism.
            default = "Window Title Test",
            -- This text is used on English language systems in the United States.
            -- Note that the country code must be separated by a dash (-).
            ["en‐us"] = "Window Title Test (English‐USA)",
            -- This text is used on English language systems in the United Kingdom.
            -- Note that the country code must be separated by a dash (-).
            ["en‐gb"] = "Window Title Test (English‐UK)",
            -- This text is used for all other English language systems.
            ["en"] = "Window Title Test (English)",
            -- This text is used for all French language systems.
            ["fr"] = "Window Title Test (French)",
            -- This text is used for all Spanish language systems.
            ["es"] = "Window Title Test (Spanish)",
        },
    },
}

Исключение файлов

Вы можете исключить файл (ы), которые не нужны для настольного приложения MacOS с помощью build.settingsфайла excludeFilesфункции сопоставления с шаблоном. Пожалуйста , смотрите за исключением файлов раздел Параметры построения проекта руководства для более подробной информации о поиске по шаблону.

В том числе ресурсы

Иногда необходимо включить некоторые файлы в приложении для поддержки конкретных функций MacOS. Одним из примеров этого является локализацией , которая достигается на уровне операционной системы (например , метку Finder для приложения) с помощью .lprojкаталогов в приложении Resourceкаталога ( фон ) странице. Следует отметить , что этот механизм , чтобы включить произвольные ресурсы в ваше приложение предназначено только для того, чтобы знания для выполнения определенных задач и не предназначена для автоматизации ничего.

Чтобы включить произвольные файлы в вашем приложении Resourceкаталога добавить bundleResourcesDirectoryзапись в ваш проект build.settingsсборки для MacOS. Например:

settings =
{
    macos =
    {
        bundleResourcesDirectory = "osx-resources",
    },
}

Затем, в проекте, содержимое osx-resourcesкаталога может выглядеть следующим образом :

fr.lproj/
osx-resources/fr.lproj:
InfoPlist.strings

Это приводит к fr.lprojдиректории , заканчивающейся в MyApp.app/Content/Resources/fr.proj.

Вы, вероятно , хотите добавить каталог , который будет использоваться в качестве bundleResourcesDirectoryваших исключенных файлов .

Пользовательский URL Схемы

Чтобы включить собственную схему URL в вашем приложении MacOS, вам необходимо установить его в приложении Info.plist, включив в раздел , как это в build.settings:

settings =
{
    macos =
    {
        plist =
        {
            CFBundleURLTypes =
            {
                {
                    CFBundleURLName = "My URL Scheme",
                    CFBundleURLSchemes = {
                        "myscheme",
                    },
                },
            },
        },
    },
}

Это позволит приложению получить сообщение от (или быть запущенно) в терминале команду , такие как:

Для обработки сообщения в приложении Corona, реализовать обработчик, как это:

local function onSystemEvent( event )
    if ( event.type == "applicationOpen" and event.url ) then
        local launchURL = event.url
        print( "Event: applicationOpen - launchURL: ", launchURL )
    end
end
Runtime:addEventListener( "system", onSystemEvent )

Пользовательские типы документов

Подобно тому , как пользовательские схемы URL работы вы можете настроить типы документов , которые вы приложение распознает и которые могут быть открыты с помощью перетаскивания их на иконку приложения в Finder или Dock .

Чтобы включить пользовательские типы документов в приложении MacOS, вам необходимо установить его в приложении Info.plist, включив в раздел , как это build.settings:

settings =
{
    macos =
    {
        plist =
        {
            CFBundleDocumentTypes =
            {
                {
                    CFBundleTypeExtensions =
                    {
                        "png",
                    },
                    CFBundleTypeIconFile = "app.icns",
                    CFBundleTypeName = "public.png",
                    LSHandlerRank = "Alternate",
                    LSItemContentTypes =
                    {
                        "public.png",
                    },
                },
            },
        },
    },
}

В приложении Corona, реализовать обработчик, как это:

local function onSystemEvent( event )
    if ( event.type == "applicationOpen" and event.url ) then
        local filename = event.url
        print( "Event: applicationOpen - filename: ", filename )
    end
end
Runtime:addEventListener( "system", onSystemEvent )

Этот код будет вызываться , когда файлы с настроенными типами отбрасываются на значок вашего приложения в Finder или Dock . Более подробная информация доступна в девелоперской компании Apple Основные Фундаментные ключей документации.

Entitlements

Если вам нужны пользовательские пособия в приложении MacOS, укажите их в build.settings. Например, вам могут понадобиться указать com.apple.security.personal-information.locationправо , если вы используете коронное местоположение функцию.

settings =
{
    macos =
    {
        entitlements = {
            ["com.apple.security.personal-information.location"] = true,
        },
    },
}

App Icon

Вы должны добавить Icon-osx.icnsфайл в корневой каталог проекта Corona, чтобы обеспечить значок приложения на MacOS Это должен быть .icnsфайл , который содержит несколько версий значка в различных разрешениях ( подробнее ). Этот Icon-osx.icnsфайл будет использоваться для установки значка для следующих действий :

  1. Значок , что ваш .appиспользует пучок, как видно в Finder.
  2. Значок используется приложение в Dock.

Вы можете найти приложение в Mac App Store , чтобы помочь с созданием .icnsфайлов.

Строительство / Running

Для того, чтобы построить и запустить настольное приложение MacOS, выполните следующие действия:

  1. Откройте Corona Simulator.
  2. Открыть и запустить проект Corona.
  3. Выберите ФайлСтроительныйMacOS ... пункт меню , чтобы выявить Macos построить диалог.
  4. Имя приложения , версия , и сохранить в папку поля все необходимое. Вот примечания , касающиеся этих диалоговых полей сборки:
    • Имя приложения - имя приложения вы ввели , может быть выбрано во время выполнения с помощью коронного system.getInfo( "appName" )вызова ( эталонного ).
    • Версия - версия строка , которую вы ввели , может быть выбрана во время выполнения с помощью коронного system.getInfo( "appVersionString" )вызова ( эталонного ).
    • Provisioning Профиль - профиль обеспечения для приложения; см App подписи ниже.
    • Сохранить в папку - каталог , в котором нужно сохранить встроенный проект.
    • После выпуска - выберите , какое действие должно быть выполнено после того, как приложение будет успешно построен.
  5. Нажмите Построить кнопку , чтобы создать приложение для данного Сохранить в папку расположения. Если вы выбрали отправить Mac App Store ... , панель откроется , которая позволяет выбрать вкладку для предпочтительного варианта и следуйте инструкциям на экране , чтобы завершить сборку.

отладка

Corona Simulator в настоящее время не поддерживает прямое моделирование приложения, работающее в режиме рабочего стола MacOS, хотя Тренажер работает «Пользовательские устройства» кожа почти то же самое.

Обратите внимание , что при запуске встроенного приложения MacOS Corona или Corona Shell, все print()выходные и ошибки Lua / предупреждения будут передаваться на stdout. Существуют различные способы управления этим выходом. Один из способов запустить исполняемый файл , встроенный в приложение пачке в окне терминала , который будет сделать вывод отладочной видимым. Например:

./Bridge\ for\ OS\ X/Contents/MacOS/Bridge\ for\ OS\ X

В этом примере, слэш ( \) защитить пробелы в имени файла (можно в качестве альтернативы использовать кавычки).

Вы можете также использовать консоль приложение в ApplicationsUtilities папки для просмотра вывода приложений.

Если вы запустите приложение, выбрав После СтроитОткрыть приложения опции в Corona Simulator построить диалог, выход для приложения появится в окне Corona Simulator консоли.

App Подписание

Вы будете нуждаться в «Mac Apps» продовольствования profile от разработчиков Apple , портал для того , чтобы подписать приложение MacOS. Это работает очень похоже на IOS процесс подписания приложения, но вы можете выбрать создание неподписанного приложения, не выбрав None в Provisioning Profile выпадающего меню при выполнении сборки. Неподписанные приложения могут быть запущены на вашей машине и, с некоторой настройки из «безопасности и конфиденциальности» настройки в «Системные настройки» на других компьютерах Mac. Однако, неподписанные приложения могут не быть представлены в Mac App Store, так что вы в конечном итоге нужно разобраться в ваших Mac профили обеспечения.

Профили Provisioning должны быть установлены ~/Library/MobileDevice/Provisioning Profiles. Это может быть необходимо , чтобы сделать это вручную.

Для тестирования, это рекомендуется подписать приложение с вашей идентичности подписи Mac App, выбрав его в Corona Simulator сборки для MacOS диалога , а затем рассказать своим тестерам , чтобы выбрать Mac App Store и определены разработчиками опции на «Security & Privacy» панели "Системные настройки".

распределение

Вы можете распространять свое приложение через Mac App Store, в .dmg, или любым другим способом вы можете распространять .appпакет.

Если не используется Mac App Store, мы рекомендуем вам подписать приложение с вашей идентичности подписи Mac App, выбрав его в Corona Simulator построить диалоговое меню , а затем рассказать своим тестерам , чтобы выбрать Mac App Store и определены разработчиками опции на «Security и конфиденциальности» панель„Системные настройки“.

При использовании .zipархива распространять свои приложения, имейте в виде , что есть символические ссылки во встроенном .appпучке, так что вы должны указать -yопцию при работе zipв командной строке , чтобы создать архив ( с помощью Сжать опции в Finder делают правильные вещи автоматически ). Несоблюдение этого правила приведет к Macos говоря приложение повреждено при запуске на другом компьютере. Также обратите внимание , что некоторые службы общего доступа к файлам может повредить приложения MacOS, поэтому мы рекомендуем поместить их в .zipархив , прежде чем загружать их.

В этом руководстве описывается , как настроить и создать настольное приложение Win32 с помощью Corona Simulator. Corona построен настольное приложение Win32 состоит из .exeфайла, коллекции .dllфайлов, а также файлы ресурсов вашего проекта коронного. Она составлена для 32-разрядных , который может работать как на 32-битных и 64-битных операционных системах Windows.

Системные Требования

  • Windows 7, Windows 8 или Windows 10 ( 32-битный или 64-битный )
  • драйвер видео поддержки OpenGL 2.1 или выше
Заметки
  • Все функции, поддерживаемые Corona Simulator для Windows, поддерживаются для Win32 настольных версий. Тем не менее, Corona Simulator для Windows, не поддерживает большинство нативных функций пользовательского интерфейса, что версия MacOS делает.
  • Так же , как мобильное устройство строит, Win32 настольные строит поддерживать orientationтаблицу в рамках проекта build.settingsфайла. Если определенно, ширина и высота определяется в config.luaфайл ( инструкции ) будет относительно портретной ориентации, так же , как и прошивка Android. Это означает , что для ландшафтно-ориентированных приложений, widthвысота окна и heightширина окна, делая ваши настройки проекта переносимых на настольный и мобильные устройства.

Настройки Win32 платформы

Коронного build.settingsфайл поддерживает следующие Win32 платформы конкретные настройки с помощью win32таблицы:

settings =
{
    win32 =
    {
        -- Settings for Win32 apps go here
    }
}
preferenceStorage

Указывает , где пользовательские предпочтения приложения должны храниться при доступе через system.getPreference () , system.setPreferences () и system.deletePreferences () функции , используя "app"категорию.

settings =
{
    win32 =
    {
        preferenceStorage = "registry",
    }
}

Этот ключ может быть установлен в одно из следующих действий:

  • "sqlite"- Это настройка по умолчанию , и самый портативный вариант. Настройки сохраняются в CoronaPreferences.sqliteфайле базы данных при скрытом пользователя в Windows в .\AppData\Local\\\.systemкаталоге.
  • "registry"- Сохранение настроек для приложения в реестре Windows , под HKEY_CURRENT_USER\Software\\. Эта функция имеет портативность вопросы, например имена предпочтений не чувствительно к регистру при хранении в реестр. Кроме того , прямой косой черты ( /) и слэш ( \) в имени предпочтения будут рассматриваться как ключ реестра разделители пути и будут рассматриваться как те же символы.
SingleInstance

Установите это true(настройка по умолчанию) , чтобы только один экземпляр настольного приложения Win32 существовать одновременно. Это означает , что при попытке запуска второго экземпляра принесет окно первого экземпляра к передней части рабочего стола вместо этого. Если второй экземпляр был дан любые аргументы командной строки, эти аргументы доставляются в первую очередь с помощью "applicationOpen"типизированных системы события. Установите этот параметр для falseподдержки нескольких экземпляров приложения одновременно.

settings =
{
    win32 =
    {
        singleInstance = false,
    }
}

Настройки окна

Для обоих Win32 настольных приложений и настольных приложений MacOS, коронного build.settingsфайл поддерживает windowтаблицу для настройки рабочего стола окно соответствующего приложения, в том числе по умолчанию ширина / высота в, в заголовке окна, и многое другое.

settings =
{
    window =
    {
        -- Settings for the desktop window; applies to both Win32 and macOS desktop apps
    },
}

В windowтаблице, следующие параметры поддерживаются:

режим по умолчанию

Устанавливает , как окно должно быть запущен при запуске. Поддерживаемые значения включают "normal", "minimized", "maximized", или "fullscreen". Значение по умолчанию "normal". Это также может быть установлена программно через native.setProperty () API.

settings =
{
    window =
    {
        defaultMode = "fullscreen",
    }, 
}
defaultViewWidth

Устанавливает ширину запуска по умолчанию области просмотра / клиента окна. Именно в этом регионе в пределах границ окна , к которому Corona делает. В идеале, это должно соответствовать или превысить config.luaширину области контента.

settings =
{
    window =
    {
        defaultViewWidth = 640,
    }, 
}
defaultViewHeight

Устанавливает высоту запуска по умолчанию в области просмотра / клиента окна. Именно в этом регионе в пределах границ окна , к которому Corona делает. В идеале, это должно соответствовать или превысить config.luaвысоту области содержимого.

settings =
{
    window =
    {
        defaultViewHeight = 960,
    },
}
изменяемый

Установите это , trueчтобы позволить конечному пользователю изменять размеры окна (окно не изменяемое по умолчанию). Обратите внимание , что если trueвы , возможно , придется обрабатывать коронного изменения размера событие повторно оформления контента.

settings =
{
    window =
    {
        resizable = true,
    },
}
minViewWidth

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

settings =
{
    window =
    {
        minViewWidth = 320,
    },
}
minViewHeight

Этот параметр применяется только в том случае resizableустанавливается в true. Препятствует изменение размеров окна на высоту меньше этого значения. Обратите внимание , что это представляет высоту региона в границах окна. Если resizableустановлено значение trueи этот параметр не указан, то окно может быть изменен до любой высоты позволяет ОС.

settings =
{
    window =
    {
        minViewHeight = 480,
    },
}
enableCloseButton

Включает или отключает кнопку окна «закрыть» (включено по умолчанию) . Если эта функция отключена, необходимо закрыть окно в Lua через native.requestExit () . Обратите внимание , что Corona настоящее время не вызывает событие , когда кнопка «закрыть» нажата.

settings =
{
    window =
    {
        enableCloseButton = true,
    },
}
enableMinimizeButton

Включает или отключает кнопку окна «минимизировать» (по умолчанию включено) .

settings =
{
    window =
    {
        enableMinimizeButton = true,
    },
}
enableMaximizeButton

Включает или отключает кнопку окна «максимизирует» (по умолчанию отключено) . Обратите внимание , что окно будет изменено при максимальном / восстановлении, так что, если этот параметр true, возможно , придется обрабатывать коронное изменение размера событие повторно оформления контент.

settings =
{
    window =
    {
        enableMaximizeButton = true,
    },
}
suspendWhenMinimized

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

settings =
{
    window =
    {
        suspendWhenMinimized = true,
    },
}
TitleText

Устанавливает строку заголовка текст в окне к указанной строке (без заголовка текста по умолчанию). Поддержка 2- х букв ISO 639-1 языковых кодов и дополнительная 2 письма ISO 3166-1 коды стран (ни чувствительно к регистру) . Текст заголовка также может быть установлен программным путем с помощью native.setProperty () API.

settings =
{
    window =
    {
        titleText = {
            -- The "default" text will be used if the system is using a language and/or
            -- country code not defined below. This serves as a fallback mechanism.
            default = "Window Title Test",
            -- This text is used on English language systems in the United States.
            -- Note that the country code must be separated by a dash (-).
            ["en‐us"] = "Window Title Test (English‐USA)",
            -- This text is used on English language systems in the United Kingdom.
            -- Note that the country code must be separated by a dash (-).
            ["en‐gb"] = "Window Title Test (English‐UK)",
            -- This text is used for all other English language systems.
            ["en"] = "Window Title Test (English)",
            -- This text is used for all French language systems.
            ["fr"] = "Window Title Test (French)",
            -- This text is used for all Spanish language systems.
            ["es"] = "Window Title Test (Spanish)",
        },
    },
}

Исключение файлов

Вы можете исключить файл (ы), которые не нужны для настольного приложения Win32 с помощью build.settingsфайла excludeFilesфункции сопоставления с шаблоном. Пожалуйста , смотрите за исключением файлов раздел Параметры построения проекта руководства для более подробной информации о поиске по шаблону.

App Icon

Вы должны добавить Icon­-win32.icoфайл в корневой каталог проекта Corona, когда делает Win32 построить через Corona Simulator. Этот файл должен содержать несколько изображений в различных разрешениях, затолкали в один .icoфайл ( подробности ). Этот Icon­-win32.icoфайл будет использоваться для установки значка для следующих действий:

  1. Значок , что ваш .exeиспользует файл, как показано на Windows Explorer.
  2. Значок используется окна рабочего стола вашего приложения ( верхний левый угол).
  3. Значок используется приложение на панели задач Windows.
Заметка

Вы можете использовать Windows Explorer , чтобы увидеть , как .exeзначок приложения выглядит на разных разрешениях - просто выбирать различные режимы «View» в своем меню / панели инструментов , такие как «Деталь» или «Tiled.»

Строительство / Running

Для того, чтобы построить и запустить настольное приложение Win32, выполните следующие действия:

  1. Откройте Corona Simulator.
  2. Открыть и запустить проект Corona.
  3. Выберите ФайлсборкиWindows ... пункт меню.
  4. Имя приложения , EXE File Name , Version , и сохранить в папку поля все необходимые. Все остальные поля не являются обязательными, но мы настоятельно рекомендуем вам указать их. Вот примечания , касающиеся этих диалоговых полей сборки:
    • Имя приложения - имя приложения вы ввели , может быть выбрано во время выполнения с помощью коронного system.getInfo( "appName" )вызова ( эталонного ).
    • EXE Имя файла - При щелчке правой кнопкой мыши на встроенный .exeфайл, большая часть этой информации на местах можно увидеть через окно «Свойства».
    • Версия - версия строка , которую вы ввели , может быть выбрана во время выполнения с помощью коронного system.getInfo( "appVersionString" )вызова ( эталонного ).
    • Описание - Эта строка используется в Windows Task Manager , чтобы отобразить имя вашего процесса приложения. Если описание не установлен, то диспетчер задач будет использовать вместо имени приложения.
    • Application Name + Название компании - в сочетании, они используются для создания уникального каталога для хранения файлов своего приложения под скрытом пользователя в Windows в \AppDataкаталоге.
Заметка

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

  • .\AppData\Roaming\\\Documents
  • .\AppData\Local\\\CachedFiles
  • .\AppData\Local\\\TemporaryFiles
  • .\AppData\Local\\\.system  (Используется Corona для своих внутренних целей)

Windows , будет автоматически синхронизировать файлы в \Roamingпапку на других машинах , которые пользователь входит в систему на том же домене Windows , с помощью Active Directory. Однако файлы под \Localпапкой не будут синхронизированы.

  1. Нажмите Построить кнопку , чтобы создать приложение для данного Сохранить в папку расположения.
  2. В появившемся диалоговом окне нажмите Просмотр в обозревателе ... кнопку , чтобы перейти в каталог , где построили приложение Win32 был скопирован. Приложение будет находиться под подпапкой .Win32. Открыть папку для доступа к приложению в .exeфайл.
  3. Дважды щелкните на .exeфайле , чтобы запустить приложение.

отладка

Corona Simulator в настоящее время не поддерживает прямое моделирование приложения , работающего в режиме рабочего стола Windows. Тем не менее, версия для Windows из Corona SDK содержит новое приложение с именем , Corona.Shell.exeкоторый может запустить проект Corona аналогично тому , как работает встроенный настольное приложение Win32. По умолчанию, вы можете найти приложение Corona Shell здесь:

C:\Program Files\Corona Labs\Corona SDK\Corona.Shell.exe

При запуске Corona Shell, то вам будет предложено выбрать проект коронного main.luaфайл. После того , как файл был выбран, он будет работать приложение. Это позволяет быстро вносить изменения в свой проект без необходимости выполнения сборки каждый раз. Тем не менее, обратите внимание , что Corona Shell вовсе не поддерживает перезагружается или протоколирование , так как она на самом деле работает ваш проект, как настоящий настольное приложение Win32 (без моделирования).

Также обратите внимание , что при запуске встроенного Win32 настольного приложения или Corona Shell, все print()выходные и ошибок Lua / предупреждения будут передаваться на stdout. Существуют различные способы управления этим выходом. Одним из способов является перенаправление stdoutв текстовый файл в командной строке (MSDOS поле) , как показано ниже. Это запустит приложение и, после того, как вы закроете его, текстовый файл будет создан , содержащий все / записи информации в печати.

[YourExeFileName] > log.txt

В качестве альтернативы, вы можете запустить Output Viewer , Corona , установленный в папке меню ПУСКА в Windows «Corona SDK» для запуска Corona сложенного Win32 настольного приложения и отслеживать его выход.

App Подписание

Corona Simulator будет п Ot цифровая подпись встроенного .exeфайла. Это происходит потому , что Windows , не требует .exeфайлы , которые будут подписаны цифровой подписью для того , чтобы запустить их (это необязательно). Тем не менее, некоторые антивирусные программы могут блокировать приложение с при старте или «красный флаг» приложение , если оно не имеет цифровой подписи. Таким образом, лучше всего цифровой подписью , .exeкогда вы будете готовы распространять приложение публично.

Microsoft документы , как в цифровой форме подписать заявление здесь .

Подводя итог, для того , чтобы подписать приложение, вам необходимо приобрести цифровой сертификат от авторитетного источника , таких как VeriSign или DigiCert. Инструменты подписи Microsoft требуют , чтобы это было .pfxфайл. После этого Вам необходимо приобрести Microsoft, signtoolутилита командной строки, загрузив и установив одно из следующих действий :

  • Microsoft Windows SDK
  • Visual Studio (любая версия)

Вот пример того, как в цифровой форме подписать приложение:

signtool sign /f /p /t

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

Это руководство предназначено для тех , кто нуждается в более специализированные опции конфигурации и настроек приложения. Если вы ищете общие / основные настройки сборки и опции, пожалуйста , обратитесь к Project Строить Настройки гида.

Дополнительные настройки - IOS

ВОЗМОЖНОСТИ УСТРОЙСТВ

Если вы хотите , чтобы ограничить ваше приложение IOS для устройств с конкретными возможностями, вы можете включить дополнительный UIRequiredDeviceCapabilitiesключ внутри iphoneplist таблицы. Значение этого ключа должна быть таблица , содержащая специальные ключи , соответствующие компании Apple документации . Например:

settings =
{
    iphone =
    {
        plist =
        {
            UIRequiredDeviceCapabilities =
            {
                ["gyroscope"] = true,
            },
        },
    },
}

При включении конкретного ключа в UIRequiredDeviceCapabilitiesтаблице, ее значение , как ожидается , будет логическим значением с этой логикой:

  • true- Устройства должны иметь соответствующую функцию для того , чтобы запустить приложение.
  • false- Устройства должны не иметь соответствующую функцию для того , чтобы запустить приложение.
Заметки
  • Вы должны включить только конкретный ключ , если вы абсолютно необходимо ограничить целевые устройства для приложения - если это не имеет значения , поддерживает ли устройство определенные возможности, опустить свой ключ.
  • Опуская ключ значения даст тот же результат, установив его true. Например, следующие условия эквивалентны:

UIRequiredDeviceCapabilities = { "gyroscope" }

UIRequiredDeviceCapabilities = { ["gyroscope"] = true }

PNG ОБРАБОТКА

Если вам нужно , чтобы обойти обработку PNG файлов ( pngcrush) во время сборки, вы можете включить skipPNGCrushключ со значением true. Этот ключ должен быть указан вне plistтаблицы , но внутри iphoneтаблицы:

settings =
{
    iphone =
    {
        plist =
        {
        },
        skipPNGCrush = true,
    },
}

Дополнительные настройки - Android

МИНИМАЛЬНАЯ ВЕРСИЯ SDK

Обеспечение минимальной версии SDK с minSdkVersionключевым значением позволяет исключить приложение из устанавливаемых на устройствах с более старыми версиями ОС Android. Это соответствует minSdkVersionпункту подробно здесь . Этот параметр является невидимым для пользователей.

settings =
{
    android =
    {
        minSdkVersion = "16",
    },
}
Заметки
  • Минимальная версия SDK должен быть определен как целое  - оно не может содержать каких - либо знаков после запятой.
  • Корона только позволяет значения цены "15"для Android 4.0.3 (самой старой версии , поддерживаемого Corona). Более подробную информацию о различных Android SDK версии и уровни API см здесь .
  • Минимальные SDK версии по умолчанию , "15"если не указано иное.

ANDROID TV

При развертывании приложения к телевизору Android, вы должны включать в себя supportsTVключ со значением true. Это позволит сделать приложение доступным для Android TV устройств через покупку через Google Play.

Кроме того, вы можете установить isGameключ со значением trueклассифицировать приложение под игрой раздел Google Play. Если этот ключ опущен или установлен false, приложение будет классифицировать под приложениями раздела.

settings =
{
    android =
    {
        supportsTV = true,
        isGame = true,
    },
}

ПОДДЕРЖКА ЭКРАНА

Опциональный supportsScreensтаблица указывает / ограничения , которые ЭКРАНЫ андроида поддерживает приложения. Смотрите Android документации для деталей.

settings =
{
    android =
    {
        supportsScreens =
        {
            smallScreens  = true,
            normalScreens = true,
            largeScreens  = true,
            xlargeScreens = false,
        },
    },
}

ОТКЛЮЧЕНИЕ ДОСТУПА К ФАЙЛАМ

По умолчанию, другие приложения предоставляются только для чтения доступа к файлам вашего приложения через Android content://URL. Это необходимо прикрепить файлы своего приложения для электронной почты , почтовых фотографий через социальный плагин, или открывать файлы через system.openURL () функцию. Если вы хотите , чтобы заблокировать доступ к файлам вашего приложения, установите следующее в build.settingsфайл:

settings =
{
    android =
    {
        allowAppsReadOnlyAccessToFiles = false,
    },
}
Заметка

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

БОЛЬШОЙ HEAP

Вы можете запросить , что Android OS обеспечивает приложение с большим количеством памяти кучи в Java, добавив largeHeapключ со значением true. Например, он может поднять максимальный размер кучи на конкретном устройстве от 32 МБ до 256 МБ. Этот параметр может быть жизнеспособным вариантом , если ваше приложение запуска из собственной памяти исключения на низкобюджетных устройствах.

settings =
{
    android =
    {
        largeHeap = true,
    },
}

ANDROID ДИРЕКТИВЫ

Важный

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

Следующие специальные директивы доступны для Corona построенных Android приложений:

  • strings- Эта директива позволяет создать strings.xmlфайл в .apk.
settings =
{
    android =
    {
        strings =
        {
            permdesc = "Custom permission description",
            permlabel = "custom-permission-Label",
        },
    },
}
  • permissions - Эта директива позволяет создавать пользовательские разрешения Android.
settings =
{
    android =
    {
        permissions =
        {
            {
                name = ".PERMISSION1",
                description = "@string/permdesc",
                icon = "@mipmap/icon",
                label = "@string/permlabel",
                permissionGroup = "android.permission-group.COST_MONEY",
                protectionLevel = "normal",
            },
        },
    },
}
  • manifestChildElements- Эта директива добавляет X элементы к manifestэлементу AndroidManifest.xml.
settings =
{
    android =
    {
        manifestChildElements =
        {
            -- Array of strings
            [[
            "true" />
            ]],
        },
    },
}
  • applicationChildElements- Эта директива добавляет X элементы к applicationэлементу AndroidManifest.xml.
settings =
{
    android =
    {
        applicationChildElements =
        {
            -- Array of strings
            [[
            "com.example.MyActivity"
                android:configChanges="keyboard|keyboardHidden"/>
            ]],
        },
    },
}
  • apkFiles- Эта директива вызывает файлы , которые будут скопированы из каталога проекта в корне .apkфайла, сохранение какой - либо иерархии каталогов. В следующем примере, google-play-services.jsonкопируется в корень .apkи res/raw/mypage.htmlкопируется res/raw. Путь к файлам всегда относительно базовой директории проекта.
settings =
{
    android =
    {
        apkFiles =
        {
            "google-play-services.json",
            "res/raw/mypage.html",
        },
    },
}

Плагины - Поддерживаемые платформы

При необходимости, вы можете точно настроить плагин , чтобы поддерживать только на определенных платформах. Это делается путем включения supportedPlatformsтаблицу с ключ-значение пар (значение true) , которые указывают на платформу (ы) , что плагин должен поддерживаться на. Например:

["plugin.gpgs"] =
{
    publisherId = "com.coronalabs",
    supportedPlatforms = { android=true },
},

Внутри этой таблицы, следующие клавиши разрешены:

ключ Платформа (ы)
iphone все устройства IOS
android все Android устройства
appletvos Apple TV
macos MacOS рабочий стол
win32 рабочий стол для Windows
["android-kindle"] Amazon Kindle
["iphone-sim"] Xcode IOS Simulator
Заметка

Опуская supportedPlatformsтаблица эффективно включает в себя плагин на всех платформах , что он по своей сути поддерживает.

Сборка управления

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

В прошивке, распределение сборки производится с использованием профиля обеспечения, имя которого содержит iPhone Distribution: и на Android они сделаны с использованием хранилища ключей с любым именем , кроме отладки .

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

В этом руководстве описаны настройки, функции и развитие для Apple TV и tvOS в Короне.

Важный

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

Разработка для tvOS

ПРИМЕР ПРОЕКТА

Мы рекомендуем вам начать с PewPew демо , так как модель первичного взаимодействия требует контроллеров (не сенсорный интерфейс на экране телевизора). Этот образец доступен в нашем GitHub хранилище или в локальной папке приложения Corona:

/SampleCode/Demos/PewPew

ОРИЕНТАЦИЯ

Apple TV не имеет понятия портрета против альбомной ориентации. Все проекты Corona tvOS выполняются в "landscapeRight"ориентации. Приложение должно поддерживать альбомной ориентации , которые будут построены через Corona Simulator.

ИКОНКИ / LAUNCH IMAGE / TOP SHELF

Руководство Human Interface от Apple на иконки и картинки определяет , как ваше приложение должно представить себя на Apple TV. Это означает , что вам нужно новый тип значка, по крайней мере один статические верхняя полка изображений, и запуск изображение.

Все активы , предоставленные должны быть .pngфайлы определенных размеров. Top Shelf изображение, отображается , когда ваше приложение является одним из первых на домашнем экране пользователя, является статическим 1920 × 720 .pngфайла и запуск изображение является 1920 × 1080 статический .pngфайл.

App иконка не просто один файл изображения, но несколько изображений сложены в виде слоев. Кроме того, вы должны обеспечить как небольшой (домашний экран) и большие (App Store) активы. Небольшие активы 400 × 240, в то время как большие активы 1280 × 768. Самое нижнее изображение в стеке не должно иметь прозрачности , и она должна служить в качестве фона для значка.

При редактировании build.settingsфайла, Corona создаст необходимые пакеты для вас. Ниже приведен пример того , что tvosраздел build.settingsдолжен выглядеть следующим образом :

settings =
{
    tvos =
    {
        -- Apple TV app icons consist of multiple "layers" in both small and large sizes
        icon =
        {
            -- A collection of 400x240 images, in order from top to bottom
            small =
            {
                "Icon-tvOS-Small-4.png",
                "Icon-tvOS-Small-3.png",
                "Icon-tvOS-Small-2.png",
                "Icon-tvOS-Small-1.png",
            },
            -- A collection of 1280x768 images, in order from top to bottom
            large =
            {
                "Icon-tvOS-Large-4.png",
                "Icon-tvOS-Large-3.png",
                "Icon-tvOS-Large-2.png",
                "Icon-tvOS-Large-1.png",
            }
        },
        -- A 1920x720 image file, displayed when your app is on the "top shelf"
        topShelfImage = "Icon-tvOS-TopShelf.png",
        -- A 2320x720 image file, displayed when your app is on the "top shelf" of a widescreen TV
        topShelfImageWide = "Icon-tvOS-TopShelfWide.png",
        -- A 1920x1080 image file, displayed briefly as your app loads
        launchImage = "Icon-tvOS-Launch.png",
    },
}

МОДЕЛЬ ВЗАИМОДЕЙСТВИЯ

Модель взаимодействия для Apple TV центрируется вокруг телевизора пульт Apple Remote. Этот пульт работает как игровой контроллер, а в «микро геймпада» профиль, а это означает, что она имеет ограниченный набор кнопок. В отличие от этого, традиционные игровые контроллеры, как те, для Xbox или PlayStation предлагают больше кнопок и, таким образом, имеют более расширенный профиль.

Для получения более подробной информации о взаимодействии, см Игровые контроллеры и MFI контроллеры руководства.

Важный
  • Сенсорные события не относятся к tvOS - эта платформа вращается вокруг relativeTouch , осей и ключевых событий. Адаптировать свою игру соответственно!
  • Все tvOS игры должны работать с «микро геймпад» профиль пульта ДУ телевизора в компании Apple.
  • Вы можете подключить контроллер MFI к вашей Mac для отправки событий контроллера в приложении работает в Corona Simulator.
Важный

Кнопка меню на контроллерах ( keyNameс "menu") , как ожидается , чтобы приостановить приложение или переместить пользователя к предыдущему экрану. После того как пользователь находится в главном меню, приложение должно использовать system.activate( "controllerUserInteraction" )( документацию ) и system.deactivate( "controllerUserInteraction" )( документации ) , чтобы сообщить операционной системе , что кнопка меню пресса должна отступить из приложения. См главного-Menu.lua образца приложения Pew Pew для примера того , как использовать это.

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

IDLE TIMER

Ваш tvOS приложение должно отключить таймер простоя экрана с помощью system.setIdleTimer () :

system.setIdleTimer( false )

ВИДЖЕТ ФОКУС

Корона виджетов не имеют встроенную поддержку для фокусировки. Для того , чтобы взаимодействовать с виджетами на Apple TV, вам нужно будет написать специальный код для обработки фокуса. См PewPew образец для демонстрации того , как управлять виджетами , когда они получают фокус и как игровой контроллер событий изменения фокуса.

NATIVE ПОКАЗАТЬ ОБЪЕКТЫ

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

КОНТРОЛЬНЫЙ СПИСОК ДЛЯ TVOS

Apple , обеспечивает контрольный список для игр на tvOS. Пожалуйста , обратитесь, чтобы убедиться , ваша игра придерживается своих требований.

Построение процесса

Строительство вашего tvOS приложение представляет собой простой процесс, как только вы установили свой сертификат и профили обеспечения.

  1. С Corona Simulator, выберите ФайлОткрыть ... , чтобы загрузить проект , который вы хотите построить.
  2. Выберите ФайлПостроитьtvOS ...
  3. Заполните информацию:
    • Имя приложения - по умолчанию, это будет соответствовать вашей папке проекта; сохранить это имя или указать другой.
    • Версия - укажите имя версии для вашего приложения.
    • Provisioning профиля - выбрать соответствующий профиль обеспечения для любого развития или распределения .
    • tvOS SDK - выберите версию tvOS построить для.
    • Сохранить в папку - указать место сохранения скомпилированного приложения.
    • После выпуска - выберите , какое действие должно быть выполнено после того, как приложение будет успешно построен.
  4. Нажмите Построить и Corona будет компилировать приложение. Затем у вас будет файл приложения , который может быть загружен на Apple TV , или представленный в App Store, в зависимости от профиля инициализации вы выбрали.

Монтаж

Есть два способа установить приложение на Apple TV, как описано ниже.

Вы можете не протестировать приложение , построенное для App Store Распространения на в Apple TV. Программы , созданные для распределения предназначены для представления Apple.

КОПИРОВАНИЕ НА УСТРОЙСТВО

  1. Подключите Apple TV к компьютеру.
  2. Выполните действия , описанные в процессе сборки выше, гарантируя , что вы выберите Копировать в устройство для После Построить опции.

XCODE

  1. Подключите телевизор Apple, открытый Xcode , а затем откройте Устройство окна, выбрав WindowУстройства .
  2. В левой колонке выберите Apple TV.
  3. В главной панели, обратите внимание на установленные приложения раздел , который показывает установленные приложения (этот список может быть пустым изначально). Ниже приведен список, нажмите кнопку [ + кнопки] и перейдите к месту нахождения .appфайла , который был сгенерирован с помощью Corona. Выберите файл и нажмите кнопку Открыть . Если предположить , что нет ошибок инициализации / сертификата, приложение должно установить на устройстве.

Сравнение функций

В общем, tvOS содержит подмножество API , доступных для IOS. Смотрите здесь для более подробной информации.

предприятие

AppШаблон проекта содержит Xcode проектов под tvOSподдиректорией. Обратите внимание , что сам плагин не делает много.

Важный

Виртуальный пульт в tvOS / Xcode Simulator не может быть использован для отправки событий контроллера. Пожалуйста , проверьте на устройство или подключить контроллер MFI .

ПЛАГИНЫ / КАРКАСЫ

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

AppШаблон проекта для tvOS содержит встроенный Pluginпроект , который вы можете изменить. Этот проект содержит две цели:

  1. Corona_plugin_library- Это цель , где вы должны добавить дополнительные исходные файлы и структуры , которые плагин зависит от (это отличается от IOS плагинов , где зависимости указаны в metadata.lua).
  2. Corona_plugin_library.framework- Это цель использовать, если вы хотите опубликовать / распространять свои плагин в Corona Store. Он создает универсальную основу (Apple TV устройства и tvOS / Xcode симулятор).

Когда переименование плагина рамки, убедитесь, что следующие условные обозначения:

  • Все рамки должны начинаться с префикса , Corona_за которым следует имя библиотеки (строка передается require()).
  • Измените каждую точку ( .) для подчеркивания ( _).

Например:

require "plugin.myCoolLibrary"Corona_plugin_myCoolLibrary.framework

В этом руководстве описывается , как настроить раскадровки на основе документа для отображения экрана запуска при запуске приложения IOS.

Конфигурация Xcode

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

  1. Скачать шаблон проекта ( launchimage-master.zip) из репозитория GitHub и распаковать его.
  2. Двойной щелчок по LaunchImage.xcodeprojфайлу для запуска Xcode.

Xcode является мощным и всеобъемлющим инструментом развития , который может показаться невыполнимыми. К счастью, наш шаблон проекта значительно упрощает процесс настройки. Предполагая , что вы загрузили и открыли шаблон , как описано выше, просто выполните следующие действия:

  1. В Xcode, в левой колонке Navigator разверните LaunchImageLaunchImage дерево папок:

Если навигатор не виден, раскрыть его через ViewНавигаторыПоказать Navigator (⌘-0) .

  1. В дереве папок Навигатора, выберите Assets.xcassetsзапись:
  1. В нужных программах редактирования изображений, создать три изображения. Вы будете нуждаться в «базовой» версии плюс одна версия вдвое и еще втрое. Они не должны придерживаться определенных размеров пикселей , так как они будут масштабироваться , чтобы соответствовать UIImageViewпри сохранении исходного соотношения сторон

Мы включаем три образца изображения в шаблоне проекта пакета, который можно использовать для тестирования.

  1. Сохранение / копирование трех изображений в корневой папке вашего проекта коронного (вместе main.lua) с IOS стиле схемы суффикс Launch.png, Launch@2x.pngи Launch@3x.pngсоответственно.
  2. Назад в Xcode, в центральной панели, выберите Launchзапись:
  1. Непосредственно справа, вы заметите три «слот» помечен как 1x , 2x , и  3x . Из Finder, перетащите изображения , которые вы создали ранее в соответствующие пазы: Launch.pngв 1x  слот, Launch@2x.pngв ом  слот, и Launch@3x.pngв  слоты:
  1. Теперь, в левой колонке Navigator выберите LaunchScreen.storyboardфайл:

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

  1. Сохранить проект в настоящее время, а затем выберите ФайлЭкспорт ... из главного меню приложения Xcode.
Важный

Перед экспортом убедитесь , что LaunchScreen.storyboardпо - прежнему выбран в левой боковой колонке Navigator - это очень важно для создания соответствующего типа файла.

  1. В диалоговом окне панели экспорта, перейдите в корневую папку вашего проекта коронного. Затем, в нижней части , найдите Формат файла поле выбора и изменения выбора в Interface Builder раскадровки Package .

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

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

Для того, чтобы убедиться, что вы все сделали правильно, пожалуйста, следуйте этому перечню:

  1. В Finder, перейдите в корневую папку вашего проекта коронного.
  2. Внутри, проверьте наличие LaunchScreen.storyboardcфайла. Если он не существует, то , возможно, забыли выбрать правильное место (корневой папки проекта) при экспорте файла. При необходимости повторите шаги 8-10 выше.
  3. Получить дополнительную информацию о LaunchScreen.storyboardcфайле (⌘-I) . Его вид должен быть Builder Интерфейс Составитель Раскадровка документов . Если это не так , вы , возможно, забыли , чтобы выбрать правильный формат файла при экспорте файла. При необходимости повторите шаги 8-10 выше.
  4. Убедитесь , что папка содержит три изображения , которые будут использоваться для стартового экрана: Launch.png, Launch@2x.pngи Launch@3x.png. Если эти файлы не существуют, вы , возможно, забыли , чтобы сохранить / скопировать их в корневую папку.

построить Настройки

Один последний аспект необходимо связать свой новый скомпилированный пакет раскадровки с проектом Corona:

  1. Откройте проект коронного build.settingsфайл.
  2. В iphoneplistтаблице, добавьте UILaunchStoryboardNameключ со значением "LaunchScreen":
settings =
{
    iphone =
    {
        plist =
        {
            CFBundleIconFiles = {},  -- Required!
            UILaunchStoryboardName = "LaunchScreen"-- Required!
        },
    },
}
  1. Сохраните build.settingsфайл.
Важный

Если у вас есть UILaunchImagesключ и связанные с суб-таблицы в вашей plistтаблице (см ниже) , вы должны удалить его вместе со всеми файлами изображений , связанных с этой установкой. UILaunchStoryboardNameКлюч заменяет его и LaunchScreen.storyboardcфайл будет контролировать все ваши экраны запуска.

Статический метод

Альтернативный способ создания LaunchScreen.storyboardcфайла должен включать в себя набор статических изображений в папке проекта, затем связать их в рамках проекта build.settingsфайла. Эти изображения должны придерживаться названий / размеров , указанных ниже , и они должны быть помещены в корневой директории проекта вместе main.lua.

Заметка

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

файл Размер (Ш × В) ориентация Целевые устройства
Default@2x.png 640 × 960 портрет Айфон 4С
Default-568h@2x.png 640 × 1136 портрет iPhone 5 / 5s
Default-Landscape-568h@2x.png × 640 тысяча сто тридцать-шесть пейзаж iPhone 5 / 5s
Default-667h@2x.png 750 × 1 334 портрет iPhone 6 / 6s / 7
Default-Landscape-667h@2x.png 1334 × 750 пейзаж iPhone 6 / 6s / 7
Default-736h@3x.png 1242 × 2208 портрет iPhone 6 Plus / 6с Plus / 7 Plus
Default-Landscape-736h@3x.png 2208 × 1242 пейзаж iPhone 6 Plus / 6с Plus / 7 Plus
Default-Portrait.png 768 × 1024 портрет IPAD 2/3, IPAD мини 1
Default-Landscape.png 1024 × 768 пейзаж IPAD 2/3, IPAD мини 1
Default-Portrait@2x.png 1536 × 2048 портрет IPad 4, IPad Air, IPad Mini 2/3/4, IPad Pro 9,7"
Default-Landscape@2x.png 2048 × 1536 пейзаж IPad 4, IPad Air, IPad Mini 2/3/4, IPad Pro 9,7"
Default-Portrait-1366@2x.png 2048 × 2732 портрет IPad Pro 12"
Default-Landscape-1366@2x.png 2732 × 2048 пейзаж IPad Pro 12"

После того, как вы добавили эти файлы в папку проекта, вы должны указать свое существование и другие определения в UILaunchImagesтаблице build.settings:

settings =
{
    iphone =
    {
        plist =
        {
            -- Required launch image files/definitions table
            UILaunchImages = {
                -- iPhone 4 Portrait
                    ["UILaunchImageMinimumOSVersion"] = "7.0",
                    ["UILaunchImageName"] = "Default",
                    ["UILaunchImageOrientation"] = "Portrait",
                    ["UILaunchImageSize"] = "{320, 480}"
                },
                -- iPhone 4 LandscapeLeft
                    ["UILaunchImageMinimumOSVersion"] = "7.0",
                    ["UILaunchImageName"] = "Default",
                    ["UILaunchImageOrientation"] = "LandscapeLeft",
                    ["UILaunchImageSize"] = "{320, 480}"
                },
                -- iPhone 4 LandscapeRight
                    ["UILaunchImageMinimumOSVersion"] = "7.0",
                    ["UILaunchImageName"] = "Default",
                    ["UILaunchImageOrientation"] = "LandscapeRight",
                    ["UILaunchImageSize"] = "{320, 480}"
                },
                -- iPhone 5 Portrait
                    ["UILaunchImageMinimumOSVersion"] = "7.0",
                    ["UILaunchImageName"] = "Default-568h",
                    ["UILaunchImageOrientation"] = "Portrait",
                    ["UILaunchImageSize"] = "{320, 568}"
                },
                -- iPhone 5 LandscapeLeft
                    ["UILaunchImageMinimumOSVersion"] = "7.0",
                    ["UILaunchImageName"] = "Default-568h",
                    ["UILaunchImageOrientation"] = "LandscapeLeft",
                    ["UILaunchImageSize"] = "{320, 568}"
                },
                -- iPhone 5 LandscapeRight
                    ["UILaunchImageMinimumOSVersion"] = "7.0",
                    ["UILaunchImageName"] = "Default-568h",
                    ["UILaunchImageOrientation"] = "LandscapeRight",
                    ["UILaunchImageSize"] = "{320, 568}"
                },
                -- iPad Portrait
                    ["UILaunchImageMinimumOSVersion"] = "7.0",
                    ["UILaunchImageName"] = "Default-Portrait",
                    ["UILaunchImageOrientation"] = "Portrait",
                    ["UILaunchImageSize"] = "{768, 1024}"
                },
                -- iPad LandscapeLeft
                    ["UILaunchImageMinimumOSVersion"] = "7.0",
                    ["UILaunchImageName"] = "Default-Landscape",
                    ["UILaunchImageOrientation"] = "LandscapeLeft",
                    ["UILaunchImageSize"] = "{768, 1024}"
                },
                -- iPad LandscapeRight
                    ["UILaunchImageMinimumOSVersion"] = "7.0",
                    ["UILaunchImageName"] = "Default-Landscape",
                    ["UILaunchImageOrientation"] = "LandscapeRight",
                    ["UILaunchImageSize"] = "{768, 1024}"
                },
                -- iPhone 6 Portrait
                    ["UILaunchImageMinimumOSVersion"] = "8.0",
                    ["UILaunchImageName"] = "Default-667h",
                    ["UILaunchImageOrientation"] = "Portrait",
                    ["UILaunchImageSize"] = "{375, 667}"
                },
                -- iPhone 6 LandscapeLeft
                    ["UILaunchImageMinimumOSVersion"] = "8.0",
                    ["UILaunchImageName"] = "Default-667h",
                    ["UILaunchImageOrientation"] = "LandscapeLeft",
                    ["UILaunchImageSize"] = "{375, 667}"
                },
                -- iPhone 6 LandscapeRight
                    ["UILaunchImageMinimumOSVersion"] = "8.0",
                    ["UILaunchImageName"] = "Default-667h",
                    ["UILaunchImageOrientation"] = "LandscapeRight",
                    ["UILaunchImageSize"] = "{375, 667}"
                },
                -- iPhone 6 Plus Portrait
                    ["UILaunchImageMinimumOSVersion"] = "8.0",
                    ["UILaunchImageName"] = "Default-736h",
                    ["UILaunchImageOrientation"] = "Portrait",
                    ["UILaunchImageSize"] = "{414, 736}"
                },
                -- iPhone 6 Plus LandscapeLeft
                    ["UILaunchImageMinimumOSVersion"] = "8.0",
                    ["UILaunchImageName"] = "Default-Landscape-736h",
                    ["UILaunchImageOrientation"] = "LandscapeLeft",
                    ["UILaunchImageSize"] = "{414, 736}"
                },
                -- iPhone 6 Plus LandscapeRight
                    ["UILaunchImageMinimumOSVersion"] = "8.0",
                    ["UILaunchImageName"] = "Default-Landscape-736h",
                    ["UILaunchImageOrientation"] = "LandscapeRight",
                    ["UILaunchImageSize"] = "{414, 736}"
                },
                -- iPad Pro Portrait
                    ["UILaunchImageMinimumOSVersion"] = "9.0",
                    ["UILaunchImageName"] = "Default-Portrait-1366",
                    ["UILaunchImageOrientation"] = "Portrait",
                    ["UILaunchImageSize"] = "{1024, 1366}"
                },
                -- iPad Pro Landscape Right
                    ["UILaunchImageMinimumOSVersion"] = "9.0",
                    ["UILaunchImageName"] = "Default-Landscape-1366",
                    ["UILaunchImageOrientation"] = "LandscapeRight",
                    ["UILaunchImageSize"] = "{1024, 1366}"
                },
                -- iPad Pro Landscape Left
                    ["UILaunchImageMinimumOSVersion"] = "9.0",
                    ["UILaunchImageName"] = "Default-Landscape-1366",
                    ["UILaunchImageOrientation"] = "LandscapeLeft",
                    ["UILaunchImageSize"] = "{1024, 1366}"
                },
            },
        },
    },
}
Это руководство объясняет, как локализовать приложение IOS для нескольких языков / торговых площадок.

Bundle Локализации

Первый шаг в локализации приложения является определение, какие языки вы хотите поддержать. После этого определяется:

  1. Найдите соответствующий 2-символьный ISO 639-1 код языка для каждого.
  2. В проекте build.settingsфайл, добавьте эти языковые коды в CFBundleLocalizationsтаблице в пределах settingsiphoneplist таблице. Порядок не важен, но убедитесь , что каждый элемент является 2-символьный строковое значение соответствующее языку, например:
settings =
{
    iphone =
    {
        plist =
        {
            CFBundleLocalizations =
            {
                "en"--English
                "es"--Spanish
                "it"--Italian
                "de"--German
                "fr"--French
                "ja"--Japanese
                "ko"--Korean
            },
        },
    },
}
  1. Добавьте CFBundleDisplayNameи CFBundleNameключи в качестве приложения по умолчанию (см сборки проекта настройки для более подробной информации). Обратите внимание , что они должны находиться внутри plistтаблицы , но за пределами CFBundleLocalizationsтаблицы.
settings =
{
    iphone =
    {
        plist =
        {
            CFBundleLocalizations =
            {
                "en"--English
                "es"--Spanish
                "it"--Italian
                "de"--German
                "fr"--French
                "ja"--Japanese
                "ko"--Korean
            },
            CFBundleDisplayName = "Princess",
            CFBundleName = "Princess",
        },
    },
}

Локализованные папки проекта

Второй этап включает в себя создание локализованной папки проекта для каждого языка в корневой директории проекта вместе main.lua.

  1. Для каждого языка , который вы указали в CFBundleLocalizationsтаблице в build.settingsсоздайте новую xx.lprojпапку в корневом каталоге приложения, где xxпредставляет собой 2-символьный код языка.
Важный
  • Каждая папка должна быть приложена .lproj. Например, правильное имя папки для английского языка en.lproj, а не просто en.
  • Каждая папка должна следовать регистрозависимому именованию. Например, правильное название папки для английского языка en.lproj, а не EN.lproj.
  1. В каждом из этих локальных папок проекта, создать новый текстовый файл под названием InfoPlist.strings:
  1. В качестве содержимого для каждого InfoPlist.stringsфайла, указать как CFBundleDisplayNameи CFBundleNameлинию с правильным названием для этого языка, например:

Английский  ( en.lproj/InfoPlist.strings)

CFBundleDisplayName = "Princess";
CFBundleName = "Princess";

Испанский  ( es.lproj/InfoPlist.strings)

CFBundleDisplayName = "La princesa";
CFBundleName = "La princesa";

Корейский  ( ko.lproj/InfoPlist.strings)

CFBundleDisplayName = "공주 패션쇼";
CFBundleName = "공주 패션쇼";

Language Testing

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

  1. Постройте приложение , как описано в процессе построения раздела Provisioning и строительное руководство.
  2. Установите приложение , как описано в разделе Установка устройства в Provisioning и здания руководства.
  3. Измените настройку языка устройства через НастройкиGeneralЯзык и области и выбрать один из языков в вашей установки локализации. Если вы настроили все , как указано, имя приложения должно появиться как имя вы определили для CFBundleDisplayNameв соответствующем InfoPlist.stringsфайле.
отказ

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

Graphics, Audio, Animation / Графика, Аудио, Анимация

Создание медийных объектов

Экранные объекты легко создаются с помощью методов коронного отображения библиотеки:

объект метод
Группа дисплея display.newGroup ()
Стандартное изображение display.newImage ()
Динамически Выбранное изображение display.newImageRect ()
Текст display.newText ()
Анимированные Sprite display.newSprite ()
Прямоугольник display.newRect ()
Круг display.newCircle ()
Прямоугольник с закругленными углами display.newRoundedRect ()
Линия display.newLine ()
многоугольник display.newPolygon ()
Рельефный текст display.newEmbossedText ()
Контейнер display.newContainer ()
снимок display.newSnapshot ()
излучатель частиц display.newEmitter ()
меш display.newMesh ()
Заметки
  • Экранные объекты ведут себя в основном как обычные столы Lua. Это означает , что вы можете добавить свои собственные свойства объекта, до тех пор , пока они не конфликтуют с зарезервированным свойством или методом именами. Незначительное исключением является то , что вы не можете индексировать в экранном объект в виде массива с использованием числовых индексов. См Технических примечаний в конце этого руководства для получения дополнительной информации.
  • Большинство объектов отображения имеют точки привязки , который по умолчанию объекта центра . В отличие от этого , дисплей группы не по умолчанию, уважайте точки привязки. Кроме того , источник по умолчанию отображения групп , 0,0которая находится в верхнем левом углу сцены, а не центр. Таким образом, если вы просто поместите негрупповой экранный объект на сцене в точке с координатами 0,0, его центральная точка будет расположена в верхнем левом углу сцены. Для получения дополнительной информации, пожалуйста , см преобразование и анкеров и программирования группы руководства.

Свойства и методы

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

Свойства доступны через оператор точки . Например, можно изменить альфа объекта до 50% путем кодирования:

local myImage = display.newImage( "image.png" )
myImage.alpha = 0.5  --change the alpha property

Методы выполняются с помощью оператора толстой кишки . Например, вы можете перевести (перемещение) объекта кодирования:

local myImage = display.newImage( "image.png" )
myImage:translate( 10, 50 )  --move the object 10 pixels right and 50 pixels down.

Отображение иерархии

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

Экранные объекты добавляются в сцену по умолчанию. Тем не менее, вам обычно нужно вставить объект отображения в конкретную группу отображения. Это достигается с помощью двух методов:

МЕТОД ИНЛАЙН

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

local myGroup = display.newGroup()
--create object in 'myGroup'
local myImage = display.newImage( myGroup, "image.png" )

ПРЯМОЙ МЕТОД

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

local myGroup = display.newGroup()
--create object on the stage (default)
local myImage = display.newImage( "image.png" )
--insert object into 'myGroup'
myGroup:insert( myImage )
Заметка

Хотя отображаемые группы в основном таблицы, библиотечные функции Lua любят table.insert()и ipairs()являются не совместимыми с группами. Кроме того, вы не можете получить количество детей в группе отображения , используя #myGroup. Вместо этого используйте myGroup.numChildren.

Заказать объект

В конкретной группе отображения, объекты рисуются в спине к передней порядка. Таким образом, первый объект , который вы создаете , будет находиться позади объектов , созданных позже.

К счастью, порядок отображения объектов не установлен в камне. Вы можете изменить относительный порядок объекта в любой момент времени. Порядок , в котором рисуется дети группы отображения определяется порядком массив. Используя group:insert()метод, вы можете изменить порядок положения объекта в пределах своей родительской группы.

local square = display.newRect( myGroup, 0, 0, 100, 100 )  --red square is at the bottom
square:setFillColor( 1, 0, 0 )
local circle = display.newCircle( myGroup, 80, 120, 50 )  --green circle is in the middle
circle:setFillColor( 0, 1, 0 )
local rect = display.newRect( myGroup, 0, 0, 120, 80 )  --blue rectangle is at the top
rect:setFillColor( 0, 0, 1 )
--'square', 'circle', and 'rect' all have same parent ('myGroup')
local parent = square.parent
 
--move 'square' to the top (siblings at higher indices reside above those at lower ones)
--conceptually, this just re-inserts the object at the top of its group
parent:insert( square )
 
--move 'circle' 'below all other siblings
parent:insert( 1, circle )

Кроме того, объекты также могут быть перемещены в пределах группы , используя object:toBackи object:toFrontметоды.

Обновления экрана

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

Экран никогда не обновляется , а блок Lua кода выполняется. Поэтому, если изменить отображение объекта несколько раз в блоке кода - обновление xпозиции, например - только последний изменение (окончательная xнастройка) будет отражать , когда обновления экрана.

Ссылки на объект

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

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

local yellowDuck = display.newText( "Quack!", 50, 50, "Arial", 60 )  --OK!
local orangeTiger22 = display.newText( "Roar!", 50, 50, "Arial", 60 )  --OK!
local 23dog = display.newText( "Woof!", 50, 50, "Arial", 60 )  --unacceptable! (name begins with a number)
local and = display.newText( "and", 50, 50, "Arial", 60 )  --unacceptable! ('and' is a Lua-reserved term)

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

Например:

local squares = display.newGroup()
local redSquare1 = display.newRect( squares, 0, 0, 40, 40 )
local redSquare2 = display.newRect( squares, 0, 0, 40, 40 )
local redSquare3 = display.newRect( squares, 0, 0, 40, 40 )
redSquare1:setFillColor( 1, 0, 0 )
redSquare2:setFillColor( 1, 0, 0 )
redSquare3:setFillColor( 1, 0, 0 )
local whiteSquare1 = display.newRect( squares, 0, 0, 40, 40 )
local whiteSquare2 = display.newRect( squares, 0, 0, 40, 40 )
whiteSquare1:setFillColor( 1 )
whiteSquare2:setFillColor( 1 )
--insert only the red squares into a table
local redSquares = { redSquare1, redSquare2, redSquare3 }

В то время как красные квадраты и белые квадраты находятся в squaresгруппе отображения, вы можете управлять только красными квадратами, обернув через redSquaresстол:

for i = 1, #redSquares do
    --manipulate the square at the current index (i)
    redSquares[i].x = redSquares[i].x + 100
    redSquares[i]:scale( 0.5, 0.5 )
end

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

Удаление отображения объектов

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

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

ПРЯМАЯ УДАЛЕНИЕ

Этот метод нацелен на конкретный объект отображения и удаляет его с экрана.

display.remove( myObject )
--OR
myObject:removeSelf()
--OR
myGroup:remove( myObject )  --group array index also valid

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

display.remove ( myObject )
myObject = nil  --set reference to nil!
--OR
myObject:removeSelf()
myObject = nil  --set reference to nil!
--OR
myGroup:remove( myObject )
myObject = nil  --set reference to nil!

ГРУППА УДАЛЕНИЯ

Этот метод удаляет все дети в группе отображения - все , что вам нужно сделать , это удалить саму группу отображения , а затем nilее эталонную.

display.remove( myGroup )
myGroup = nil
--OR
myGroup:removeSelf()
myGroup = nil
Важный
  • Как уже упоминалось в объектные ссылки разделе выше, если существуют другие переменные или ссылки , которые указывают на объект отображения, оно не может быть полностью освобожден из памяти. Решение состоит в том, чтобы nilиз всех этих внешних ссылок. Как только это будет сделано, Lua может освободить распределение памяти.
  • Глобальные переменные никогда не автоматически освобождается из памяти, так что, если глобальная переменная указывает на экранный объект, он будет продолжать занимать память , даже если объект больше не находится в иерархии отображения. Не забудьте nilвсе глобальные ссылки для отображения объектов.
  • При удалении объекта отображения, слушатели событий, которые прикреплены к нему - нажми и сенсорные слушатель, например - также освобождены из памяти. Вам не нужно явно удалить обработчик событий, которые изолированы на объект.
  • Переходы , которые применяются к объекту должны быть отменены и установлены nilперед удалением объекта. Поскольку объекты отображения являются по существу таблицы Lua, один удобный метод , чтобы установить переход как свойство самого объекта отображения. Это позволяет легко получить доступ и отменить его.

Технические примечания

Рядом с начала этого руководства, мы упоминали, что экранные объекты ведут себя «по существу» как таблицы Lua. Исключением из этого правила является то, что вы не можете установить метатаблицы экранных объектов. Это связано с характером нашей C ++ интеграции / Lua в данном конкретном случае.

экранные объекты Corona произрастают C ++ объекты внутри. Lua реализует связывание родных указателей с «UserData», который устанавливает метатаблицу. USERDATA метатаблица не может быть заменена Lua кодом; это мера определяется самой Lua.

Как правило, родные объекты, связанные с Lua, таким образом, не ведут себя как таблицы. Есть несколько примеров этого в Короне. Такие объекты могут иметь свойства и / или методы, но они не являются расширяемыми. В отличии от этого, экранных объектов Corona ведут себя как таблицы - это удобная функция, и альтернатива была бы полем «UserData» обеспечения доступа к пользовательским данным, связанным с экранным объектом. Объединение этой функции непосредственно в объект отображения проще и более расширяемый для конечного пользователя.

По сути, основной родной мост ограничивается тем, что допускается в Lua, и мы считаем этот архитектурный выбор в качестве основного признака Corona. В конечном счете, Corona является ++ / OpenGL движка C с рамками, предназначенными для быстрого развития, и эти преимущества оправдывают использование метатаблицы для отображения объектов.

Группа Программирование

В Corona, дисплей группа является стандартным способом для организации объектов в иерархическом порядке .

обзор

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

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

Система координат

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

В Короне, происхождения по умолчанию отображения групп , 0,0которая находится в верхнем левом углу сцены, а не центр. С этой 0,0точкой, положительные xзначения распространяются права, в то время как положительные yзначения проходят вниз (не вверх , как в декартовой системе координат). Отрицательные координаты также допустимы, но , как вы можете видеть на рисунке ниже, они не будут находиться в пределах той части группы , которая видна на экране (черная область). Группы могут, однако, быть перемещены , чтобы настроить их происхождения точки - см Группы трансформаций ниже для получения дополнительной информации.

Рисунок Модель

«Чистый лист бумаги» аналогия полезна для понимания модели рисования коронной. Подобно тому , как если бы вы рисуете фигуры на листе бумаги, Corona экранные объекты , которые расположены в группе отображения стать частью этой группы (бумага).

Экранные объекты, которые не помещены в определенную группу становится частью стадии , но в процессе разработки приложения, вы, как правило , создать несколько групп отображения в определенном слоистом порядке. Можно себе представить это как «стопку бумаги» с каждой группой дисплея , представляющей один листом в стопке. Например, предположим , что вы хотите , чтобы имитировать «пейзажной живописи» с тремя слоями (три дисплея группы) следующим образом :

  1. далеко фон - содержит небо, облака и т.д.
  2. вблизи фон - содержит горы на фоне
  3. на переднем плане - есть деревья, трава, камни и т.д.

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

Создание групп

Создание новой группы отображения так просто, как следующие:

local myGroup = display.newGroup()

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

local myGroup = display.newGroup()
--Create a rectangle
local rect = display.newRect( 0, 0, 40, 40 )
--Insert it into 'myGroup'
myGroup:insert( rect )

Многие API - интерфейсы объектов отображения также принимает группу в качестве параметра строкового. См Экранные объекты , руководство по API конкретных ссылок.

local myGroup = display.newGroup()
--Create a rectangle and insert it into 'myGroup'
local rect = display.newRect( myGroup, 0, 0, 40, 40 )

ИЕРАРХИЯ GROUP

ВЫ ДОЛЖНЫ СОЗДАТЬ ГРУППЫ ОТОБРАЖЕНИЯ В ОПРЕДЕЛЕННОМ ПОРЯДКЕ. В ОТНОШЕНИИ ВАШЕГО КОДА, ТО ПЕРВЫМ ОБЪЯВИЛА ГРУППА БУДЕТ НА САМОМ ДЕЛЕ НАХОДИТСЯ ПОЗАДИ СЛЕДУЮЩЕЙ ГРУППЫ В ВИЗУАЛЬНО СЛОИСТОМ ПОРЯДКЕ. НАПРИМЕР, ЧТОБЫ СОЗДАТЬ «ПЕЙЗАЖ КАРТИНУ» ОБСУЖДАЛОСЬ ВЫШЕ, ОБЪЯВИТЬ ТРИ ГРУППЫ ОТОБРАЖЕНИЯ СЛЕДУЮЩИМ ОБРАЗОМ :

local farBackground = display.newGroup() 
local nearBackground = display.newGroup()  --this will overlay 'farBackground' 
local foreground = display.newGroup()  --and this will overlay 'nearBackground'
Важный

Хотя отображаемые группы в основном таблицы, библиотечные функции Lua любят table.insert()и ipairs()являются не совместимыми с группами. Кроме того, вы не можете получить количество детей в группе отображения , используя #myGroup. Вместо этого используйте myGroup.numChildren.

Удаление групп

Группы могут быть удалены с помощью display.remove () или объекта: removeSelf () функции. Когда вы сделаете это, все дети в группе будут удалены. Тем не менее, вы все равно должны вручную удалить переменные или другие ссылки , связанные с этими детьми, в противном случае они не будут освобождены из памяти. Для получения более подробной информации см Display Objects руководство.

local myGroup = display.newGroup()
--Create 2 rectangles and insert them into 'myGroup'
local rect1 = display.newRect( myGroup, 0, 0, 40, 40 )
local rect2 = display.newRect( myGroup, 30, 30, 60, 60 )
myGroup:removeSelf()
--OR
display.remove( myGroup )
myGroup = nil

Особенности по уходу за детьми

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

Группа Трансформации

Группа преобразований применяются иерархически детям группы. Ребенка преобразование применяется первым, с последующим преобразованием его родителя, а затем каждого предка, все пути к сцене . Следовательно, дети в группе расположены относительно позиции родительской группы. При изменении преобразования группы (перемещение / масштаб / Rotate) это влияет на преобразование детей.

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

Для тестирования, красный векторный объект был составлен на 100,100который означает его центральное положение , так как объекты отображения имеют центр по умолчанию на якорь .

local myGroup = display.newGroup()
local myBox = display.newRect( 100, 100, 80, 80 )
myBox:setFillColor( 1, 0, 0, 0.8 )
myGroup:insert( myBox )

При перемещении (преобразование) группу в новое xи yположение, его происхождение движется к этой точке:

myGroup.x = 50
myGroup.y = 50

Обратите внимание на то, что красная коробка движется вместе с группой (его родителей). Однако объект присущая xи yпозиция никак не изменится - она остается , 100,100даже если появляется окно на контент позиции 150,150. Это потому , что Corona управляет положением экранных объектов в зависимости от их родительской группы.

Для того, чтобы получить фактическое положение объекта в координатах контента, независимо от перемещаемой / масштабированной / повернутой группы, использовать объект: localToContent () функцию:

local actualBoxX, actualBoxY = myBox:localToContent( 0,0 )
print( actualBoxX, actualBoxY )

Группа анкеры

Для нормального экранного объекта - изображение или вектор формы, например - ее анкерных элементов управления , как его геометрия позиционируется относительно ее происхождения . При изменении якоря нормального экранного объекта, его происхождение никак не меняется. Вместо этого, его геометрия движется относительно ее происхождения. См трансформирует и Якорь руководства для получения дополнительной информации.

В отличие от этого , дисплей группы не уважают якоря по умолчанию. Это происходит потому , что отображение группа, на базовом принципе безгранична и охватывает до бесконечности во всех направлениях. Они, однако, обладают xи yположение , которое по умолчанию 0,0 ( в верхнем левом углу области содержимого). Эта позиция является происхождение группы.

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

local myGroup = display.newGroup()
local myBox = display.newRect( 100, 100, 80, 80 )
myBox:setFillColor( 1, 0, 0, 0.8 )
myGroup:insert( myBox )
myGroup.x = 50
myGroup.y = 50
--Add a smaller blue box
local blueBox = display.newRect( 50, 50, 50, 50 )
blueBox:setFillColor( 0, 0, 1, 0.8 )
myGroup:insert( blueBox )

Теперь установите якорь группы в верхнем левом углу ( anchorX и anchorY как набор к 0):

myGroup.anchorX = 0
myGroup.anchorY = 0

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

Прежде чем изучать , как anchorChildrenработает свойство, проверить теоретическую ограничительную рамку (непрозрачный белый) в следующем изображении - это поле будет использоваться в качестве наглядного пособия для понимания анкеров по группам. Обратите внимание , что ограничивающий прямоугольник учитывает максимальную верхнюю правую, нижнюю и левую точки из всех экранных объектов в группе:

Теперь установите anchorChildrenсвойство true:

myGroup.anchorChildren = true

Обратите внимание , что целые границы группы перейти к текущему происхождению группы ( 50,50как заявлено ранее). Поскольку якорь группы установлен в положение 0,0 (верхний левый) , то верхний левый угол его границы - не его центр - расположены в начале координат группы.

Если вся группа происхождения перемещается, объекты будут двигаться вместе с ним, как и ожидалось:

myGroup.x = 150

Если якорь сбрасывается к началу-вправо ( 1,0), группа переустанавливает по сравнению с текущим началом в 150,50:

myGroup.anchorX = 1
myGroup.anchorY = 0

В сущности, когда в контекстно - медийной группы anchorChildrenсвойства установлено значение true, дети все смещения на ту же сумму. Это смещение вычисляется относительно ограничительной рамки для всех детей в группе. По сути, дети рассматривают , как будто они единое целое, и происхождение группы является якорем этого блока.

Заметка

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

Контейнеры

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

Закадровый Очищение

Корона будет отбраковывать дочерние объекты, которые находятся за пределами экрана.

Трансформации и анкеры

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

 

Трансформации

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

преобразование Методы и свойства
Масштаб object.xScale , object.yScale , объект: шкала ()
вращение object.rotation , объект: поворот ()
Должность object.x , object.y , объект: перевод ()

При применении преобразования в последовательности, Корона вычисляет матрицу преобразования для отображения объекта и применяет свойства в определенном порядке:

  1. Масштаб
  2. вращение
  3. Должность
Заметка

Трансформации всегда относительно родителя, так что окончательное преобразование включает прообразы родителей объекта (и предков). См Группы трансформаций в Programming Group руководстве для получения дополнительной информации.

Якоря

Якорь объекта управляет тем, как геометрия позиционируется относительно начала координат объекта. Это определяется с помощью object.anchorX и object.anchorY свойств.

Анкерная пара (0.5,0.5)( по умолчанию) центры геометрии о происхождении. Якорь пара (0,0)делает верхний левый из границ геометрии в начале координат, а якорь пара (1,1)делает его нижний правый пределы геометрии в. По умолчанию значения анкерных должен находиться в диапазоне от 0.0до 1.0и якорный новых объектов установлен (0.5,0.5), однако эти значения могут быть изменены с помощью display.setDefault () .

При изменении значения якорного, происхождение объекта никак не изменится. Вместо того, чтобы геометрия движется относительно начала координат. В следующей диаграмме, синий квадрат поворачивается , чтобы проиллюстрировать , как геометрия преобразуется вокруг начала координат в зависимости от якоря ( object.anchorX, object.anchorY) .

ГРУППА АНКЕРЫ

Большинство экранных объектов имеют якоря предварительно включены . Тем не менее, группа объекты не почитают якорь по умолчанию, так что вы должны установить anchorChildren свойства , чтобы включить его якорь. См групп и анкеров в Programming Group руководства для получения дополнительной информации.

Листы изображения

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

обзор

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

Image листы также удобная функция. Использование популярных сторонних инструментов , такие как TexturePacker , вы можете создавать свои изображения по отдельности , а затем проинструктировать приложение для объединения несколько файлов изображений в один оптимизированном лист изображения.

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

Настройка изображения листа

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

Инициализация листа изображения осуществляется с помощью graphics.newImageSheet () функции:

graphics.newImageSheet( filename, [baseDir, ] options )
  • filename - это имя файла изображения, которое включает в себя все кадры листа изображения.
  • baseDir- указывает базовый каталог ( каталог системы постоянной ) , где filenameнаходится.
  • options - таблица с ключами и / или суб-таблиц, которые представляют собой конкретные параметры, относящиеся к листу изображения.

ПРОСТЫЕ ПАРАМЕТРЫ

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

local options =
{
    width = 50,
    height = 50,
    numFrames = 3
}
local sheet = graphics.newImageSheet( "mySheet.png", options )

КОМПЛЕКСНЫЕ ПАРАМЕТРЫ

Эта конфигурация требуется , если лист имеет изображения рамки различных размеров. В этой конфигурации, optionsсостоит из массива таблиц в пределах родительской framesтаблицы. Каждая таблица в массиве представляет собой один кадр в листе изображения. Для каждого кадра, вы должны указать xи yначать (верхний левый угол) , а также с widthи heightрамы. Взятые вместе, эти четыре параметра охватывает прямоугольные границы кадра.

Например, рассмотрим следующий лист (изображение mySheet.png) с двумя кадрами различной ширины:

232 277
276

Настройка изображения листа будет выглядеть следующим образом:

local options =
{
    frames =
    {
        {   -- frame 1
            x = 0,
            y = 0,
            width = 232,
            height = 276
        },
        {   -- frame 2
            x = 232,
            y = 0,
            width = 277,
            height = 276
        }
    }
}
local sheet = graphics.newImageSheet( "mySheet.png", options )

ДИНАМИЧЕСКИ ОТДЕЛЬНЫЕ ЛИСТЫ ИЗОБРАЖЕНИЯ

Так же , как отдельные изображения , отображаемых с display.newImageRect () , изображение листы могут быть выбраны динамически в зависимости от разрешения экрана. Для этого необходимо указать следующие пары ключ-значение в optionsтаблице:

  • sheetContentWidth
  • sheetContentHeight

Эти значения сказать Corona размера оригинального листа 1x изображений. Например, если вы разрабатываете как для IPad и IPad Retina, и вы используете изображение листа 1000 × 1000 для регулярного IPAD, вы должны указать 1000для обоих из этих значений , а затем создать свой лист изображения Retina в 2000 × 2000.

local options =
{
    width = 100,
    height = 100,
    numFrames = 10,
    sheetContentWidth = 1000,  --width of original 1x size of entire sheet
    sheetContentHeight = 1000  --height of original 1x size of entire sheet
}
local sheet = graphics.newImageSheet( "mySheet.png", options )

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

Просмотр изображений

Для того, чтобы отобразить изображение (кадр) из листа изображения, использовать существующие API для отображения, но указать лист и номер кадра, а не только имя изображения:

local sheet = graphics.newImageSheet( "mySheet.png", options )
local frame1 = display.newImage( sheet, 1 )
local frame2 = display.newImage( sheet, 2 )

Если вам требуется динамически выбранные изображения используйте display.newImageRect () и указать ширину и высоту , как обычно:

local sheet = graphics.newImageSheet( "mySheet.png", options )
local frame1 = display.newImageRect( sheet, 1, 232, 276 )
local frame2 = display.newImageRect( sheet, 2, 277, 276 )

Обрезка Примечания

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

 +  знак равно

Обратите внимание, что прозрачное пространство, представленное серой шахматной доски в приведенных выше примерах, является обрезаны и птицы упакованы близко друг к другу, чтобы достигнуть наименьшего возможного листа изображения. С этим изменением, лист изображения теперь 450 × 262 вместо 512 × 276.

Важный

В то время как обрезки часто необходимы для достижения минимально возможных листов изображения, есть некоторые важные замечания об использовании, что вы должны быть в курсе, в частности, в отношении позиционирования.

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

Корона управляет этим с некоторыми дополнительными параметрами настройки изображения листа. К ним относятся sourceX, sourceY, sourceWidth, и sourceHeight. Они добавляются к листу изображений optionsследующим образом :

local options =
{      
    frames =
    {
        {   -- frame 1
            x = 0,
            y = 0,
            width = 203,
            height = 256,
            sourceX = 60,
            sourceY = 11,
            sourceWidth = 277,
            sourceHeight = 276
        },
        {   -- frame 2
            x = 203,
            y = 0,
            width = 247,
            height = 262,
            sourceX = 16,
            sourceY = 5,
            sourceWidth = 277,
            sourceHeight = 276
        },
    },
    sheetContentWidth = 450,
    sheetContentHeight = 262
}
local sheet = graphics.newImageSheet( "mySheet.png", options )

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

Sprite Animation

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

 

Листы изображения

Основа всех анимированных спрайтов в Corona это изображение листа . Это можно сравнить с листом бумаги , на котором рисовать отдельные кадры для анимированного объекта (ов). В зависимости от структуры, это также может быть известно как спрайты листа, текстуры атласа или карты изображения.Корона использует изображение листа терминологии - и объекты , созданные с помощью graphics.newImageSheet () - потому , что их использование не ограничивается анимированных спрайтов. В самом деле, можно также использовать графические листы (и , как правило , должны) для статических изображений выбрали из части листе изображения. Для получения более подробной информации о графических листах см Image Sheets руководство.

Изображенный ниже представляет собой лист изображение образца для бега кошки, под названием sprites-cat-running.png. Этот лист состоит из восьми «кадров» в специально упорядоченной последовательности. Концептуально, анимация начинается в верхнем левом кадре, переходит к следующему кадру (справа от него ), переносится на следующую строку , когда она достигает конец текущей строки, и , наконец , останавливается (или повторяется) , когда вся последовательность полный.

2048
512

Для того, чтобы настроить это изображение листа в Corona, сначала создать индексированную таблицу с различными свойствами. Следующий пример использует однородные по размеру кадров, хотя спрайты могут также использовать изображение листы с кадрами , упакованных в плотном, оптимизированном расположении (смотрите документацию по graphics.newImageSheet () ).

local sheetOptions =
{
    width = 512,
    height = 256,
    numFrames = 8
}

В этой таблице, widthи heightуказать размеры пикселов каждого отдельного кадра. Поскольку существует 4 кадра по горизонтали и лист изображение 2048пикселей в общей ширине, каждый кадр 512пикселей в ширину. Точно так же, так как есть 2 строки и лист 512пикселей в общей высоты, каждый кадр 256пикселей в высоту.

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

После того, как эта таблица вариантов объявляется, создание листа изображения осуществляется с помощью graphics.newImageSheet () API. Имя файла изображения листа должно быть передано в качестве первого параметра и optionsтаблиц в качестве второго параметра:

local sheet_runningCat = graphics.newImageSheet( "sprites-cat-running.png", sheetOptions )

анимаций

Все анимированные спрайты требуют , по крайней мере один именованной последовательности объявлены либо последовательных кадров или непоследовательных кадров.

ПОСЛЕДОВАТЕЛЬНАЯ FRAMES

Самый основной последовательности последовательных кадров. Это принимает имя последовательности, индекс начального кадра, счетчик кадров, дополнительное время для продолжительности анимации, а также два дополнительных параметры повтора.

-- sequences table
local sequences_runningCat = {
    -- consecutive frames sequence
    {
        name = "normalRun",
        start = 1,
        count = 8,
        time = 800,
        loopCount = 0,
        loopDirection = "forward"
    }
}

nameПараметр является обязательным и может быть использован для установки спрайтов в этой последовательности. Эти startи countпараметры также требуется - так как работает кошка имеет 8 полных кадров, начальный кадр может быть установлен в положение, 1и подсчет с 8. Это говорит последовательность , чтобы начать в первом кадре и анимация последовательно через все кадры до конца.

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

loopCountПараметр определяет , сколько раз последовательность должна цикл (повтор). Установите в любое положительное целое число в цикле последовательности, число раз. В качестве альтернативы, в цикле последовательность на неопределенный срок, установлен loopCountв 0. Если перекручивание установлено, вы можете также включить loopDirectionпараметр. Значение "forward"будет цикл последовательность от начала до конца, в то время как установка "bounce"будет анимировать последовательность от начала до конца, а затем анимировать обратно в исходном кадр в обратном направлении.

НЕПОСЛЕДОВАТЕЛЬНЫЕ FRAMES

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

-- sequences table
local sequences_runningCat = {
    -- non-consecutive frames sequence
    {
        name = "fastRun",
        frames = { 1,3,5,7 },
        time = 400,
        loopCount = 0,
        loopDirection = "forward"
    }
}

НЕСКОЛЬКО ПОСЛЕДОВАТЕЛЬНОСТЕЙ

Таблица последовательности данных может (и часто будет) содержать множественные последовательности. Это позволяет определить все последовательности для спрайта в одном месте, а затем, установить или изменить последовательность для спрайта на основе последовательности nameпараметров.

Чтобы объявить несколько последовательностей, включают в себя только несколько таблиц последовательностей, разделенных запятыми:

-- sequences table
local sequences_runningCat = {
    -- first sequence (consecutive frames)
    {
        name = "normalRun",
        start = 1,
        count = 8,
        time = 800,
        loopCount = 0
    },
    -- next sequence (non-consecutive frames)
    {
        name = "fastRun",
        frames = { 1,3,5,7 },
        time = 400,
        loopCount = 0
    },
}
Заметки
  • Первая последовательность в установке мульти-последовательности считаются по умолчанию. При создании объекта спрайтов, последовательность по умолчанию будет использоваться , если не изменить последовательность явно (см методы управления спрайт раздел ниже).
  • Для установки мульти-последовательности, вы не ограничены использование кадров из листа один изображений - каждая последовательности может, на самом деле, получить доступ к уникальным простыне изображения. Для достижения этой цели , просто добавить sheetпараметр в любой последовательности и установить его значение в любой предварительно объявлена листа изображения . Полный пример, пожалуйста , обратитесь к display.newSprite () .

Sprite объекты

После того, как лист изображений (ы) , и последовательности настроены, новый объект Sprite может быть создан с помощью display.newSprite () API:

display.newSprite( [parent,] imageSheet, sequenceData )

Для этого API, то parentпараметр является необязательным и представляет собой группу , в которой дисплей для вставки спрайтов. imageSheetПараметр определяет лист изображения по умолчанию для спрайтов, и sequenceDataэто таблица , которая содержит все последовательности для спрайта.

В контексте данного руководства, декларация спрайт будет выглядеть следующим образом:

local runningCat = display.newSprite( sheet_runningCat, sequences_runningCat )

Эта строка создаст экранный объект с именем , runningCatкоторый можно перемещать, поворачивать, переход , связанный с физикой тела и т.д. - и потому , что это также объект спрайта , он приобретает все спрайты методов управления и свойства спрайтов , описанные ниже.

Методы управления Sprite

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

  • объект: играть () - запускает анимацию , используя по умолчанию или установить последовательность. Спрайты не автоматически начинают играть , когда вы создаете их, так что вы должны начать их с этой командой.
  • объект: пауза () - Останавливает анимацию. Там нет способа управления «стоп», так что этот метод служит для обеих целей.
  • Объект: setFrame () - Немедленно установить или пропустить к указанному индексу кадра в текущей последовательности. Если вы хотите , чтобы «остановить и сбросить» анимации после того, как он начал играть, использовать паузу () и setFrame () команды последовательно, устанавливая рамку обратно в начало последовательности.
  • объект: setSequence () - Установите спрайт в определенной последовательности. Например, чтобы изменить runningCatспрайтов анимации из normalRunк fastRun(предполагая , что обе последовательности , объявленные в sequences_runningCatтаблице), вызов runningCat:setSequence( "fastRun" ). Тогда звоните , runningCat:play()чтобы начать воспроизведение анимации, так как спрайты не могут автоматически начать воспроизведение после того, как последовательность устанавливается / изменена.

Свойства Sprite

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

  • object.frame - только для чтения целого числа, представляющее представленные в данный момент индекс загруженной последовательности. Это свойство не устанавливает рамки; использовать setFrame () функцию , чтобы явно задать кадр анимации.
  • object.isPlaying - Это свойство , trueесли анимация воспроизводится, falseесли нет.
  • object.numFrames - свойство только для чтения , который представляет количество кадров в текущей последовательности анимации.
  • object.sequence - Свойство только для чтения с указанием названия текущей последовательности анимации.
  • object.timeScale - Получает или задает масштаб (отношение) применяется ко времени анимации, что позволяет регулировать скорость анимации спрайта динамически.

Sprite События

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

Для того, чтобы добавить слушатель событий спрайтов к конкретному спрайтов, использовать стандартный объект: addEventListener () метод с eventNameимуществом "sprite"и ссылкой на функцию слушателя:

object:addEventListener( "sprite", spriteListener )

После того , как приемник событий добавляется, то spriteListenerфункция будет вызвана в определенных фазах во время анимации:

  • began - анимация начала играть.
  • ended - анимация показала свой окончательный кадр.
  • bounce - анимация отскочила от переднего до назад во время воспроизведения.
  • loop - анимация петельной от начала последовательности.
  • next- анимация играла последующий кадр , который не один из вышеперечисленных этапов.

Используя эти фазы, предположим , что вы хотите , runningCatспрайт к петле через 4 циклов normalRunпоследовательности, то изменения в fastRunпоследовательности и петли на неопределенное время . Во- первых, normalRunпоследовательность должна быть изменена путем изменения loopCountв 4. Это позволяет обнаружить endedфазу , когда все 4 петли в комплекте.

local sequences_runningCat = {
    {
        name = "normalRun",
        start = 1,
        count = 8,
        time = 800,
        loopCount = 4
    },
    {
        name = "fastRun",
        frames = { 1,3,5,7 },
        time = 400,
        loopCount = 0
    },
}

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

-- sprite listener function
local function spriteListener( event )
    local thisSprite = event.target  -- "event.target" references the sprite
    if ( event.phase == "ended" ) then
        thisSprite:setSequence( "fastRun" -- switch to "fastRun" sequence
        thisSprite:play()  -- play the new sequence
    end
end
-- add the event listener to the sprite
runningCat:addEventListener( "sprite", spriteListener )

Обратите внимание на то, что спрайт слушатель передает все фазы в функцию слушателя, так это ваша ответственность , чтобы использовать условные положения и выполнить соответствующее действие , когда определенная фаза происходит в последовательности анимации. В приведенном выше примере, только endedобнаружена фаза, которая происходит после 4 полных петель normalRunпоследовательности. Когда эта последовательность заканчивается, fastRunпоследовательность установлена и играл, и потому , что петли на неопределенный срок, без дополнительной endedфазы никогда не будет происходить.

Фигуры - Дорожки, заливки, обводки

Объекты Shape являются объектами отображения, геометрия которого охватывает область , определенную границей.

Создание фигур

Формы могут быть созданы с помощью следующих методов:

объект метод
Прямоугольник display.newRect ()
Прямоугольник с закругленными углами display.newRoundedRect ()
Круг display.newCircle ()
многоугольник display.newPolygon ()
Линия display.newLine ()
меш display.newMesh ()

Форма Дорожки

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

ПРЯМОУГОЛЬНИК

Все прямоугольные объекты имеют RectPath . widthИ heightэтот путь можно манипулировать, и вы можете достичь четырехугольника искажения , манипулируя любой из четырех угловых точек пути.

local rect = display.newRect( 160, 240, 150, 50 )
rect.path.x1 = -50
transition.to( rect.path, { time=2000, height=100, x1=0 } )

ПРЯМОУГОЛЬНИК С ЗАКРУГЛЕННЫМИ УГЛАМИ

Все закругленные прямоугольные объекты имеют RoundedRectPath . Ширина и высота этого пути можно манипулировать, наряду с радиусом углов.

local roundedRect = display.newRoundedRect( 160, 240, 150, 50, 10 )
roundedRect.path.radius = 20
transition.to( roundedRect.path, { time=2000, width=100, height=100, radius=5 } )

КРУГ

Все круг объекты имеют CirclePath , для которых радиус можно манипулировать.

local circle = display.newCircle( 160, 240, 10 )
circle.path.radius = 50
transition.to( circle.path, { time=2000, radius=10 } )

МЕШ

Все сетчатые объекты имеют pathсвойство , которое предоставляет методы для манипулирования сетки. См display.newMesh () документацию для деталей.

Заливки и обводки

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

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

Покрасить Цель
Покрасить Наполните / ход объекта сплошным цветом.
BitmapPaint Наполните / ход объект с изображением.
CompositePaint Используется для мульти-текстуры заполняет / удары.
GradientPaint Используется для линейного градиента заливки / инсульты.
ImageSheetPaint Fill / ход объекта с изображением листа кадром.

Маскирование изображений

В этом руководстве описывается , как использовать graphics.newMask () , чтобы скрыть отдельные объекты отображения или целые группы отображения.

обзор

Маскировка является обычной практикой в цифровом дизайне. Использование черно-белый (или оттенки серого) маску изображения, вы можете показать / скрыть участки на дисплее объекта или отображения группы в соответствии с составом маски. Например, вы можете создать изображение маски с белыми участками и черными участками. При нанесении на целевой объект / группу, черные участки маски будут оказывать основные пикселей полностью прозрачные (это представлено серой шахматной доски в следующих примерах). В отличие от пикселей меньше , чем в белой части изображения маски будет оставаться полностью видимыми.

 +  знак равно

Маска изображение также может быть создано с помощью серых областей или градиентов. В этом случае область 80% серого будет оказывать пиксели базового объекта / группы на 20% непрозрачности. Аналогичным образом, область 10% серого будет оказывать основные пиксели на 90% непрозрачности.

 +  знак равно

Создание маски изображений

Файлы маски изображения можно создать с помощью любой стандартной программы для редактирования изображений , как Photoshop ®, GIMP или Paint.NET . При создании образа, вы должны соблюдать следующие правила , чтобы гарантировать , что маски ведут себя д