вторник, 23 апреля 2013 г.

Стрелочки и новый экран смерти

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

воскресенье, 21 апреля 2013 г.

Лава и прыжки

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






Сделать это оказалось не так и сложно, написан новый 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 координате  нашего героя, так будет сэмулировано, что главный герой, из низкого положения проходит дугу по траектории, или якобы прыгает.

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

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

воскресенье, 14 апреля 2013 г.

суббота, 13 апреля 2013 г.

четверг, 11 апреля 2013 г.

К недавней статье об оптимизациях в играх

Чтобы еще больше улучшить процесс, и как следствие ускорить игру, пришла в голову следующая мысль: убирать с отрисовки все что за спиной в игре, или то чего я не вижу. Идея гениальная и не мудреная. В том же майнкрафт, уверен. разработчики применили именно это. Т. е. - игрок повернул голову, отображаем все, а сзади пусто, так и с любым углом куда смотрит ГГ. Решается это с помощью формул векторной геометрии, источник я нашел тут (http://coderlife.ru/progr/polozhenie-tochki-otnositelno-pryamoj.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. расстояние между двумя точками.

среда, 10 апреля 2013 г.

Новая мода или почему люди уходят от реальности?

Интересное исследование - реальность, в которой мы с Вами сейчас живем, очень отличается от той которая была, скажем, лет 10 назад. Идеалом не стал человек за время фильмов "Рембо", "Вспомнить все", фильмов с Джеки Чаном, и других, я думаю вы понимаете о каких фильмах я говорю. Человек НЕ СТАЛ КУЛЬТОМ сейчас. Современные события демонстрируют нам разве что гонку за нефтью, политизированной ДЕМОКРАТИЕЙ и всеобъемлющей жаждой денег... Всеми. Это удивительно, но мы можем вспомнить время, когда мы совсем не думали о наживе и власти дающей нам жалкой пачкой бумаги, которые могут стать сегодня и увесистой причиной для убийства. Не секрет. Что человеческая жизнь, ничего не стоит, на замену пришли - деньги. Раньше, чтобы расти и развиваться, хватало денди, развития отрасли ЭВМ, космической программы, и культов актеров как Арнольда Шварцнегера, Лесли Нильсена, рок-музыки, где основным участником был человек, и его хорошее творчество.

Сегодня же Голливуд переключился с интересных фильмов, пусть боевиков, на суперменов, которые еще больше уходят от реальности. Мы никогда не станем супергероями. Станем, если будем обращать на нас же внимание, а не на "Железного мать его человека" или других с ними.
Даже Джейсон Стетхем удручает - говорит три слова за фильм. У Сталоне и Чарли Шина и то ХАРАКТЕРНЕЕ роли, чем у молчаливого Стетхема, КОТОРЫЙ МОЛЧА РАЗДАЕТ ЛЮЛЕЙ И УХОДИТ, что уж там - это РАБОТА такая. 
Мы любим то чего не существует? Железного человека? Да? К чему я собственно веду: пусть снимут фильм про нынешнюю реальность, про бедность, про неудавшуюся историю любви виновником чего, были деньги. Пусть фильмы будут приближеннее к людям, пусть они будут не оптимистическими, не важно, пусть они будут про реальность! И я гарантирую, что они станут культовыми фильмами эпохи! А этого на самом деле нет. Индиана Джонс 4 - про пришельцев, Послезавтра, 2012 - моделирование катастрофы с кучей денег на спецэффекты, Мстители и иже с ними - про супергероев, которых нет, Луна 2012 - про клонирование человека на Луне и его эксплуатацию из-за денег,  Солт - про жизнь агента, которая никоем образом не связана жизнью, которой живут 99% населения. И так далее.

Со всего что моделирует дополнительную реальность, хороший разве что "9-ый район". В остальных фильмах, чувствуются только надуманность, и отрешенность.

вторник, 9 апреля 2013 г.

Анекдоты (364 стр) / Форум / Флейм / GameDev.ru — Разработка игр

ЭКСТРЕННАЯ НОВОСТЬ! Страшным неурожаем Обернулось зависание сайта "Одноклассники" 5 апреля 2013 года. У десятков тысяч пользователей на ферме завяли помидоры! Старожилы утверждают, что такого они не помнят с 1933 года!

Источник: http://www.gamedev.ru/flame/forum/?id=11553&page=364

пятница, 5 апреля 2013 г.

Оптимизация игры.. практика и немного теории.

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

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

Кототред (20 стр) / Форум / Флейм / GameDev.ru — Разработка игр



Источник: http://www.gamedev.ru/flame/forum/?id=167817&page=20

вторник, 2 апреля 2013 г.

Осваиваем min3D фреймворк при работе с android

В предыдущем посте: эта ссылка под названием "Делаю игру Лабиринт" я делал игру, но решил остановится и выучить самые технологичные фреймворки для работы с OpenGL. Попытался использовать для своих целей фреймворк min3D. Про него на данный момент мало информации в интернете. Мало человек получается запустить его на своем Eclipse или IDE для работы с Android. Он загружается с ошибками. Eclipse выдает нам ошибку вроде "can't load folders 'src' is duplicate". Я нашел как решить эту проблему в лоб, без применения каких-либо замысловатых операций, настроек. В архиве min3D (скачанного с использованием svn https://code.google.com/p/min3d/source/checkout), мы находим 2 папки: собственно папку с примерами min3dSampleProject1, и фреймворк в папочке min3d где находится src. Чтобы указанная проблема с компиляцией выше исчезла: берем внутренности "min3d" и перекладываем в "min3dSampleProject1/src/", мы получим следующую директорию:

50 лучших JQuery плагинов на сегодняшний день



50 Amazing jQuery Plugins That You Should Start Using Right Now

Источник: http://tutorialzine.com/2013/04/50-amazing-jquery-plugins/