Прості 2D гоночки в космосі під Tizen або Як виграти хакатон Tizen Association

  FriedCroc Tizen Hackathon
  
У минулі вихідні в Москві на Берсеневской набережній в Lightbox Studio Red October пройшов організований компаніями Intel, Samsung і FRUCT хакатон, присвячений розробці додатків під платформу Tizen.
 
Наша молода (але дуже перспективна!) Команда FriedCroc взяла участь у цьому чудовому заході. Та й не просто прийняла, а ще й посіла перше місце! Ми вирішили розповісти про це співтовариству, поділитися накопиченим досвідом і викласти исходники нашого прототипу.
 
 

Наш проект

Чому 2D гоночки в космосі? Деякий час тому ми виклали в AppStore кілька ігор. Одна з них присвячена кроликам, які крадуть морквини з фермерських угідь. А оскільки кролики — це не тільки цінне хутро, то вони були благополучно запущені в космос збирати там морквини і ухилятися від астероїдів. У результаті кожен зайнятий своєю справою: Samsung запускає Tizen для землян, а FriedCroc запускає кроликів в космос.
 
Як і належить будь-якому учаснику хакатона, у нас були грандіозні плани. Ми хотіли зробити гонку з суперником, апгрейд ракети, що підбираються Бусто і тому подібні цікаві штуки. Ми їх, звичайно ж, зробимо перед тим як викласти іграшку в Tizen Store, але в прототипі всього цього задоволення немає. Ми навіть не встигли зробити звукові ефекти, хоча й планували.
 
 

Tizen

Наше знайомство з платформою Tizen сталося не на самому Хакатона, а за тиждень до нього, на фіналі хакафона MDDay в Яхроме, де ми теж брали участь (але, до нашого розчарування, нічого не виграли). Платформа Tizen ще сирувата і далека від досконалості, і ми мали задоволення наступити на деякі граблі ще в Яхроме. На щастя, Samsung на кожен захід надсилає чудових менторів, які цілодобово на проліт готові вирішувати проблеми розробників. Ці хлопці не здаються, поки не знайдуть рішення, за що їм величезне спасибі. А проблем було пристойно: у нас не запускався емулятор, не працювала одне з тестових пристроїв (його довелося перепрошувати), були складнощі з налаштуванням проекту. У підсумку ми витратили десь 4:00 на вирішення цих проблем. Зате до хакатону в Червоному Жовтні ми вже підійшли у всеозброєнні.
 
Отже, з платформою ми були трошки знайомі. Тестові пристрої у нас теж вже були (ми ними розжилися в Яхроме, причому абсолютно безкоштовно: потрібно було тільки підписати зобов'язання ці пристрої не продавати). Здавалося б, які ще складнощі можуть виникнути?
 
 

Eclipse vs CLI

Tizen SDK використовує Eclipse в якості середовища розробки. Вони пояснюють це тим, що для Eclipse легко писати плагіни.
 
У всіх програмістів FriedCroc був досвід роботи з Eclipse, і всіх нас, без винятку, від нього нудить. В основному — через його глючності (чого варті одні лише «зависающие» маркери синтаксичних помилок у файлах, які лікуються виключно перезапуском середовища).
 
Саме тому, коли ми дізналися, що в Tizen SDK є утиліти для роботи з проектами з командного рядка, ми однозначно вирішили розробляти за допомогою цих утиліт. Однак, як виявилося, консольні інструменти досить сирі. Наприклад, Makefile, який генерують ці утиліти, вимагає розташування всіх початкових кодів в одній директорії і не підтримує вкладені піддиректорії. Крім того, документації за цим способом збірки практично немає: не зрозуміло, як додати прапори компілятора, як вказати директорію з вихідними кодами і т.п.
 
У підсумку ми все-таки використовували Eclipse-проекти: вони підтримують піддиректорії, дозволяють задавати define'и та інші прапори компілятора і вміють ще купу всього, чого не вміють консольні утиліти.
 
 

С + +11

Ми пишемо гри на С + +. Більше того, ми пишемо гри на С + +11. Свіжа версія мови має купу булочок, які зменшують кількість коду і прискорюють розробку. Тим більше, що надворі вже 2014 і всі mainstream-компілятори вже підтягнулися хоча-б до 80% підтримки цього стандарту.
 
На превеликий нашого розчарування, Tizen SDK містить дуже стару версію GCC і libstdc + + (4.5), тому нормальної підтримкою C + +11 там навіть і не пахне. З цієї причини в Яхроме ми писали наш проект на C + +98.
 
Природно, миритися з таким станом справ ми не збиралися, тому стали шукати спосіб зібрати код на C + +11 під Tizen. По-перше, нам пощастило, що в Tizen SDK також входить компілятор clang. І хоч він теж вельми древній, він таки розуміє C + +11, нехай і випадає періодично в кірку. Проблему відсутності підтримки C + +11 на рівні бібліотек (в Tizen SDK старий libstdc + +) ми вирішили дуже просто: взяли свіженькі исходники libc + + з clang і поклали в наш проект. Після внесення невеликих правок і додавання пари define'ов в проект, libc + + благополучно зібралася, чому ми були невимовно раді.
 
 image
 
 image
 
 image
 
До речі, щоб код збирався в режимі C + +11, компілятору потрібно додати флаг-std = c + +11. На жаль, якщо відредагувати список прапорів компілятора в Eclipse, то він буде перезатерт при наступній збірці (інженери Samsung, візьміть на замітку!). У підсумку, довелося скористатися полем «Other optimization flags», яке, в общем-то призначено для інших цілей. Але зате воно не перезатірается при збірці і прапор доходить до компілятора.
 
 image
 
 

Досить про Tizen, поговоримо про проект

Ми використовували Box2D для фізики. У проекті є debug draw (який відключається тільки в релізной збірці). Не дивуйтеся, що кораблик має чотири «колеса» — ми взяли за основу якийсь семпл з інтернету, там були машинки.
 
Управління зроблено дуже просто: екран поділений по вертикалі на три частини; натискання в лівій частині робить поворот вліво, у правій — управо, а центральна частина не використовується.
 
Тут варто відзначити, що нам дуже сподобалася ідея, реалізована в Angry Birds Go, коли машинка «намагається» їхати в потрібному напрямку навіть якщо гравець нею не керує. Тому в нашій іграшці кораблик теж намагається слідувати за маршрутом, хоч і не дуже успішно, якщо йому не допомагати.
 
Картинку ми малюємо звичайним OpenGL ES 2.0. Ми навіть не намагаємося відкидати невидиму геометрію (це ж хакатон, в кінці кінців). На наше щастя, тестовий девайс цілком справляється з цим неефективним кодом і видає іграбельних FPS.
 
До речі, ось скріншоти того, що у нас вийшло:
 
 Screenshot 1Screenshot 2
 
З debug-отрисовкой:
 
 Screenshot 3Screenshot 4
 
 

Редактор рівнів

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

Ресурсні файли

Ми не встигли розібратися з механізмом ресурсів в Tizen. Щоб не ризикувати (час на Хакатона вельми обмежена), ми написали невелику ТУЛЗ , яка переганяє ресурсні файли в C + +-масиви.
 
 

Ісходникі

Ісходникі ігри доступні на github: github.com / friedcroc / tizen_spacerace під дуже ліберальної ліцензією (MIT), так що користуйтеся. Код там місцями хакатоновскій (мінімум оптимізацій, купа якихось захардкоженних параметрів і тому подібні неподобства), але цілком читається. Зображення замінені на спрощені чорно-білі, не ображайтеся.
 
 

Ще раз трошки про нас

Ми молоді, прогресивні, перспективні і просто класні! Нам дуже подобається робити гри, ніж ми успішно і займаємося. Іноді ще й мобільні додатки робимо.
 
Якщо є бажання ознайомитися з нашими іграми в AppStore, посилання на них можна знайти на нашому сайті. А який у нас сайт, я сподіваюся, ви здогадаєтеся.
 
За сим дозвольте мені откланяться, всім дякую за увагу!
  
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.