« Статьи по Андроид »

Создать запись
5613
0 Оставить Мнение Подробнее 21 Мая 2013
Аля майнкрафт - ломаем стены за пределами карты

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

До:

После:

Ответ 1
0 Ответить
Не катит
Ответ 2
+1 Ответить
#1, прокатит
4280
0 Оставить Мнение Подробнее 19 Мая 2013
Порталы и здоровье

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

3383
0 Оставить Мнение Подробнее 17 Мая 2013
Эмулируем управление "джойстик" (joystick) в игре на Android

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

Пожалуй это весь список недостатков. Достоинства:
  • Автоперемещение при отпускании в первоначальную позицию
  • Грамотное разделение по классам
  • Джойстик может прекрасно функционировать в любой точке экрана

Где скачать исходники? Тут.


Это одна из реализаций Anarchy-Widgets. Самое главное: чтобы адаптировать джойстик поменяйте метод measure на:

private int measure(int measureSpec) {
return 110;
}
3447
0 Оставить Мнение Подробнее 15 Мая 2013
Продолжаю делать игру: два управления

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

Вот как это наглядно можно увидеть.

Игра продолжает развиваться. Далее - будет.
3375
+1 Оставить Мнение Подробнее 23 Апреля 2013
Стрелочки и новый экран смерти

Теперь это полноценный игровой процесс. Игра теперь функционирует в режиме мультитач. Зажав стрелочку, можно идти вперед, и одновременно управлять поворотом камеры главного героя как было раньше и прыжками.


А также добавлены звуки:
  • вы погибли
  • прыжок
  • подбирание яда
  • когда уровень пройден
3176
0 Оставить Мнение Подробнее 21 Апреля 2013
Лава и прыжки (Double Tap или Двойной клик)

Теперь поиграем. Геймплей кстати стал гораздо интереснее.



Сделать это оказалось не так и сложно, написан новый namespace с названием - trap, что в переводе означает ловушка, в нем были созданы отображения LeftTrap, RightTrap, BackTrap, FrontTrap и FloorTrap, для рисования каждой из сторон ловушки: потолка, правой стены, левой стены, передней стены, задней стены и пола или лавы, а рисовать мы их собираемся по определенному алгоритму: так же как и стены - у собратов стен, ловушек (объектов которые соприкасаются с друг другом) мы не рисуем соприкасающиеся грани, поэтому мы достигаем эффекта, что лава есть настраиваемый объект относительно координат на которых она находится и рисуется она тоже относительно друг относительно друга. С лавой мы закончили, а теперь прыжок! Как сделать прыжок в игре? Ответ прост и напрашиваться сам: делаем его на DoubleTap - т. е. на двойной клик. Для этого гуглим как делается двойной клик на java android. Делается он вот так:

/* Double Tap / Двойной клик */

/* считаем количество кликов на промежуток времени */
private int clickCount = 0;
/* засекаем время с начала первого клика */
private long startTime;
/* высчитываем общее время */
private long duration;
/* время константа за которое должен быть осуществлен двойной клик */
private final static int MAX_DURATION = 500;

/* Обработчик в котором искусственно будет отслеживаться двойной клик есть OnTouchEvent */
@Override
public boolean onTouchEvent(MotionEvent event) {
long time = System.currentTimeMillis() - startTime;
duration= duration + time;
if(clickCount == 2)
{
if(duration <= MAX_DURATION)
{
// Опа, а здесь у нас событие двойного клика!
}
clickCount = 0;
duration = 0;
}
}


А теперь эмулируем прыжок:

Берем sin (синус), выставляем его в 180 градусов, и при двойном клике увеличиваем его угол и (ВНИМАНИЕ) прибавляем его к Y координате нашего героя, так будет сэмулировано, что главный герой, из низкого положения проходит дугу по траектории, или якобы прыгает.

Логика - далее:

На момент прыжка мы не учитываем координаты лавы при перемещении, в момент когда дуга завершилась, мы их начинаем учитывать, т. е. если главный герой попал в лаву - рестарт уровня.
2862
+1 Оставить Мнение Подробнее 19 Апреля 2013
Алмазы убивают и рестарт уровня

А также обработка прохождения уровня!

Новые фотки прямо с устройства:

2950
0 Оставить Мнение Подробнее 14 Апреля 2013
Применение оптимизаций.. Туман, а также НЕ ВСЯ миникарта

Миникарта рисуется относительно положения нашего персонажа.



Как и говорил, что за туманом ничего не рисуется.
2979
+1 Оставить Мнение Подробнее 11 Апреля 2013
К недавней статье об оптимизациях в играх

Чтобы еще больше улучшить процесс, и как следствие ускорить игру, пришла в голову следующая мысль: убирать с отрисовки все что за спиной в игре, или то чего я не вижу. Идея гениальная и не мудреная. В том же майнкрафт, уверен. разработчики применили именно это. Т. е. - игрок повернул голову, отображаем все, а сзади пусто, так и с любым углом куда смотрит ГГ. Решается это с помощью формул векторной геометрии, источник я нашел тут (http://brainstream-dev.blogspot.com/2010/09/blog-post.html), и применил его:


После этого поставил ограничения на угол поворота, т. к. юзер смотря через низ видит пустоту сзади. Ограничения поворота - 90 град по вертикали. Далее на этом не все остановилось. Карта тоже может быть достаточно огромная, поэтому используем простую формулу Пифагора, и опять же выбираем расстояние стен и алмазов ближайших к игроку по какому-нибудь радиусу, скажем 15 кубиков, но: опять возникла проблема - есть на карте участки которые не имеют стен и они достаточно далекие с точки зрения горизонта обзора. Поэтому на тех местах радиус отрисовки показывает пустоту. Как быть? Что делать? Здесь уже обратимся к помощи OpenGL и такому свойству как туман (fog), на дальнее расстояние мы будем применять его, чтобы осуществлялось сглаживание от видимой части к невидимой. На OpenGL это делается следующим образом:

                gl.glFogf(GL10.GL_FOG_MODE, GL10.GL_LINEAR);
                gl.glFogf(GL10.GL_FOG_START, 10.0f);
                gl.glFogf(GL10.GL_FOG_END, 16.0f);
                float fogColor[] = {0.8f, 0.8f, 0.8f, 1.0f};

                // задали серый цвет тумана, пусть будет серым

                ByteBuffer ibb = ByteBuffer.allocateDirect(fogColor.length * 4);
                ibb.order(ByteOrder.nativeOrder());
                FloatBuffer indexBuffer = ibb.asFloatBuffer();
                indexBuffer.put(fogColor);
                indexBuffer.position(0);
                gl.glFogfv(GL10.GL_FOG_COLOR, indexBuffer);
                gl.glEnable(GL10.GL_FOG);


НО: надо так же и задать серый цвет для пустоты на сцене.

                gl.glClearColor(0.8f, 0.8f, 0.8f, 1.0f);  

                // те же значения что и в тумане

И сделать это нужно в методы onSurfaceCreated(GL10 gl, EGLConfig config) когда сцена GLSurfaceView будет инициализирована. К тому что не нужно задавать это в onDrawFrame(GL10 gl), т. к. каждый раз будут выполнятся ненужные повторения  при обработке кода. Вот и все - туман подключен.
Да, мы жертвуем обзором в какой-то степени, НО у нас появилась возможность рисовать бесконечные карты, потому что, мы остались не привязаны к ее масштабам. Все теперь вычисляется от положения ГГ.

Итого: 

для игры применено 2 формулы для прикладного вычисления
  1. с какой стороны от прямой лежит точка.
  2. расстояние между двумя точками.
2767
0 Оставить Мнение Подробнее 11 Апреля 2013
Миникарта в игре Лабиринт и Кровавый режим

Появилась миникарта:


Кровавый режим:


Картинки кликабельны.
2772
0 Оставить Мнение Подробнее 11 Апреля 2013
Оптимизация игры.. практика и немного теории.

Можно использовать три метода оптимизации игры:
  1. Улучшать алгортимы.
  2. Кэшировать данные.
  3. Показывать в игре ровно столько примитивов, сколько позволяет ее нормальная работа или урезание количества объектов на сцене.
Начнем с принципа построения карты в игре Лабиринт. Карта строилась размещением одинаковых элементов - стен по точкам где они должны были располагаться. Элементы - стены, состоят из 6 граней. Первая оптимизация для игры: убрать верхнюю грань - потолок, и нижнюю (пол) для стен, т. к. они не будут видны. Убрали. Что дальше? Дальше интереснее - будем считать что надо показывать только те грани которые видит пользователь в игре. Итого, расположив бок о бок две стенки, мы избавляемся от 2-ух граней в которых они соприкасаются. Немного, но и на том неплохо. Здесь уже алгоритм сложнее, но не на много: при инициализации карты мы будем запоминать какую грань показывать. Для этого просто берем и исходя из каждой стены проверяем ее соседей. Если стена есть рядом, мы запоминаем направление и образно помним что в этой области грани не будет, и так с каждой стенкой. Кому-то может показаться процесс такой модификации скучным, но как по мне, он совсем не скучный, а очень интересный, поскольку мы решаем одновременно две задачи: кэширования настоящей карты и удалением лишних графических примитивов со сцены. Даже наоборот, такая задача, должна подогреть интерес к разработке. В чем заключается кэширование? Кэширование заключается в том, что ОДИН раз, при загрузке, мы записываем в массив массив реальных граней, которые видит пользователь, а потом мы просто раз за разом их считываем, а не просчитываем заново. Экспериментально было выявлено, что смартфон отлично держит карту - 12x12, больше - уже появляются проблемы с производительностью, поэтому на будущее, будем делать двери, которые будут загружать новые уровни. Так у мы не будем каждый раз рисовать ВЕСЬ лабиринт, а только участки на которых мы находимся. В принципе это все.

Далее - будет.
2797
0 Оставить Мнение Подробнее 11 Апреля 2013
В предыдущем посте: который был ЗДЕСЬ под названием "Делаю игру Лабиринт" я делал игру, но решил остановится и выучить самые технологичные фреймворки для работы с OpenGL. Попытался использовать для своих целей фреймворк min3D. Про него на данный момент мало информации в интернете. Мало человек получается запустить его на своем Eclipse или IDE для работы с Android. Он загружается с ошибками. Eclipse выдает нам ошибку вроде "can't load folders 'src' is duplicate". Я нашел как решить эту проблему в лоб, без применения каких-либо замысловатых операций, настроек. В архиве min3D (скачанного с использованием svn ССЫЛКА), мы находим 2 папки: собственно папку с примерами min3dSampleProject1, и фреймворк в папочке min3d где находится src. Чтобы указанная проблема с компиляцией выше исчезла: берем внутренности "min3d" и перекладываем в "min3dSampleProject1/src/", мы получим следующую директорию:


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

А теперь посмотрим что min3D позволяет, или по крайней мере я нашел интересным:

1. Работа акселерометром. Наглядный пример.


2. 3D поверх лайаута.


3. Поддержка целого комплекса *.3ds, *.obj, *.md2 (С АНИМАЦИЯМИ О_О) файлов с текстурами.


4. Наличием простых примитивов: куб, сфера, прямоугольник, торус.


5. 3D в лайауте отлично взаимодействует.


Итак буду доделывать Лабиринт теперь на min3D с полной оптимизацией и новым функционалом:


Текущая версия игры:
  1. Добавлен обход коллизий со стенами, т. е. когда врезаешься продолжаешь идти но вдоль стенки.
  2. Оптимизирован немного объект стены. Вырезаны пол и потолок как вершины - меньше отрисовывать поверхностей. Они все равно невидимы, но требуют ресурсы.
  3. Как развлечение - поменял текстуры.

Далее - будет.
2673
0 Оставить Мнение Подробнее 11 Апреля 2013
О разработчиках и программистах

В хорошем геймдеве много сплетено - и математика и алгоритмы и низкий уровень и архитектура т. д. так что оттуда выходят достаточно вменяемые специалисты, а не люди с Java или Энтерпрайз головного мозга, которые ничего кроме как добавить прокладкой между СУБД(или веб/формо шлепства) не умеют...
2632
0 Оставить Мнение Подробнее 11 Апреля 2013
Делаю игру лабиринт на андроиде

Совсем недавно от кризиса разработки и недостатка новых идей, случайно, я начал заниматься андроидом. С установкой и IDE долго мучатся не пришлось (выбрал Eclipse, хотя многие уже переходят на IDEA), но попыхтеть понадобилось. Все это я делал от безысходности и желания хоть как-нибудь восстановить свои способности к изучению чего-нибудь нового. Как оказалось, андроид платформу, можно освоить за 3 дня, чтобы прийти к такому состоянию:


Из перечисленного на картинке удалось:

  1. загружать карту из файла assets. Работать с файлами. Рисовать карту.

  2. Перемещаться в 3D перемещая палец по экрану смартфона.

  3. Отрисовывать разные текстуры для потолка, пола.

  4. При клике по экрану, наш герой, перемещается вперед.

  5. Обработка коллизии - нельзя ходить сквозь стены.


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

На следующий день, день 3 было изучено как загружать произвольные модели используя файлы моделей типа obj. Добыт obj загрузчик и вставлен в код как отдельная библиотека. Благодаря ей получилось создавать примитивы как icosahedron доступные в простом opengl на C++, на андроиде нас этой радости лишили. Когда происходят коллизии со стенками за 5 минут используя конструкцию:

private MediaPlayer mp;
mp = MediaPlayer.create(this.context, R.raw.knok);
mp.start();

удалось проигрывать любые звуки.

Ну и в конце нас ожидало вот это:

добавили алмазы, когда мы подбираем их - проигрываются звуки.

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

Далее - будет.