« Статьи по Андроид »
5613
0
Оставить Мнение
Подробнее
21 Мая 2013
Аля майнкрафт - ломаем стены за пределами карты
Молоточек в нижнем правом углу как бы говорит что делать. Возможно будет возможность строить, в планах добавить разменный алмаз и придумать для него меню размена, к интерфейсу я очень требователен, поэтому все для него будет не скоро. Возможно добавить скрытые комнаты на карте, разменные алмазы - менять на ломание стен, здоровье, а также открытие миникарты.
До:
После:
Молоточек в нижнем правом углу как бы говорит что делать. Возможно будет возможность строить, в планах добавить разменный алмаз и придумать для него меню размена, к интерфейсу я очень требователен, поэтому все для него будет не скоро. Возможно добавить скрытые комнаты на карте, разменные алмазы - менять на ломание стен, здоровье, а также открытие миникарты.
До:
После:
Ответ 1
0
Ответить
Не катит
3383
0
Оставить Мнение
Подробнее
17 Мая 2013
Эмулируем управление "джойстик" (joystick) в игре на Android
В записи предыдущей записи, я ничего не рассказал как удалось мне адаптировать джойстик под свое приложение. Сразу перечислю пару недостатков на перепись которых я не смог найти в виду вычурности и простоты имеющейся реализации:
Пожалуй это весь список недостатков. Достоинства:
Где скачать исходники? Тут.
Это одна из реализаций Anarchy-Widgets. Самое главное: чтобы адаптировать джойстик поменяйте метод measure на:
private int measure(int measureSpec) {
return 110;
}
В записи предыдущей записи, я ничего не рассказал как удалось мне адаптировать джойстик под свое приложение. Сразу перечислю пару недостатков на перепись которых я не смог найти в виду вычурности и простоты имеющейся реализации:
- Джойстик рисуется в Paint
- Нельзя отлавливать мультитач грамотно т. к. события происходят в разных View
Пожалуй это весь список недостатков. Достоинства:
- Автоперемещение при отпускании в первоначальную позицию
- Грамотное разделение по классам
- Джойстик может прекрасно функционировать в любой точке экрана
Где скачать исходники? Тут.
Это одна из реализаций Anarchy-Widgets. Самое главное: чтобы адаптировать джойстик поменяйте метод measure на:
private int measure(int measureSpec) {
return 110;
}
3447
0
Оставить Мнение
Подробнее
15 Мая 2013
Продолжаю делать игру: два управления
В игре теперь присутствует 2 управления.
Вот как это наглядно можно увидеть.
Игра продолжает развиваться. Далее - будет.
В игре теперь присутствует 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 координате нашего героя, так будет сэмулировано, что главный герой, из низкого положения проходит дугу по траектории, или якобы прыгает.
Логика - далее:
На момент прыжка мы не учитываем координаты лавы при перемещении, в момент когда дуга завершилась, мы их начинаем учитывать, т. е. если главный герой попал в лаву - рестарт уровня.
Теперь поиграем. Геймплей кстати стал гораздо интереснее.
Сделать это оказалось не так и сложно, написан новый 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 координате нашего героя, так будет сэмулировано, что главный герой, из низкого положения проходит дугу по траектории, или якобы прыгает.
Логика - далее:
На момент прыжка мы не учитываем координаты лавы при перемещении, в момент когда дуга завершилась, мы их начинаем учитывать, т. е. если главный герой попал в лаву - рестарт уровня.
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 формулы для прикладного вычисления
Чтобы еще больше улучшить процесс, и как следствие ускорить игру, пришла в голову следующая мысль: убирать с отрисовки все что за спиной в игре, или то чего я не вижу. Идея гениальная и не мудреная. В том же майнкрафт, уверен. разработчики применили именно это. Т. е. - игрок повернул голову, отображаем все, а сзади пусто, так и с любым углом куда смотрит ГГ. Решается это с помощью формул векторной геометрии, источник я нашел тут (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 формулы для прикладного вычисления
- с какой стороны от прямой лежит точка.
- расстояние между двумя точками.
2772
0
Оставить Мнение
Подробнее
11 Апреля 2013
Оптимизация игры.. практика и немного теории.
Можно использовать три метода оптимизации игры:
Далее - будет.
Можно использовать три метода оптимизации игры:
- Улучшать алгортимы.
- Кэшировать данные.
- Показывать в игре ровно столько примитивов, сколько позволяет ее нормальная работа или урезание количества объектов на сцене.
Далее - будет.
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 с полной оптимизацией и новым функционалом:
Текущая версия игры:
Далее - будет.
теперь изменяемый проект находится в SampleProject1 где лежит куча примеров.
А теперь посмотрим что min3D позволяет, или по крайней мере я нашел интересным:
1. Работа акселерометром. Наглядный пример.
2. 3D поверх лайаута.
3. Поддержка целого комплекса *.3ds, *.obj, *.md2 (С АНИМАЦИЯМИ О_О) файлов с текстурами.
4. Наличием простых примитивов: куб, сфера, прямоугольник, торус.
5. 3D в лайауте отлично взаимодействует.
Итак буду доделывать Лабиринт теперь на min3D с полной оптимизацией и новым функционалом:
Текущая версия игры:
- Добавлен обход коллизий со стенами, т. е. когда врезаешься продолжаешь идти но вдоль стенки.
- Оптимизирован немного объект стены. Вырезаны пол и потолок как вершины - меньше отрисовывать поверхностей. Они все равно невидимы, но требуют ресурсы.
- Как развлечение - поменял текстуры.
Далее - будет.
2673
0
Оставить Мнение
Подробнее
11 Апреля 2013
О разработчиках и программистах
В хорошем геймдеве много сплетено - и математика и алгоритмы и низкий уровень и архитектура т. д. так что оттуда выходят достаточно вменяемые специалисты, а не люди с Java или Энтерпрайз головного мозга, которые ничего кроме как добавить прокладкой между СУБД(или веб/формо шлепства) не умеют...
В хорошем геймдеве много сплетено - и математика и алгоритмы и низкий уровень и архитектура т. д. так что оттуда выходят достаточно вменяемые специалисты, а не люди с Java или Энтерпрайз головного мозга, которые ничего кроме как добавить прокладкой между СУБД(или веб/формо шлепства) не умеют...
2632
0
Оставить Мнение
Подробнее
11 Апреля 2013
Делаю игру лабиринт на андроиде
Совсем недавно от кризиса разработки и недостатка новых идей, случайно, я начал заниматься андроидом. С установкой и IDE долго мучатся не пришлось (выбрал Eclipse, хотя многие уже переходят на IDEA), но попыхтеть понадобилось. Все это я делал от безысходности и желания хоть как-нибудь восстановить свои способности к изучению чего-нибудь нового. Как оказалось, андроид платформу, можно освоить за 3 дня, чтобы прийти к такому состоянию:
Из перечисленного на картинке удалось:
От своего быстрого освоения сносило крышу, от возможностей которые можно было сделать, хватило бы мощности девайса.
На следующий день, день 3 было изучено как загружать произвольные модели используя файлы моделей типа obj. Добыт obj загрузчик и вставлен в код как отдельная библиотека. Благодаря ей получилось создавать примитивы как icosahedron доступные в простом opengl на C++, на андроиде нас этой радости лишили. Когда происходят коллизии со стенками за 5 минут используя конструкцию:
private MediaPlayer mp;
mp = MediaPlayer.create(this.context, R.raw.knok);
mp.start();
удалось проигрывать любые звуки.
Ну и в конце нас ожидало вот это:
добавили алмазы, когда мы подбираем их - проигрываются звуки.
В целом и полном игру удалось разработать имея 20 часов свободного времени от начала изучения всей платформы андроида. И это далеко не конец. Прототипы и первые наработки можно было сразу загружать на телефон, и работать с ними, и это было несомненным плюсом для настроения и всего процесса разработки и общем и целом. Как платформа, андроид, зарекомендовала себя на отлично.
Далее - будет.
Совсем недавно от кризиса разработки и недостатка новых идей, случайно, я начал заниматься андроидом. С установкой и IDE долго мучатся не пришлось (выбрал Eclipse, хотя многие уже переходят на IDEA), но попыхтеть понадобилось. Все это я делал от безысходности и желания хоть как-нибудь восстановить свои способности к изучению чего-нибудь нового. Как оказалось, андроид платформу, можно освоить за 3 дня, чтобы прийти к такому состоянию:
Из перечисленного на картинке удалось:
- загружать карту из файла assets. Работать с файлами. Рисовать карту.
- Перемещаться в 3D перемещая палец по экрану смартфона.
- Отрисовывать разные текстуры для потолка, пола.
- При клике по экрану, наш герой, перемещается вперед.
- Обработка коллизии - нельзя ходить сквозь стены.
От своего быстрого освоения сносило крышу, от возможностей которые можно было сделать, хватило бы мощности девайса.
На следующий день, день 3 было изучено как загружать произвольные модели используя файлы моделей типа obj. Добыт obj загрузчик и вставлен в код как отдельная библиотека. Благодаря ей получилось создавать примитивы как icosahedron доступные в простом opengl на C++, на андроиде нас этой радости лишили. Когда происходят коллизии со стенками за 5 минут используя конструкцию:
private MediaPlayer mp;
mp = MediaPlayer.create(this.context, R.raw.knok);
mp.start();
удалось проигрывать любые звуки.
Ну и в конце нас ожидало вот это:
добавили алмазы, когда мы подбираем их - проигрываются звуки.
В целом и полном игру удалось разработать имея 20 часов свободного времени от начала изучения всей платформы андроида. И это далеко не конец. Прототипы и первые наработки можно было сразу загружать на телефон, и работать с ними, и это было несомненным плюсом для настроения и всего процесса разработки и общем и целом. Как платформа, андроид, зарекомендовала себя на отлично.
Далее - будет.