на чем сделать игру для андроид

Опыт создания игры для Android в одиночку с нуля и как ее зафичерили на Google Play

Сужать круг поиска, чем именно заниматься, было тяжело. Знакомых в этой области не было, поэтому решил отталкиваться от каких-то общих соображений. Так как в приоритете было в первую очередь найти что-то интересное, выбор пал на геймдев. Понравилась идея для начала сделать простенькую 2D-игру под Android и выложить на Google Play.

Немного уделив времени теории (алгоритмам, структурам данных и проектированию), для дальнейшего изучения я выбрал язык Java, который по сути является официальным языком Android, да и в целом очень популярен. В качестве фреймворка приглянулся LibGDX, бесплатный, разработка на нем ведется как раз на Java, и вдобавок он кроссплатформенный. Хотя для следующей игры планирую осваивать всем известный Unity.

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

После создания нескольких пробных игр я взялся за игру, которую в конечном итоге и опубликовал на Google Play. Это казуальная геометрическая аркада, где главная цель — уворачивание от препятствий.

Я не буду здесь описывать здесь процесс создания игры. Если у кого-то есть вопросы, могу ответить в комментариях, или возможно напишу об этом отдельную статью.

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

Говорят, что продвижение игры надо начинать заниматься задолго до релиза. Этого я, конечно, не делал. Продвигать начал сразу после релиза игры. Сделал простенький сайт, трейлер игры, разослал запросы на обзор в кучу разных ресурсов, в том числе англоязычных (ответов получил очень мало, и в основном просили оплату), обновлял соцсети. Из платных методов: купил обзор на 4pda по программе поддержки разработчиков и попробовал рекламные кампании на Facebook и Adwords.

В итоге ни платные, ни бесплатные методы продвижения не принесли мне желаемого эффекта и я практически прекратил попытки. Количество скачиваний игры в день после этого опустилось до 10-40 и игра почти не подавала признаков жизни. Однако мне повезло, и неожиданно для меня Google Play зафичерил меня в разделе Indie Corner. Это не очень популярный раздел по меркам Google Play, но тем не менее количество скачиваний только благодаря ему сильно выросло и в отдельные дни достигало более 2000.

Думаю вместо слов, вам будет больше интересно увидеть статистику. Это данные спустя 2 месяца после релиза и 2 недели после начала фичеринга:

Активные установки / Всего установок: 8400 / 37000
Рейтинг на Google Play: 4.2 (148)
DAU/MAU: 3400 / 33000 (количество уникальных юзеров в день / в месяц)
Среднее время игры в день на юзера: 8m 31s
Среднее количество сессий в день на юзера: 1.6
Юзеров без критических ошибок: 99.6%

Таким образом, я получил возможность сравнить аудиторию, привлеченную через Adwords, и органику. Интересно, что между ними есть существенная разница. “Органический” юзер намного чаще оставляет отзыв, чаще делает покупки (все равно очень редко, но ни один юзер из Adwords до этого не делал покупок), и у него дольше игровые сессии. Хотя, к сожалению, удержание у него значительно хуже (удержание на первый день 25% у органики против 38% у юзеров с Adwords).

Подводя итоги, скажу, что игра до сих пор в небольшом минусе. Но ожиданий от первой игры особых и не было, а опыт получил ценный и интересный.

Если мой рассказ получился сумбурным, задавайте вопросы, уточню, что смогу.

Источник

📱 Как начать разрабатывать мобильные игры для Android?

Сергей Кравченко

Перспективы и направления

Популярные жанры

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

Multiplayer Battle Arenas представляет собой смесь стратегии в реальном времени и экшена. Игроку предоставляется контроль над одним персонажем, известным как «чемпион» или «герой», которого можно выбрать из большого списка. Нужно собрать команду и разрушить базу противников, защищая собственную.

Battle Royale

MMORPG

Многопользовательские ролевые онлайн-игры – это онлайн-RPG, в которой игроки повышают уровень персонажей и приобретают новые способности. При этом сотни аккаунтов одновременно взаимодействуют друг с другом в одном мире и в режиме реального времени.

Головоломки

Более половины пользователей смартфонов и планшетов играют в головоломки. Candy Crush и Tetris популярны даже среди аудитории, которая не идентифицируют себя как геймеров. Логические игры сосредоточены на простых для понимания, но сложных в освоении механиках и требуют использования быстрого мышления.

Казуальные игры

Эта категория доминирует на рынке игр для мобильных устройств. Казуальные игры являются наиболее популярным жанром среди пользователей Android. Их можно легко начать и отложить в любой момент, что позволяет использовать потенциально короткие периоды игры.

Выбор движка

Unity

Unreal

В новом движке Unreal Engine 4 много изменений по сравнению с предыдущими версиями. В качестве языка сценариев используется C++, который полностью заменил популярный некогда UnrealScript, а Kismet заменен более удобной системой Blueprint. Из-за этих перемен даже опытным дизайнерам игр придется пройти обучение, чтобы освоить обновленную версию.

Unreal поставляется с инструментами для использования технологий виртуальной и дополненной реальности для разработки мобильных игр. В «Библиотеке программиста» вы найдете подробный туториал по созданию первого объекта и освоению Unreal Engine 4.

Solar2D

Это далеко не полный список игровых движков, но одна из популярных платформ может стать вашим счастливым билетом в мир геймдева.

Основные этапы разработки

Чтобы создать мобильную игру под Android, нужно пройти определенные этапы. Предлагаем вашему вниманию пошаговый план для начинающих:

Идея и план

Идея – самый сложный и ответственный шаг к созданию успешной мобильной игры. Ключ к поиску идеи – придумать что-то новаторское и увлекательное. Идея должна понравиться массовой аудитории.

Правильное планирование или его отсутствие могут обеспечить успех или провал проекта. Найдите время, чтобы записать идеи, придумать уникальных персонажей, поиграть с разными стилями и подумать о типе игрового процесса, который сделает вашу игру увлекательной. Раскрыть потенциал проекта поможет история: в игровом мире она имеет огромное значение. Чтобы пройти путь до конца, пользователю нужна цель, а для этого понадобится история, какой бы простой та ни была.

Выбор языка и инструментов

Графика

Создание игрового дизайна намного сложнее создания дизайна обычного приложения. Приходится учитывать множество факторов: историю, персонажей и финальный внешний вид. В первую очередь именно дизайн отличает вашу игру от конкурентов, однако обсчет сложных деталей требует вычислительной мощности – нужно соблюдать баланс между хорошей графикой и производительностью, учитывая возможности мобильных устройств под Android. Далеко не у всех пользователей будут крутые флагманы.

Читайте также:  Что такое липоредукция брылей это

Работа в команде

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

Тестирование, запуск и монетизация

Перед запуском игры ее стоит всесторонне протестировать, но не стоит на этом зацикливаться. Многие начинающие разработчики чересчур усердно пытаются сделать программу идеальной, все время задерживая выпуск. Это серьезная ошибка – лучше быстрее выпустить релиз без критичных багов. Если игра понравится аудитории, ее можно будет улучшить.

Стоит подумать и о монетизации проекта. Существует несколько распространенных способов о ней позаботиться:

Развитие проекта

Если ваша игра собрала значительную аудиторию, не стоит останавливаться на достигнутом. Обновления и улучшения позволят сделать ее лучше и привлечь большее количество довольных геймеров.

Стремительное развитие смартфонов за 10 лет изменило игровую индустрию кардинально. От простых карманных консолей Game Boy мобильные игры эволюционировали до многопользовательских платформ со сложной механикой и интересной визуальной составляющей. Это не должно вас пугать: даже простые проекты в стиле платформеров и казуальных игр могут найти свою аудиторию благодаря доступности и простому управлению.

Источник

Разработка прибыльной Android игры двумя школьниками

В данной статье хочу рассказать вам об опыте разработки одной простенькой игры под Android, которая многократно окупилась еще на стадии разработки!

Предыстория

Мы начали заниматься разработкой игры в 10-м классе. До этого никакого опыта в разработке и продвижении мобильных игр у нас не было. Были лишь базовые знания Java и небольшой опыт создания сайтов. И все!

На дворе был декабрь 2015 года. Идея создать игру пришла абсолютно внезапно: обедая в школьной столовой во время перемены, мы непринужденно поглощали только что купленные сосиски в тесте и, как обычно, увлеченно разговаривали о смысле жизни, машинном обучении, о быстром темпе развития ИИ. Постепенно наш разговор затронул тему о разработке мобильных игр. Мы рассуждали о сложности создания популярных игр, их коммерческой выгоде и тд. И тут нас посетила дерзкая идея создания собственной игры под Android. Быстро доев свой обед, мы с огромным энтузиазмом стали это обсуждать.

Мы начали перебирать в голове все топовые на тот момент игры: такие, как Flappy Bird, Crossy Road и тд, так как захотели создать что-то похожее, что заставило бы людей «залипнуть» в нашу игру.

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

После недолгих размышлений было решено выбрать игровой жанр «кликер». Он подкупил нас кажущейся простотой разработки, хотя мы и понимали, что даже на момент создания игры этот жанр уже морально устарел, и никакого коммерческого успеха можно было не ждать.

После выбора жанра встала проблема выбора тематики. Уже не помню почему, но мы решили выбрать тематику «качалки». Возможно, на данный момент это выглядит забавно, но в то время нам это казалось достаточно оригинальным решением.

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

Нейминг

Над названием мы особо не заморачивались и придумали его в тот же день. Мой воспаленный ум выдал такое странное словосочетание: «Накачай Качка». То, что это попросту неграмотно и противоречит всем нормам русского языка мы узнали только на второй год разработки игры, но это название так нам приелось, и стало таким родным, что переделывать его уже не хотелось. Так что оставили так, как есть.

Мы понимали, что делать обычный кликер в 2015 году, пускай даже в необычной тематике уже не то. И мы решили, что уж если разрабатывать игру в таком жанре, то нужно привнести в нее хотя бы несколько новых и оригинальных игровых решений.

Мы придумали 2 основных фичи:

1) Мы решили ввести такой игровой режим, как совместная игра с другом. Экран делится на 2 части и игрок может сразиться со своим другом в скорости «Нажатия на гантелю». Нам это показалось очень хорошей идеей, так как до этого мы такое еще нигде не встречали. Также, эта идея хороша эффектом «сарафанного радио», так как игрок, может увлечь в игру своего друга, и он также скачает себе наше приложение.

2) Второй фичей было решение ввести модель качка, мышцы которого по мере прохождения будут увеличиваться. Интерес игрока в том, чтобы узнать, что же с ним станет в конце игры, в кого же он превратится? Эта фича была призвана удерживать игрока в игре и держать приложение установленным как можно дольше на телефоне.

Дизайн

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

После многих неудачных вариантов дизайна игры, мы решили нанять профессионального художника на фрилансе. Мы долго выбирали подходящего дизайнера, тщательно просматривали огромное количество профилей, вчитывались в отзывы и тд.

Наконец, коллегиальным решением мы выбрали понравившегося нам художника с внушительным портфолио и огромным опытом работы. Недолго думая, мы решили ему написать.

Это был очень волнительный момент. Мы думали, что это наш единственный шанс получить крутой дизайн, и мы не можем его упустить. Я крутил у себя в голове наш диалог, продумывал наше общение на пять сообщений вперед. Наконец, собравшись с силами, я отправил ему первое сообщение. Ответ не заставил себя долго ждать. Художник ответил всего через пол часа.
Всего за работу он хотел не много не мало 5000-8000$…

В тот день мы столкнулись с реалиями этого мира. Таких денег у нас не было и в помине. Тот максимум, который мы могли обеспечить — была сумма примерно в 30 тысяч рублей. Это все деньги, которые мы усердным трудом накопили с завтраков.

У нас сразу же опустились руки. Мы стали рассуждать о том, что идея создания игры была дурацкой, начали спорить, кто вообще предложил разрабатывать это. Примерно неделю мы ходили в подавленном настроении духа и практически не говорили о игре.

Но, в конце концов, мы решили попробовать еще раз. После вторых продолжительных поисков мы нашли художницу, которая рисовала гораздо проще, в мультяшном стиле, но и цены у нее не кусались.

Читайте также:  нейтральная вставка на жд что это

Мы решили, что надо брать! Всего за весь дизайн мы заплатили около 20 тыс. рублей.
Это была тяжелая материальная потеря, но мы с ней справились.

Разработка всего дизайна по времени отняла приблизительно 2-3 недели. В итоге, он нам не то, чтобы очень сильно понравился, но был неплох.

Итак, дизайн был готов! Настало время разработки!

Разработка

О разработке можно сказать очень многое. Я выделю лишь некоторые ключевые моменты. Также распишу о тех неожиданностях, с которыми мы встретились, и о том, что нас по-настоящему поразило.

Всего разработка заняла около двух лет. Игра написана на нативном Андроиде и состоит приблизительно из 20 тысяч строк кода, не включая библиотеки.

В самом начале ничего, кроме этой гантели на Activity не было. В начале разработки самым сложным стало понимание графического интерфейса, все эти layout’ы, виджеты и иже с ними… Далее по мере разработки игры мы узнавали про асинхронность в андроиде, про продвинутые виджеты, смотрели огромное количество различных библиотек и пытались разобраться, что вообще там такое написано, и как оно работает. После одного года общения с андроидом мы уже имели представление об основах разработки. Старый код постепенно переписывался, так как после подросших умений он уже казался слишком костыльным и непродуманным.

В ходе разработки игры мы поняли, что очень поспешили, заказав весь дизайн сразу — приходилось очень многое перерисовывать самостоятельно, подгонять под интерфейсы, на это уходило слишком много времени.

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

Сейчас мы поставляем сразу 5 версий приложения в Гугл Плей (4 версии с разделением ресурсов и 1 версию без разделения), что позволяет экономить у некоторых пользователей около 18 мегабайт веса.

В общем, проект, который мы планировали завершить через 3-4 месяца растянулся на такой долгий срок.

Монетизация

После того, как в игре появился хоть какой то функционал, мы начали думать о способах монетизации. Мы перепробовали много разных компаний-рекламодателей, включая StartApp, ChartBoost и тд. Но решили оставить свой выбор на Appodeal, которая показалось нам самой адекватной сетью, несмотря на большой размер SDK и необходимость использования multidex.
Также очень понравилась работа поддержки, ответы были всегда оперативными и понятными.

Всего рекламы в игре довольно много: от простых маленьких баннеров на разных Activity до их полноэкранных видов. Также, в игре присутствует видео-реклама, которую пользователь может просмотреть, если захочет ускорить прохождение игры.

Сразу после внедрения рекламной сети доход от игры откровенно печалил. Он составлял не более 0,1$ в день, так как просмотров было очень мало, в связи с маленьким количеством игроков.

Со временем график очень медленно, но верно рос вверх. За пол года игра начала приносить около 1$ в день.

Все изменилось после того, как мы осознали, что у игры ужасная иконка и глупое описание. Мы решили их поменять.

Старая и новая иконки игры:

И тут доход от игры резко пошел вверх в геометрической прогрессии! Уже за первую неделю доход от игры превысил 5$ в день, а на данный момент суммарный доход от встроенной рекламы и покупок составляет немногим более 100$ в день.

Количество установок пользователей в день также резко подскочило вверх:

Ошибки

При том условии, что это был самый простейший кликер, а разработка велась очень усердно, мы поняли, свою главную ошибку: мы совершенно неправильно оценили свои силы. Я планировал закончить разработку уже через 3-4 месяца, ну, максимум через 6, а получилось так, что даже через 2 года игра не имеет всех фич, которые мы запланировали в неё ввести.

Для себя я осознал то, что если ты задумываешь сделать какой-то проект и оцениваешь время, которое уйдет на разработку, то этот результат можно смело умножать на 3, а то и на 4.

Второй ошибкой было отсутствие четкого плана действий.
Разработка велась достаточно спонтанно, и многие игровые решения и фишки придумывались на ходу, многие моменты в игре переделывались. Из-за этого большое количество сил и энергии ушло в пустую. Для себя мы вынесли то, что перед разработкой игры нужно обязательно составить подробную концепцию того, что хочется увидеть в конце.

Итоги

На момент написания статьи, игра выпущена из публичной беты в релиз уже как 3 дня назад. Пока что публичных отзывов достаточно мало, и никакого особого прироста в закачках после релиза игры мы не заметили, но уже на данный момент игра попала в ТОП новых и находится на 280 месте, хотя мы еще не давали практически никакой рекламы.

По итогу, после проведения рекламной кампании, мы планируем увеличить доход в день как минимум в 2, а то и в 3 раза. Но мы уже сейчас по уши счастливы, так как даже по текущим меркам 120 тыс. рублей в месяц на двоих, пускай даже бывших школьников, очень неплохо.

С текущими перспективами мы теперь планируем создать что-то по-настоящему стоящее, что-то оригинальное и гораздо более продуманное!

Источник

Создание простой 2D игры на Android

Когда я писал эту «игру» у меня возникала масса вопросов по поводу зацикливания спрайтов так что бы они появлялись через определенное время, так же были проблемы с обнаружением столкновений двух спрайтов и более, все эти вопросы я сегодня хочу осветить в этом посте так как в интернете я не нашел нормального ответа на мои вопросы и пришлось делать самому. Пост ни на что не претендует, я новичок в разработке игр под android и пишу я для новичков в данной отрасли. Кому стало интересно прошу под кат.

Постановка задачи:

Игра должна представлять из себя поле (сцену) на котором располагается ниндзя и призраки. Нинзя должен защищать свою базу от этих призраков стреляя по ним.

Пример такой игры можно посмотреть в android market’e. Хотя я сильно замахнулся, у нас будет только похожая идея.

Вот как будет выглядеть игра:

Начало разработки

Создаем проект. Запускаем Eclipse — File — Android Project — Defens — Main.java.

Открываем наш файл Main.java и изменяем весь код на код который ниже:

Код ниже говорит нашей главной функции что запускать нужно не *.xml файл темы, а класс который у нас является самой сценой.

Дальше Вам нужно создать класс GameView.java который будет служить для нас главным классом на котором будет производится прорисовка всех объектов. Так же в этом классе будет находится и наш поток в котором будет обрабатываться прорисовка объектов в потоке для уменьшения нагрузки игры на процессор. Вот как будет выглядеть класс когда на сцене у нас ничего не происходит:

Читайте также:  семейная кухня рецепты куличей пасхальных

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

Создание спрайтов

Сейчас мы будем использовать не анимированные спрайты но в будущем я вставлю спрайты в проэкт, если тянет научиться делать спрайты прошу во второй урок по созданию игры под android.

Теперь загрузите эти картинки в папку res/drawable для того, чтобы Eclipse мог увидеть эти картинки и вставить в Ваш проект.

Следующий рисунок должен визуально помочь понять как будет располагаться игрок на экране.

Скучная картинка… Давайте лучше создадим этого самого игрока.

Нам нужно разместить спрайт на экране, как это сделать? Создаем класс Player.java и записываем в него следующее:

Создаем еще один файл классов и назовем его Bullet.java, этот класс будет определять координаты полета, скорость полета и другие параметры пули. И так, создали файл, и пишем в него следующее:

Из комментариев должно быть понятно что пуля выполняет только одно действие — она должна лететь по направлению указанному игроком.

Рисуем спрайты на сцене

Для того что бы нарисовать эти два класса которые мы создали, нам нужно отредактировать код в классе GameView.java, добавить несколько методов которые будут возвращать нам наши рисунки. Полностью весь код я писать не буду, буду приводить только код нужных мне методов.

Для начала нам нужно создать объекты классов Bullet и Player для того что бы отобразить их на экране, для этого создадим список пуль, что бы они у нас никогда не заканчивались, и обычный объект класса игрока.

Дальше нам нужно присвоить картинки нашим классам, находим конструктор GameView и вставляем в самый конец две строчки:

GameView.java — Конструктор GameView

И в методе onDraw(Canvas c); делаем видимыми эти спрайты. Проходим по всей коллекции наших элементов сгенерировавшихся в списке.

А для того что бы пули начали вылетать при нажатии на экран, нужно создать метод createSprites(); который будет возвращать наш спрайт.

Ну и в конце концов создаем еще один метод — onTouch(); который собственно будет отлавливать все касания по экрану и устремлять пулю в ту точку где было нажатия на экран.

Враги

Для того что бы нам не было скучно играться, нужно создать врагов. Для этого нам придется создать еще один класс который будет называться Enemy.java и который будет уметь отображать и направлять нашего врага на нашу базу. Класс довольно простой по этому смотрим код ниже:

И так что происходит в этом классе? Рассказываю: мы объявили жизненно важные переменные для нашего врага, высота ширина и координаты. Для размещения их на сцене я использовал класс Random() для того что бы когда они будут появляться на сцене, появлялись на все в одной точке, а в разных точках и на разных координатах. Скорость так же является у нас рандомной что бы каждый враг шел с разной скоростью, скорость у нас начинается с 0 и заканчивается 10, 10 — максимальная скорость которой может достигнуть враг. Двигаться они будут с права налево, для того что бы они не были сразу видны на сцене я закинул их на 900 пикселей за видимость экрана. Так что пока они дойдут можно уже будет подготовиться по полной к атаке.

Дальше нам нужно отобразить врага на сцене, для этого в классе GameView.java делаем следующее:

Создаем список врагов для того что бы они никогда не заканчивались и создаем битмап который будет содержать спрайт:

Далее создаем новый поток для задания скорости появления врагов на экране:

И имплементируем класс Runuble, вот как должна выглядеть инициализация класса GameView:

Теперь у Вас еклипс требует создать метод run(), создайте его, он будет иметь следующий вид:

В самом низу класса GameView

Здесь мы создаем поток который будет создавать спрайт от 0 до 2000 милисекунд или каждые 0, 1 или 2 секунды.

Теперь в конструкторе в самом конце пишем инициализируем наш спрайт с классом для отображения на сцене:

Ну и конечно же нам нужно объявить эти методы в onDraw(); Вот значит и пишем в нем следующее:

Метод onDraw() в GameView

Снова проходим по коллекции врагов с помощью итератора и проверяем — если враг зашел за предел в 1000 пикселей — удаляем его, так как если мы не будем удалять у нас пямять закакается и телефон зависнет, а нам такие проблемы не нужны. Все игра готова для запуска.

Запускаем нашу игру и что мы увидим? А вот что:

Но что я вижу? О нет. Пули никак не убивают наших призраков что же делать? А я Вам скажу что делать, нам нужно создать метод который будет образовывать вокруг каждого спрайта — прямоугольник и будет сравнивать их на коллизии. Следующая тема будет об этом.

Обнаружение столкновений

И так, у нас есть спрайт, у нас есть сцена, у нас все это даже движется красиво, но какая польза от всего этого когда у нас на сцене ничего не происходит кроме хождения туда сюда этих спрайтов?

С этой функцией я навозился по полной, даже как-то так выходило что психовал и уходил гулять по улице)) Самый трудный метод, хотя выглядеть совершенно безобидно…

Ладно, давайте уже создадим этот метод и не будем много разглагольствовать… Где то в конце класса GameView создаем метод testCollision() и пишем следующий код:

В самом низу класса GameView.java

И так, что у нас происходит в этом методе? Мы создаем один итератор и запускаем цикл для просмотра всей коллекции спрайтов, и говорим что каждый следующий спрайт пули будет первым.

Дальше создаем еще один итератор с другим списком спрайтов и снова переопределяем и говорим что каждый следующий спрайт врага будет первым. И создаем оператор ветвления — if() который собственно и проверяет на столкновения наши спрайты. В нем я использовал математическую функцию модуль (abs) которая возвращает мне абсолютное целое от двух прямоугольников.

Внутри ифа происходит сравнения двух прямоугольников Модуль от (Пуля по координате Х минус координата врага по координате Х меньше либо равен ширина пули плюс ширина врага / 2 (делим на два для нахождения центра прямоугольника)) и (Модуль от (Пуля по координате У минус координата врага по координате У меньше либо равен ширина пули плюс ширина врага / 2 (делим на два для нахождения центра прямоугольника)));

И в конце всего, если пуля таки достала до врага — мы удаляем его со сцены с концами.

Ну и для того что бы эта функция стала работать записываем её в метод run() который находится в классе GameThread, ниже нашего метода рисования onDraw().

Вот что у нас получается после запуска приложения:

Источник

Портал знаний