Q: Можно ли создавать мультиэкранные приложения?
A: Да, но автор рекомендует не использовать несколько элементов Screen и функцию OpenAnotherScreen, ввиду непредсказуемых последствий, как то нажатие стандартной кнопки Android «назад». Вместо этого автор рекомендует использовать несколько невидимых объектов типа canvas, vertical/horizontal arr. etc., и переключаться между ними.
Q: Где мне найти толковую справку по AppInventor на русском языке.
A: Нигде. Автор использовал доступные tutorial на английском, а также исчерпывающую справку самого AI.
http://beta.appinventor.mit.edu/learn/reference/Если вы не знаете английского, переведите при помощи google translate. Хотя если вы таки не знаете английского, скорее всего у вас возникнут трудности при использовании AI.
Q: Как мне создать анимацию в AI?
A: Менять картинки в цикле. Например
Code: Select all
IF I not=10
ImageSprite1.picture = join (kartinka) join (I) join (.png)
I = I + 1
ELSE
I = 1
Здесь картинка спрайта ImageSprite1 циклически меняется от kartinka1.png до kartinka9.png.
Если этот блок вставить в таймер, то можно включать и выключать анимацию спрайта.
Анимацию движения можно активировать встроенными функциями AI.
У компоненты Image.Sprite можно задать направление движения (heading), скорость движения (speed), интервал движения (interval). А также свойство rotate. Если rotate=true, спрайт поворачивается в сторону heading. В последней версии AI исправлен баг с масштабированием при повороте спрайта.
Q: Можно ли на AppInventor сделать живые обои?
A: Нет.
Q:Как мне сделать приложение совместимым со всеми размерами экрана?
A: Делайте «резиновую» разметку. Все размеры объектов на экране задавайте в процентах от ширины экрана или от его высоты.
Q: Я сделал как Вы сказали с процентами, но когда я держу устройство горизонтально, все растягивается и перемещается. Что за фигня?
A: Все правильно. Вы например указали что ширина вашей кнопки 30 % от screen1.width.
Когда вы держите устройство вертикально, то ширина это верхняя сторона экрана, которая короче боковых сторон (длины). Когда вы повернули устройство, то шириной становится боковая сторона, которая раньше была длиной. Чтобы этого избежать я использую проверку следующего типа:
Code: Select all
IF SCREEN1.WIDTH > SCREEN1.HEIGHT
SW = SCREEN1.HEIGHT
SH = SCREEN1.WIDTH
ELSE
SW = SCREEN1.WIDTH
SH = SCREEN1.HEIGHT
Таким образом, без использования каких либо датчиков ориентации, я получил себе две переменные, которые использую в дальнейшем для разметки. Приведенный пример работает только для портретной ориентации экрана. Для альбомной измените знак в сравнении.
Q: Ошибки при указании ширины картинки или координаты в процентах.
A: Координата, ширина, длина, и прочие значения должны быть целыми. Используйте оператор ceiling.
Например:
Code: Select all
Banner.height=ceiling (screen.height*(.90))
Q: Я не собираюсь писать секундомер, зачем мне нужны таймеры и часы?
A: Компонента Clock.Timer это не совсем часы. Это обработчик событий. Чаще всего вы заставляете программу что либо делать тогда, когда происходит какое-либо действие пользователя. Нажатие кнопки или перетаскивание объекта по экрану. Но что делать, если нет возможности использовать кнопку или процедура выполняется слишком быстро?
Используйте таймер. Например, когда количество набранных очков в вашей игре достигло определенного уровня, вы хотите чтобы игроку показали анимацию.
Code: Select all
When.Score.TimerEnable // Таймер активен по умолчанию
If Score>500 Then Prize.TimerEnableTo (true) // По умолчанию таймер disable, когда пользователь набрал 500 очков включаем таймер Prize//
When Prize.TimerEnable //Показываем призовую анимацию, удобно задавать скорость анимации через Prize.TimerInterval//
Prize.TimerEnableTo (false)
Таймеры очень удобны для создания анимации с разными скоростями.
Q: Мое приложение работает правильно, но при загрузке видно как графические компоненты расставляются по местам и меняют размеры. Как скрыть все это?
A: Создайте пошаговый загрузчик.
Самый простой способ создания загрузчика:
1). Создаем таймер Load с интервалом 500 или 1000 в зависимости от количества контента. Делаем его disable по умолчанию.
2). В WhenScreenInitialize вставляем Load.TimerEnableTo (true)
3). В WhenLoadTimerEnable создаем цикл. LoadStep – счетчик.
Code: Select all
IF LoadStep = 1 then
Loader.Picture=load1.png // Заглушка на экран, Loader это imageSprite во весь canvas с кординатой Z больше чем у всех остальных элементов..//
//Тут мы меняем размеры всех картинок.
ImSprite1.Width=ceiling(SW*.30)
…
ImSprite99.Width=ceiling(SW*.19)
LoadStep=LoadStep+1 //увеличиваем счетчик
…
IF LoadStep=2 then
Loader.Picture=load2.png
//Тут мы перемещаем все элементы на места.
ImSprite1.MoveXY (координатаХ,координатаУ)
….
LoadStep=LoadStep+1
IF LoadStep = N (Количество шагов загрузчика, выбирайте сами по мере необходимости.)
Loader.VisibleTo(false) //Убираем заглушку, все картинки на местах, и нужного размера.
Далее запускаем нужные таймеры, приложение запущено.
Q: Как быстро создать лист?
A: Используйте функцию List from csv Row. Создайте переменную и присвойте ей значение этой функции.
MyList=ListFromCSVRow(Элементы,листа,через,запятую)
Q: Как мне использовать генератор случайных чисел?
A: I = RandomInteger From (A) To (B)
I – целочисленная переменная, которой присваивается случайное значение между А и В.
Случайный элемент листа:
I = PickRandomItem (Имя листа).
Q: Я устал каждый раз писать проверку соотношения сторон, создавать загрузчик и т.д
A: Создайте себе шаблон. Удалите все ненужное из готовой программы и оставьте только то, что точно будете использовать во всех своих приложениях.
Q:Как поменять иконку приложения?
A: Откройте готовый apk при помощи архиватора 7zip. Внимание! Не распакуйте, а имено откройте. Подготовте свою иконку. Файл в формате png с размерами 48 на 48 пикселей.
Переименуйте Вашу иконку в ya.png и замените через 7zip в картинку в папке /res/drawable/ya.png. После этого обработайте приложение при помощи AppToMarket.
Q: Размер моего приложения превысил 5 Мб. AppInventor не может его упаковать.
A: Полученые при помощи AI приложения имеют большой размер, потому что по умолчанию включают в себя много лишнего. Удалить ненужные функции у вас не получится. Чтобы скачать приложение с превышением максимального размера, вам нужно создать пустые (прозрачные) png файлы (!!!) с такими же именами и размерами, что используются в вашем приложении. Не меняйте размеры и имена! Создайте копию готового проекта в AI. Удалите большие картинки и звуки из вашего приложения и замените их пустышками. Загрузите apk на компьютер, откройте с помощью 7zip и замените пустышки нужными картинками в папке assets. После этого обработайте приложение при помощи AppToMarket.
Q: Как мне максимально уменьшить размер моего приложения?
A: Для начала оптимизируйте код. Если вы используете несколько раз подобные куски кода, возможно, имеет смысл создать отдельную процедуру.
Используйте Advanced Components.
Оптимизируйте графику. Используйте графику в формате png. Уменьшайте палитру png, некоторым элементам дизайна не требуется больше 2-х цветов. Используйте прозрачный фон. Начиная с релиза Version 127, July 24, 2012 появилась возможность вращать маштабированные спрайты, не используйте разные картинки для анимации поворота.
Не делайте background экрана или canvas большого размера. Большинство устройств до сих пор на поддерживают HD, а если поддерживают на 4-х дюймах разницы никто не заметит. Уменьшайте DPI картинок. Для кнопок и других маленьких элементов вполне достаточно 12 – 36 dpi. Используйте сжатые звук и видео. Для фоновой музыки достаточно ogg c 64кб/сек.