Комментарии 10
Так. Такие статьи нужны, несомненно, за это вам спасибо. Но грамотность статьи хромает.
Здесь же нужно отметить, что по дефолту это выключено для того, чтобы пользователь мог возвращаться на стены без их пересоздания — сохраняются все изменения, сделанные пользователем и он может продолжить работу. Как пример большой список с прокруткой и по нажатию на элемент идём на другую сцену, а когда возвращаемся обратно — прокрутка сохраняется.
Или сцена основной игры и сцена меню паузы или сцена инвенторя.
Затем однострочные функции можно помещать прямо в код создания кнопки
Аргумент event в этом случае можно не задавать, так как мы его не используем.
Этого можно не делать. Если eventListener повешан на объект сцены, а не на Runtime, то он сам уберётся при отчистке сцены вместе с объектом background.
Убирать нужно только для Runtime.
Вместо глобальной переменной правильнее использовать параметр сцены при переходе:
Далее params, который также можно объявить и массивом переменных (params = {dish = 'macaroni'}), будет доступен в событиях сцены — event.params (хранит 'macaroni')
Этого лучше не делать, так как ухудшается читаемость кода. Когда нужно создать переменную, тогда её и объявляете. Pascal style не крут. Если же это делается для того, чтобы сделать область видимости переменной более широкой, то я рекомендую вместо этого помещать такие переменные в объект scene через self.
self.tap1 = ui.newButton…
self.background = display.newRect…
self.someVar = 'Доступна во всех CreateScene, EnterScene, DestroyScene и ExitScene'
Ну и последняя ремарка — я предпочитаю загружать storyboard как глобальную переменную в main.lua, чтобы в каждой сцене не надо было писать
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')
+1
Ещё нет необходимости пересоздавать в каждой сцене текст со значением используемой памяти.
Можно воспользоваться моим модулем для этих целей — две строчки в main.lua.
developer.coronalabs.com/code/easy-use-performance-meter-memory-texture-memory-fps
Также у вас используется то display.contentCenterX, то display.contentWidth * 0.5 — это одно и то же, но первое предпочтительнее.
Можно воспользоваться моим модулем для этих целей — две строчки в main.lua.
developer.coronalabs.com/code/easy-use-performance-meter-memory-texture-memory-fps
Также у вас используется то display.contentCenterX, то display.contentWidth * 0.5 — это одно и то же, но первое предпочтительнее.
0
Большое спасибо за полезные замечания! Узнал много нового и полезного из вашего комментария. Собственно, для этого и опубликована статья — чтобы обмениваться информацией между разработчиками Corona на русском языке.
Ответить могу лишь в одном месте:
Ответить могу лишь в одном месте:
storyboard.purgeOnSceneChange = true
Об этом параметре был в курсе, и специально его не использовал в данном примере для демонстрации механизма передачи переменных между сценами, т.к. этот вопрос мне задавали не один раз.0
И вместо устаревшего модуля ui.lua лучше использовать современный встроенный модуль widget
docs.coronalabs.com/api/library/widget/newButton.html
docs.coronalabs.com/api/library/widget/newButton.html
0
Мне кажется, более-менее серьёзные коммерческие проекты на Corona (как и на Cordova, например) делать не стоит. Исходный код проекта практически никак не скрыть.
Для примера я взял первую попавшуюся игрушку написанную на Corona SDK. Исходный код игры как на ладони. Без особых усилий оттуда вырезается реклама, и получается аналогичная платной версия игры.
Хотя для начала знакомства с программированием под Андроид вполне подойдёт.
Для примера я взял первую попавшуюся игрушку написанную на Corona SDK. Исходный код игры как на ладони. Без особых усилий оттуда вырезается реклама, и получается аналогичная платной версия игры.
Хотя для начала знакомства с программированием под Андроид вполне подойдёт.
0
Может, оффтоп, но буду очень признателен за ответ: Корона можно собрать приложение для Мака под Виндой? Вроде бы, компиляция в Короне происходит на стороне сервера?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Corona SDK — для начинающих. Работа с несколькими сценами при помощи Storyboard API