вторник, 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