Простий в написання гри на андроїд. Створення гри під андроїд від а до я

Головна / Корисна інформація

Розробка мобільних додатків- Це один з найбільш прибуткових сегментів в комп'ютерній індустрії. Створення програми обходиться у кілька сотень чи тисяч доларів, але прибуток може сягати мільйонів. У зв'язку з цим, багато хто цікавиться, як створити гру на телефон або планшет Андроїд. Це вам цілком під силу (при належних знаннях та прагненні). Вам достатньо розробити концепцію, вивчити мову програмування, встановити середовище розробки, а потім приступити до створення.

Розробка ідеї

Насамперед, необхідно з'ясувати, що ви збираєтеся створювати. Якщо це якийсь додаток, слід визначитися з аудиторією, які можливості воно надаватиме користувачеві. Це може бути інформаційний додаток або програма, яка надає такі додаткові функції, як відео або аудіоплеєр.

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

Корисним кроком буде вивчення потенційних конкурентів. Перегляньте магазин додатків Google Play, знайдіть схожі ігри. Намагайтеся зрозуміти, чому ця гра користується такою популярністю, а що в ній можна покращити. На основі цих спостережень ви можете створити власний проект. Але в жодному разі не копіюйте елементи інтерфейсу або будь-що інше. Оригінальність та унікальність відіграють важливу роль, при цьому впливають на перше враження користувача.

Створення об'єктної моделі та специфікації

Перед тим як розпочати програмування, слід вирішити певний список завдань. До нього входять:

  • Об'єктна модель.
  • Функціональні специфікації.
  • Інтерфейс та контент.

Об'єктна модель є докладний опискожного об'єкта у грі. Це може бути безпосередньо сам гравець, якісь предмети (зброя, броня тощо), унікальні властивості, об'єкти навколишнього світу.

До функціональних специфікацій відноситься все те, що описує, як працюватиме гра. Це можливі дії гравця і неграбальних персонажів (NPC), яка шкода завдає зброї або як витрачена броня. Розробнику необхідно опрацювати функції кожного об'єкта у грі, це стосується і всіляких витратних матеріалів(аптечок, патронів).

Інтерфейс – вкрай важлива складова, оскільки саме з ним відбуватиметься контакт користувача. Необхідно розробити, які вікна будуть у грі (вікно завантаження, меню, налаштувань, ігри), а також передбачити схеми переходу від одного вікна безпосередньо до іншого.

До інтерфейсу відноситься і розташування кнопок. Сенсорні екранителефонів, як правило, мають діагональ до 5 дюймів, тому важливо компактно, але в той же час зручно розмістити всі кнопки, що управляють.


Контент є текстовою начинкою гри. Це пункти меню, текст налаштувань, діалоги персонажів, опис будь-яких предметів та багато іншого. Все залежить від фантазії розробника. Ви можете створити цікаву гру, де буде мінімум текстового контенту.

Тут перед вами стоїть два шляхи: починати розробку повністю з нуля, використовуючи чисте програмування або скористатися спеціальним конструктором. Він дозволяє використовувати готові елементи, при цьому має простий інтерфейс, завдяки чому навіть без просунутих навичок програмування ви можете створити гру.

Якщо ви вибрали перший, перед створенням гри для Андроїд вам необхідно встановити драйвери для смартфона на ваш комп'ютер, після чого встановити середовище розробки. Для створення програм під операційну систему Android використовується Android Studio. Це середовище розробки зроблено компанією Google, при цьому надає широкі можливості створення додатків та ігор на будь-який смак.


Програмування відбувається на мовою Java. Це одна з найпопулярніших мов. Без початкового рівня ви не зможете працювати в Андроїд Студії. Він суворо типізований, причому у освоєнні набагато легше C чи C++. Слід знайти наскільки книг Java, а потім поступово вивчати всі особливості цієї мови програмування. Паралельно обов'язково виконуйте різні практичні завдання, щоб закріпити теорію. Це важкий шлях, але він пропонує максимальні можливості реалізації свого проекту. З Андроїд-студією можна також створити онлайн-ігри.


Якщо ви не сильні у програмуванні, спробуйте скористатися конструктором програм. Розробка ігор з допомогою конструктора зводиться до створення рівнів, персонажів та інших елементів з допомогою спеціального редактора. Багато конструкторів ґрунтуються на принципі WYSIWYG – «що бачиш, те й отримуєш». Користувач може розробити рівні, персонажів та інші елементи, виставляючи їх у спеціальному редакторіта змінюючи налаштування/властивості. Це набагато простіше, ніж з нуля програмувати гру.

Однак, можливості гри будуть обмежені функціоналом самого конструктора, тому слід ґрунтовно підійти до вибору. У мережі Інтернет представлено кілька варіантів платних та безкоштовних конструкторів.

Перші рядки за популярністю займає Construct 2. Є безкоштовна початкова версія, в якій є широкий функціонал створення гри будь-якого жанру. Програма дозволяє розробити гру не лише під операційну систему Android, але і для iOS, і навіть для браузера (використовується HTML5). Програму легко освоять навіть новачки. Якщо функціонала вам недостатньо, можете придбати повну версіюза 129 доларів.


Одним із вкрай популярних є конструктор Clickteam Fusion. Він відрізняється простим інтерфейсом, можливістю безкоштовно створювати браузерні програми, різні онлайн-ігри, підтримує апаратне прискоренняпрацює з різними платформами (у тому числі з Андроїд).

Програма має візуально застарілий інтерфейс, який налічує лише 8 вікон. Але за рахунок цього підвищується зручність використання. У цій програмі можна створити практично будь-яку 2d гру: головоломки, карточні ігри, квести та інше. Купити повну версію ви можете лише за 100 доларів.


Найпростішим в освоєнні є конструктор Game Maker. З його допомогою можна створити проект під iOS, Android, Mac, XBox та навіть PS3. Спочатку програма розроблялася як навчальна програма для дітей, тому з освоєнням у вас не повинно виникнути проблем. Як туторіал є процес створення гри Pacman.

Ще однією незаперечною перевагою Game Maker є можливість модифікації стандартних функцій. Ви можете копатися в коді, а також самостійно прописувати кожну з дій. GML (GameMaker Language) має безліч потужних методів, а також зрозумілий синтаксис. На жаль, конструктор має пару недоліків, зокрема складність налагодження, а також нестабільну поведінку програми на різних платформах.

Багато людей, завантажуючи ігри для мобільних платформ, замислюються: "А чому б не втілити мрію в реальність? Чому б не зробити свій продукт, який буде кращим і цікавішим за те, що вже пропонує індустрія інтерактивних розваг?" Якщо ви не знаєте, як створювати ігри на "Андроїд", але хочете навчитися, ця стаття розповість про деякі підводні камені, які чекають девелоперів-початківців.

Ідея

Перше, що потрібне для створення гри – ідея. На першому етапі її можна записати у будь-якому вигляді. Бажано, щоб вона "чіпляла" і була зрозумілою. Найімовірніше, у процесі здійснення її буде змінено. Щось доведеться додати, а щось – повністю прибрати чи переробити. У цьому немає нічого дивного – при подальшому опрацюванні деталей функціонал не лише доведеться досконально описати, а й перевірити його на придатність.

Не варто повністю відмовлятися від первинного опису ідеї та починати створювати російські ігри на "Андроїд", пропустивши цю стадію. Збір думок - головна точка старту, з якої найлегше починати рух. До того ж ідеї, викладені на папері, дозволять поглянути на задумане об'єктивніше, можливо заздалегідь відзначити та виправити слабкі місця.

Список особливостей

Так як створювати ігри на "Андроїд" неможливо без їх детального опрацювання, на даному етапі доведеться продовжити роботу і описати особливості, які будуть у грі. Наведемо приклад: серія God of War – це слешер. Зброя головного героя – батіг. Під час бою можна робити довгі гарні комбо-атаки. Кожен рівень завершується сутичкою з босом.

Цей список досить скупий і відображає лише головні особливості, тобто ті, що виділяють гру на тлі інших. Насправді, їх набагато більше, але інші особливості вторинні. При описі першими повинні йти ті, без яких ваше майбутнє творіння не зможе існувати, а останніми - менш важливі, якими можна пожертвувати для швидкості розробки.

Діздок

Тому що створити нову грубез цього документа майже неможливо, доведеться попрацювати над ним. Диздок - скорочення від "дизайн-документ", він включає максимально детальні описи:

  • Об'єктної моделі та функціональності сутностей.
  • Функціональні специфікації.
  • Контент гри.
  • Інтерфейс.
  • За потребою може бути додано базу знань.
  • Об'єктна модель.

Об'єктна модель

Об'єктна модель містить інформацію про кожній ігровій сутності: зброя, броня, NPC, заклинання, гравець. Вона є унікальною для кожної гри.

Під функціональністю слід розуміти:

  • Чи можна надіти\зняти\купити\продати\покращити.
  • Чи залишиться у інвентарі після смерті.
  • Чи втратить міцність з часом або за будь-якої дії.
  • Чи підвищує характеристики персонажа чи групи.
  • Чи має набір особливих якостей.

Описані вище пункти не обов'язкові, їх можна скоротити чи збільшити кожної окремої групи сутностей.

Функціональні специфікації

Продовжуючи відповідь на питання про те, як створювати ігри для "Андроїд", слід розповісти про наступний розділ диздока. Функціональні специфікації описують поштучно геймплей. Тут потрібно максимально точно розповісти, що вміє робити головний герой та як це реалізується. Те саме потрібно зробити і для кожного NPC окремо. Крім ігрових персонажів, слід торкнутися аптечок, зброї, броні, елементів оточення.

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

Контент

Перш ніж створити гарну грунеобхідно продумати і те, що саме буде в ній. Описуючи специфікації, можна вказати, що персонажі стрілятимуть з вогнепальної зброї, в яку заряджені набої з жорстко фіксованою шкодою. При попаданні в NPC з цього параметра відніматиметься потужність броні. Також потрібно буде вказати назву кожного окремого зразка зброї, броні, NPC. І, звичайно, необхідно описати Контент – це цеглинки, з яких згодом буде побудовано всю гру.

Інтерфейс

Інтерфейс - це набір функцій та кнопок, за допомогою яких користувач буде взаємодіяти з програмою. Головне, що слід враховувати при його створенні – зручність. Щоб зрозуміти, як саме організувати всі елементи, можна запустити та проаналізувати найкращі зразки жанру, перенісши найбільш відповідні рішення до свого проекту.

Вибір двигуна або конструктора

Ще один крок, який доведеться виконати до того, як створювати ігри на "Андроїд" - вибрати Давно минули ті часи, коли все необхідно було робити з нуля. Сьогодні, взявши готового конструктора, можна виконати всі роботи, написавши мінімум коду.

Вибір двигуна варто робити, ґрунтуючись на деяких його особливостях:

  • Умови використання.
  • Можливості.
  • Ціна.
  • Підтримка розробниками.
  • Задокументованість.
  • Розмір ком'юніті.
  • Простота.
  • Розширюваність.

Умови використання: можливо, один раз купивши конструктор, ви не станете його повноправним власником Буває, що при комерційному успіху гри доводиться виплачувати відсоток від прибутків розробникам двигуна. Головне - перед тим як створювати ігри на "Андроїд", ознайомтеся з продуктом, вибраним для реалізації.

Можливості: вони повинні повністю перекривати потреби розробника. Якщо продукт пропонує більше, ніж потрібно, гру можна буде легко розширити, задіяти нові функції диздока. Але подумайте і про баланс! Використовувати Unreal Engine для тетрісу - безглуздо.

Підтримка: насамперед, важливо з'ясувати, чи має продукт розвиток? Чи виправляються помилки від версії до версії? Чи обростає він новим функціоналом та інструментарієм? Двигун, який швидко розвивається, має перевагу перед двигуном, замороженим кілька років тому.

Ком'юніті: Яка кількість тих, хто використовує конструктор? Якщо користувачі мають велику кількість, знайти документацію, уроки, майстер-класи, приклади не є проблемою. Якщо користувачів порівняно мало, ця інформація може бути доступна не в тому обсязі, який дозволить вам зробити щось конкурентоспроможне.

Розширюваність: перед тим, як створити власну гру, спробуйте з'ясувати, чи можна підключити до вибраного двигуна сторонні модулі. Зазвичай вони використовуються для експорту чи імпорту тривимірних моделей, звуків, скриптів, спрайтів. Якщо підтримка таких інструментів є, конструктор не обмежується лише внутрішніми утилітами для створення контенту.

UDK

Unreal Development Kit - не найпростіший в освоєнні ігровий двигун, зате один з найпотужніших. Його використовують не тільки розробники-початківці, а й великі корпорації. Якщо ви шукаєте відповідь на запитання: "Як створити 3Д гру і який двигун для цього вибрати?" - Вам варто вивчити можливості UDK.


Для опису програмної логіки використовується внутрішня мова скриптингу – UnrealScript. Сайт розробників надає безліч уроків як знятих на відео, так і описаних у текстовому варіанті. При цьому вони охоплюють максимальний функціонал – від редактора до написання своїх скриптів.

Torque 2D/3D

Torque - один із найпопулярніших конструкторів ігор для мобільних платформ. Має весь необхідний набор редакторів і засобів налагодження. При розробці програмісти приділили велику увагу зручності та намагалися зробити всі утиліти найбільш простими та доступними.

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

Для написання скриптів у Torque вбудовано мову Torque Script. Властивості кожного об'єкта можна визначити заздалегідь. Також у конструктор вбудований набір Box2D, що займається фізичними розрахунками.


Якщо ви намагаєтеся знайти відповідь на запитання: "Як створити і який двигун для цього вибрати?" - можна сміливо заявити, що Torque дозволить зробити мультиплеєрний проект у стислий термін. Весь необхідний функціонал вбудований заздалегідь, а приклади на офіційному сайті покажуть, як його використовувати найбільш раціонально.

Вивчення

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

Найкраще навчатись на практиці, тобто в процесі роботи над своїм проектом. Інший спосіб вивчення всього необхідного – робота в компанії, яка займається розробкою ігор. При цьому не варто мітити відразу на посаду головного програміста: навіть якщо вам буде запропоновано займатися справами, не відмовляйтеся від можливості подивитися на геймдев зсередини.

Робота у будь-якій компанії починається знизу, це нормально. Та й навички скриптера, левелів-дизайнера, балансувальника, тестера будуть дуже корисні, а це саме ті галузі, в яких працює більшість юніорів. Через кілька років подібних занять можна буде навчитися створювати диздоки та технічні завдання, дізнатися про багтрекерів та сформувати базу контактів. Після виконаної роботи, для того щоб створити російські ігри на "Андроїд", потрібно витратити набагато менше сил, тому що ви запасетеся всіма потрібними навичками та вміннями.

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

У цьому матеріалі ми розглянемо інструментарії, які ви можете використовувати для розробки ігор на Андроїд, а також висвітлимо кілька фреймворків і постараємося вас з вашою ідеєю направити на вірний шлях.

Чесно кажучи, дана стаття не буде якимось гайдом або настановою, швидше за все з цієї статті ви зрозумієте, що гуглити для того, щоб зробити гру, що ви задумали і все. Давайте почнемо.

Чим робити ігри для Android?

1. Unity

Почнемо ми мабуть з найкращого та універсального двигуна для ігор, який є на сьогоднішній день і на якому вже вийшло дуже багато придатних ігор не тільки на мобільних платформах (Android та IOS), але й у соціальних мережахта на комп'ютери.

Unity (Юніті) вам підійде незалежно від того, який складності проект ви задумали зробити. Це двигун свого роду алігатор на ринку універсальних двигунів. Двигун постійно оновлюється та доповнюється новими вражаючими можливостями. Юніті має гарну 2D і 3D складову, причому з версії 4 він має повноцінну підтримку 2D і працює з фізичним двигуном

Як вже не одноразово говорилося Unity це універсальний двигун - під словом універсальний мається на увазі не просто широкий спектр його застосування, але і можливість скомпілювати створену гру відразу для декількох платформ, що, безсумнівно, дуже хороша підмога серед інших двигунів.

Цей урок розпочинає серію статей, присвячених написанню аркадних ігор для Android. За основу було взято цикл, який написав та опублікував у своєму блозі Tamas Jano. Матеріал орієнтований, перш за все, на програмістів-початківців, які хочуть спробувати свої сили у створенні ігор для Android. Я ставлю собі за мету створити у нас на сайті максимально зрозумілий і доступний підручник для молодої російськомовної аудиторії, тому дуже сподіваюся на вашу критику, питання та коментарі. Опублікований у цьому циклі матеріал постійно перероблятиметься з урахуванням ваших питань, побажань та зауважень. Сподіваюся, разом ми зможемо успішно здійснити цей невеликий експеримент.

Олександр Льодков

Ідея та архітектура

Перш ніж переходити безпосередньо до програмування, давайте визначимося з нашими завданнями та опишемо загалом нашу майбутню гру. Ідея проста: головний герой бореться із ордами роботів, які хочуть його знищити. У нього є три життя та лазерна рушниця. Роботи не вміють стріляти. Все що вони можуть - спіймати нашого героя і відірвати йому голову... ну чи ще щось. Управління персонажем здійснюється за допомогою двох "сенсорних джойстиків" Ви напевно зустрічали їх у подібних іграх. У лівому нижньому кутку буде розміщений джойстик, який відповідає за переміщення героя. У правому нижньому кутку – за зброю.


Змоделюємо ігрову ситуацію. Наш персонаж знаходиться у центрі екрану. Роботи кожну 1/10 секунд наближаються до нього. кожну десяту секунду ми перевіряємо також чи не відбулося торкання екрана. Якщо сталося – рухаємо наш персонаж у необхідному напрямку чи робимо постріл. якщо постріл зроблено, кожен тик (1/10 секунд) ми перевіряємо зіткнення кулі з ворогами. Якщо куля потрапила в робота – то і робот і куля вибухають, якщо ні – роботи та куля переміщуються на нові позиції (робот переміщається на 5 пікселів за тик, а куля – на 50 пікселів). Ми також перевіряємо, чи не зловив робот нашого героя. Якщо спіймав – гра закінчується.

У найпростішому випадку архітектура гри може бути представлена ​​у вигляді наступних модулів, що викликаються циклічно:

  1. Модуль керування. Тут зчитуються координати торкання екрана.
  2. Ігровий двигун. Тут ми маємо оновити стан ігрових об'єктів, тобто обчислити їх нові координати, перевірити здоров'я, зіткнення тощо.
  3. Аудіо модуль.
  4. Графічний модуль. Тут на підставі поточного стану формується та виводиться на екран новий кадр.

Давайте детальніше розглянемо наші модулі.

Модуль керування

У нашій грі повідомлення генеруються при торканні користувачем двох областей на екрані. Програма відстежує події наTouch і записує координати кожного дотику. Якщо координати знаходяться всередині області, що управляє, ми посилаємо відповідну команду ігровому движку. Наприклад, якщо відбулося торкання збоку кола, ми маємо рухати нашого персонажа у відповідний бік. Якщо стався дотик кола, керуючого зброєю, ми посилаємо команду двигуну обробити подію пострілу.

Ігровий двигун

Модуль ігрової логіки відповідає за зміну станів всіх ігрових персонажів, під якими я розумію кожен об'єкт, що має стан (Наш герой, роботи, лазерні постріли).

Давайте розглянемо взаємодію модуля управління та ігрового двигуна. На наведеному вище малюнку показано коло-контролер. Світла зелена пляма символізує область торкання. Модуль управління повідомляє ігровому движку координати торкання (dx та dy – відстані в пікселях від центру кола). З цих координат ігровий движок обчислює напрям і швидкість руху нашого героя. Наприклад, якщо dx>0, наш персонаж рухається вправо, якщо dy>0 - угору.

Аудіо модуль

Цей модуль керує відтворенням звуку в залежності від ігрової ситуації. Звуки можуть генерувати різні ігрові об'єкти, але оскільки кількість звукових каналів обмежена (кількість звукових каналів відповідає числу звукових файлів, які можуть бути програні одночасно), аудіо модуль повинен вирішувати, які звуки програвати, а які ні. Наприклад, робот становить величезну небезпеку для нашого героя, тому ми повинні привернути увагу гравця до його появи, наприклад, включити звук сирени, і звичайно, ми просто зобов'язані озвучувати всі постріли нашого персонажа.

Графічний модуль

Цей модуль відповідає за виведення ігрової ситуації на екран телефону. У Android існує кілька способів формування зображення на екрані. Можна малювати прямо на canvas, отриманий від View або використовувати окремий графічний буффер і ви, а потім передавати його View, а можна скористатися можливостями бібліотеки OpenGL. Корисно при розробці гри постійно вимірювати FPS - число кадрів за секунду, які видає ваш графічний двигун. Величина 30 FPS означає, що за одну секунду наша програма встигає 30 разів оновити екран. Забігаючи наперед скажу, що для мобільного пристрою 30 FPS є більш ніж гідний показник.

Створюємо проект-заготівлю для майбутньої Android гри

Я не буду тут детально розписувати процес установки Android SDK та Eclipse, за рамками оповідання я залишу і елементарні дії щодо створення Android проекту. В інтернеті валяється величезна кількість уроків та статей, присвячених цій темі.

Створіть новий проект. У полі Project Name введіть Droidz. Як цільову платформу виберіть Android 2.2 або вище. У Package Name - " ru.mobilab.gamesampleНе забудьте поставити галочку біля Create Activity. Як ім'я головної activity введіть DroidzActivity.

Відкрийте файл src/ua.mobilab.gamesample/DroidzActivity.java

import android.app.Activity;
import android.os.Bundle;

public class DroidzActivity extends Activity (
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) (
super.onCreate(savedInstanceState);
}
}

Метод створення створюється при створенні діяльності під час запуску програми. Цей метод можна розглядати як точу входу в програму. Клас R.java автоматично генерується Eclipse і містить посилання на ресурси. Щоразу, коли ви змінюєте ресурси в Eclipse клас R перезбирається.

Головний ігровий цикл

У будь-якій грі повинен бути цикл, який фіксуватиме команди користувача, обробляти їх, змінювати відповідно до стану ігрових об'єктів, виводити новий кадр на екран і програвати звуковий супровід. Ми вже створили найпростіший проект для Android. Давайте тепер створимо реалізацію ігрового циклу.

Як ви пам'ятаєте, Android все відбувається всередині Activity. Activity створює View - об'єкт, де відбувається все найцікавіше. Саме через нього ми можемо отримати інформацію про торкання екрану, тут можна вивести картинку на екран.

Давайте відкриємо файл DroidzActivity.java. У конструкторі класу ви побачите рядок

SetContentView(R.layout.main);

цей рядок вибирає поточний об'єкт View для Activity. Давайте створимо новий об'єкт для перегляду. Найбільш простим способомотримання View – створити власний клас на підставі SurfaceView. У нашому класі ми реалізуємо інтерфейс SurfaceHolder.Callback, щоб прискорити доступ до змін поверхні, наприклад, коли вона знищується при зміні орієнтації пристрою.

MainGamePanel.java

package uk.mobilab.gamesample;






SurfaceHolder.Callback (


super(context);
// Додаємо цей клас, як містить функцію зворотного
// виклику для взаємодії з подіями
// робимо GamePanel focusable, щоб вона могла обробляти повідомлення
setFocusable(true);
}

@Override
}

@Override
}

@Override
}

@Override

}

@Override
}
}

У наведеному вище лістингу показаний шаблон класу, які ми маємо реалізувати. Давайте уважніше подивимося на зміст конструктора. Рядок

GetHolder().addCallback(this);

Встановлює поточний клас (MainGamePanel) як обробник подій від поверхні.

SetFocusable(true);

Цей рядок робить наш клас фокусованим. Це означає, що він може отримувати фокус, а отже, і події.

Давайте створимо потік, всередині якого і буде реалізований наш ігровий цикл. Поділ гри на кілька паралельних потоків - загальноприйнята в сучасному геймдеві практика. Створимо для нашого потоку клас MainThread.java

Package uk.mobilab.gamesample;

public class MainThread extends Thread (

//прапор, який свідчить про те, що гра запущена.

Private boolean running;
public void setRunning(boolean running) (
this.running = running;
}

@Override
public void run() (
while (running) (
// Оновити стан ігрових об'єктів
// Вивести графіку на екран
}
}
}

Як бачите, цей клас суттєво простіше попереднього. Усередині ми перевизначили метод run(). Потік виконується до тих пір, поки виконується цей метод, тому ми організували всередині нього нескінченний цикл. Ми додали логічну змінну running, яка є індикатором виходу з циклу. Тепер, щоб завершити потік, потрібно просто десь змінити значення цієї змінної на false.

Після того, як ми створили клас потоку, його потрібно запустити. Давайте запускати його під час завантаження екрана. Змінимо клас MainGamePanel

Package uk.mobilab.gamesample;

import android.content.Context;
import android.graphics.Canvas;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;

public class MainGamePanel extends SurfaceView implements
SurfaceHolder.Callback (

Private MainThread thread;

Public MainGamePanel(Context context) (
super(context);
getHolder().addCallback(this);

// створюємо потік для ігрового циклу
thread = new MainThread();

SetFocusable(true);
}

@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) (
}

@Override
public void surfaceCreated(SurfaceHolder holder) (
thread.setRunning(true);
thread.start();
}

@Override
public void surfaceDestroyed(SurfaceHolder holder) (
// посилаємо потоку команду на закриття і чекаємо,
//Поки потік не буде закритий.
boolean retry = true;
while (retry) (
try (
thread.join();
retry = false;
) catch (InterruptedException e) (
// намагаємося знову зупинити потік thread
}
}
}

@Override
public boolean onTouchEvent(MotionEvent event) (
return super.onTouchEvent(event);
}

@Override
protected void onDraw(Canvas canvas) (
}
}

Ми оголосили об'єкт thread

Private MainThread thread;

і створили його у конструкторі

Thread = New MainThread();

У методі surfaceCreated ми встановили прапор running в значення true і запустили потік. На той час об'єкт thread вже успішно створено і можемо без побоювань запускати його.

Спосіб об'єктазруйнований викликається перед закриттям поверхні. Тут замало просто зняти прапор running. Ми маємо переконатися, що потік справді закрився. Ми просто блокуємо потік і чекаємо, доки він не помре.

Додаємо взаємодію з екраном

Щоб показати, як в Android обробити торкання, напишемо невеликий приклад. Виходитимемо з програми, коли користувач торкнеться нижньої частини екрана. Якщо дотик стався десь вище - просто виводитимемо в лог відповідні координати. Додамо до класу MainThread наступні рядки:

Private SurfaceHolder surfaceHolder;
private MainGamePanel gamePanel;

Public MainThread(SurfaceHolder surfaceHolder, MainGamePanel gamePanel) (
super();
this.surfaceHolder = surfaceHolder;
this.gamePanel = gamePanel;
}

цим ми визначили змінні gamePanel і surfaceHolder, взявши відповідні значення параметрів конструктора. Нам потрібно запам'ятати ці значення, щоб потім мати можливість блокувати поверхню на час малювання, а це можна зробити лише через сферу Holder.

Змініть рядок у класі MainGamePanel, додавши в конструктор знову оголошені параметри

Thread = New MainThread(getHolder(), this);

Ми передаємо поточний обробник та панель у новий конструктор. Це дозволить нам мати до неї доступ із потоку. У gamePanel ми створимо метод update і перемикатимемо його з потоку, але поки залишимо все як є.

Логування

Нижче ми напишемо допоміжний код, який здійснює логування - запис спеціальних рядів налагодження з текстом, що відображають стан нашої програми, в спеціальний файл, який потім можна переглянути і спробувати зрозуміти, що відбувалося в програмі. додамо константу TAG у клас MainThread. Кожен клас матиме власну константу з ім'ям TAG, яка міститиме назву відповідного класу. Будемо використовувати Android logging framework, щоб вести логування, в рамках цієї бібліотеки кожен лог повинен мати два параметри. Перший параметр визначає місце, звідки записано балку. Саме для цього ми і створили константу TAG. Другий параметр – власне повідомлення, яке ми хочемо записати в балку. Використання імен класів як перший параметр - досить поширена серед java програмістів практика.

Щоб переглянути записані в процесі виконання програми логі потрібно вибрати меню
Windows -> Show View -> Other…
а потім у діалозі, що відкрився
Android -> LogCat
У вікні можна не тільки переглядати логи, але й здійснювати фільтрацію та пошук.

Повернемося до нашого коду. Внесемо зміни до MainThread.java

Package ru. mobilab. gamesample; import android. util. Log; import android. перегляд. SurfaceHolder; public class MainThreadextends Thread( private static final String TAG= MainThread. class . getSimpleName() ; private SurfaceHolder surfaceHolder; private MainGamePanel gamePanel; private boolean running; surfaceHolder, MainGamePanel gamePanel) ( super() ; this. surfaceHolder= surfaceHolder; this. gamePanel= gamePanel; ) @ Override public void run() ( long tickCount= 0L; Log . d(TAG, "Starting game loop" ) ; (running) (tickCount++; // тут оновлюватиметься стан гри // та формуватися кадр для виведення на екран) Log . d(TAG, "Game loop executed" + tickCount + "times"); )

Як бачите, ми визначили TAG і викликали всередині методу run команду Log, яка робить відповідний запис у файлі лог. Ми виводимо в бал значення змінної tickCount, яка фактично є лічильником ігрового циклу і показує скільки разів встиг виконатися ігровий цикл за час роботи програми

Перейдемо до файлу MainGamePanel.java і знайдемо метод onTouchEvent, який є обробником торкання екрана.

public boolean onTouchEvent(MotionEvent event) ( if (event. getAction() == MotionEvent. ACTION_DOWN) ( if (event. getY() > getHeight() - 50 ) ( thread. setRunning(false ) ; ((Activity) getContext( ) ) .finish() ; ) else ( Log . d(TAG, "Coords: x=" + event. getX() + ",y=" + event. getY() ) ; ) ) return super.onTouchEvent(event ) ; )

Спочатку ми перевіряємо чи відбулася подія торкання екрана (MotionEvent.ACTION_DOWN). Якщо сталося, перевіряємо координату y і якщо вона знаходиться в нижній частині екрану (50 пікселів знизу), ми посилаємо потоку команду на завершення (встановивши змінну running в false), а потім викликаємо метод finish() для головної Activity, який закриває всю нашу програму .

Зауваження. Початок системи координат біля екрана знаходиться у лівому верхньому кутку. Вісь спрямована вниз, вісь x - вправо. Ширину та висоту екрана можна отримати за допомогою методів getWidth() та getHeight() відповідно.

Змінимо DroidzActivity.java, додавши команди запису в лог

Package ru. mobilab. gamesample; import android. app. Activity; import android. os. Bundle; import android. util. Log; import android. перегляд. Window; import android. перегляд. WindowManager; public class DroidzActivityextends Activity( /** Викликається під час створення activity. */ private static final String TAG = DroidzActivity. class. getSimpleName() ; @ Override public void onCreate(Bundle savedInstanceState) ( super. onCreate(savedInstanceState) ; // Запит на відключення рядка заголовка requestWindowFeature(Window. FEATURE_NO_TITLE) ; // Переведення програми в повноекранний режим getWindow(). setFlags(WindowManager. LayoutParams. FLAG_FULLSCREEN, WindowManager. LayoutParams. FLAG_FULLSCREEN) ; // встановлюємо MainGamePanel як View setContentView(new MainGamePanel(this) ) ; Log. d(TAG, "View added"); ) @ Override protected void onDestroy() ( Log . d(TAG, "Destroying..." ) ; super. onDestroy() ; ) @ Override protected void onStop() ( Log . d(TAG, "Stopping...") ) ;super.onStop() ; ) )

Давайте запустимо програму. Після запуску Ви маєте побачити чорний екран. Клацніть кілька разів по верхній частині екрана, а потім по нижній. програма закриється. Саме час перевірити балку.

Переглянувши лог ви отримаєте чітке уявлення про порядок запуску методів. Ви також можете побачити, скільки разів за час роботи програми встиг виконатися ігровий цикл. Ця цифра ні про що не говорить, наступного разу ми виведемо в лог більше корисну інформацію: FPS та UPS (оновлень за секунду).

Підведемо підсумок. Ми створили повноекранний додаток. Написали клас, який виконується в окремому потоці і міститиме ігровий двигун. Написали найпростіший методобробки дотиків екрану та грамотно закрили додаток.

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

Переклад та адаптація: Олександр Льодков

Як створити гру на андроїд?











Створення гри для будь-якої операційної системипередбачає знання програмування. Навіть для найпростіших ігор типу Flappy Bird слід знати його основи. Давайте розглянемо, як відбувається створення гри з прикладу операційної системи Android.

Двигун

Першим етапом у написанні гри є встановлення двигуна. У мережі є безліч движків, написаних різними мовами програмування. Зрозуміло, платні двигуни мають більше функцій, відрізняються стабільнішою роботою і відкривають великі можливості. Проте їхня вартість може бути дуже великою. Тому як приклад ми візьмемо безкоштовний двигун LibGDX.

Цей двигун має досить великі можливості і має інструкції з використання російською мовою. Двигун є мультиплатформенним, тому гра, яка буде написана на ньому, зможе бути встановлена ​​і на інших платформах.

Середовище програмування

Також дуже важливим моментомє використання середовища програмування. Під цим терміном мається на увазі інструмент, у якому відбуватиметься написання гри. У випадку з двигуном LibGDX середовищем програмування буде Exlipce. Так як двигун гри був написаний мовою програмування java, то для того, щоб використовувати середовище програмування, вам доведеться використовувати базові навички та знання програмування саме в цій мові. Тому якщо ви не знаєте азів, вам потрібно їх вивчити.

Створення проекту

Щоб написати гру на андроїд, як і будь-яку іншу платформу, потрібно спочатку створити проект. Зробити це нескладно. У випадку з LibGDX для цього достатньо розпакувати двигун в папку і знайти в ньому однойменний файл. Далі знадобиться натиснути кнопку "Створення проекту", і ви вже опинитесь за крок від створення проекту. Потім потрібно лише вибрати платформу для гри та вказати назву проекту. У конфігурації необхідно вказати, де буде розміщена гра серед програмування. Двигун сам створить проект і підкаже, якщо ви щось зробили не так. Далі можна буде перейти у середовище програмування та почати писати гру.

Як бачите, створення гри для андроїд та будь-якої іншої ОС просто неможливе без знань основ мов програмування. Однак зараз двигуни стають все кращими і зручнішими навіть для тих, хто тільки починає свій шлях у цій справі. Прикладом такого двигуна також є Game Maker. Про цей движок і про створення гри на ньому ви зможете прочитати в статті.

© 2022 androidas.ru - Все про Android