Pull to refresh

Comments 10

Так. Такие статьи нужны, несомненно, за это вам спасибо. Но грамотность статьи хромает.
storyboard.prevScene = 1
— велосипед, в Corona давно есть параметр в storyboard для автоматического удаления сцен из памяти.
storyboard.purgeOnSceneChange = true

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

Затем однострочные функции можно помещать прямо в код создания кнопки
tap1 = ui.newButton{
      default = "img/tap1.png",
      over = "img/tap1_over.png",
      onRelease = function ()
          storyboard.gotoScene( true, "scene1", "fromRight", 800  )
      end,
  }

Аргумент event в этом случае можно не задавать, так как мы его не используем.

Ну и, разумеется, не забудем убрать eventListener, при выходе из сцены в разделе exitScene()

Этого можно не делать. Если eventListener повешан на объект сцены, а не на Runtime, то он сам уберётся при отчистке сцены вместе с объектом background.
Убирать нужно только для Runtime.

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

Вместо глобальной переменной правильнее использовать параметр сцены при переходе:
storyboard.gotoScene('scenename', {effect = 'fade', time = 800, params = 'macaroni'})

Далее params, который также можно объявить и массивом переменных (params = {dish = 'macaroni'}), будет доступен в событиях сцены — event.params (хранит 'macaroni')

Во-первых, перед тем, как добавлять свой код в четыре стандартных события (createScene, enterScene, exitScene, destroyScene) следует объявить используемые нами переменные.

Этого лучше не делать, так как ухудшается читаемость кода. Когда нужно создать переменную, тогда её и объявляете. Pascal style не крут. Если же это делается для того, чтобы сделать область видимости переменной более широкой, то я рекомендую вместо этого помещать такие переменные в объект scene через self.
self.tap1 = ui.newButton…
self.background = display.newRect…
self.someVar = 'Доступна во всех CreateScene, EnterScene, DestroyScene и ExitScene'

Ну и последняя ремарка — я предпочитаю загружать storyboard как глобальную переменную в main.lua, чтобы в каждой сцене не надо было писать
local storyboard = require('storyboard')
Ещё нет необходимости пересоздавать в каждой сцене текст со значением используемой памяти.
Можно воспользоваться моим модулем для этих целей — две строчки в main.lua.
developer.coronalabs.com/code/easy-use-performance-meter-memory-texture-memory-fps

Также у вас используется то display.contentCenterX, то display.contentWidth * 0.5 — это одно и то же, но первое предпочтительнее.
И то, и другое без каких-либо изменений позаимствовано из официального примера Ansca, думал, что у них налучший возможный вариант мониторинга памяти.
Благодарю за ссылку, обязательно посмотрю ваш модуль.
Большое спасибо за полезные замечания! Узнал много нового и полезного из вашего комментария. Собственно, для этого и опубликована статья — чтобы обмениваться информацией между разработчиками Corona на русском языке.
Ответить могу лишь в одном месте:
storyboard.purgeOnSceneChange = true
Об этом параметре был в курсе, и специально его не использовал в данном примере для демонстрации механизма передачи переменных между сценами, т.к. этот вопрос мне задавали не один раз.
Мне кажется, более-менее серьёзные коммерческие проекты на Corona (как и на Cordova, например) делать не стоит. Исходный код проекта практически никак не скрыть.
Для примера я взял первую попавшуюся игрушку написанную на Corona SDK. Исходный код игры как на ладони. Без особых усилий оттуда вырезается реклама, и получается аналогичная платной версия игры.
Хотя для начала знакомства с программированием под Андроид вполне подойдёт.
Тут только хотя бы bytecode. На Java не лучше ведь, нет?
Может, оффтоп, но буду очень признателен за ответ: Корона можно собрать приложение для Мака под Виндой? Вроде бы, компиляция в Короне происходит на стороне сервера?
Нет, такая возможность отсутствует. Наверно, технически, этому ничего не мешает, но если сборка iOS под win будет возможной, то Apple потеряет много денег.
Да, это запрещено Apple.
Sign up to leave a comment.

Articles