вторник, 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 координате нашего героя, так будет сэмулировано, что главный герой, из низкого положения проходит дугу по траектории, или якобы прыгает.
Логика - далее:
На момент прыжка мы не учитываем координаты лавы при перемещении, в момент когда дуга завершилась, мы их начинаем учитывать, т. е. если главный герой попал в лаву - рестарт уровня.
пятница, 19 апреля 2013 г.
Алмазы убивают и рестарт уровня
А также обработка прохождения уровня!
Новые фотки прямо с устройства:
Новые фотки прямо с устройства:
среда, 17 апреля 2013 г.
воскресенье, 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 формулы для прикладного вычисления
- с какой стороны от прямой лежит точка.
- расстояние между двумя точками.
среда, 10 апреля 2013 г.
Новая мода или почему люди уходят от реальности?
Интересное исследование - реальность, в которой мы с Вами сейчас живем, очень отличается от той которая была, скажем, лет 10 назад. Идеалом не стал человек за время фильмов "Рембо", "Вспомнить все", фильмов с Джеки Чаном, и других, я думаю вы понимаете о каких фильмах я говорю. Человек НЕ СТАЛ КУЛЬТОМ сейчас. Современные события демонстрируют нам разве что гонку за нефтью, политизированной ДЕМОКРАТИЕЙ и всеобъемлющей жаждой денег... Всеми. Это удивительно, но мы можем вспомнить время, когда мы совсем не думали о наживе и власти дающей нам жалкой пачкой бумаги, которые могут стать сегодня и увесистой причиной для убийства. Не секрет. Что человеческая жизнь, ничего не стоит, на замену пришли - деньги. Раньше, чтобы расти и развиваться, хватало денди, развития отрасли ЭВМ, космической программы, и культов актеров как Арнольда Шварцнегера, Лесли Нильсена, рок-музыки, где основным участником был человек, и его хорошее творчество.
Сегодня же Голливуд переключился с интересных фильмов, пусть боевиков, на суперменов, которые еще больше уходят от реальности. Мы никогда не станем супергероями. Станем, если будем обращать на нас же внимание, а не на "Железногомать его человека" или других с ними.
Со всего что моделирует дополнительную реальность, хороший разве что "9-ый район". В остальных фильмах, чувствуются только надуманность, и отрешенность.
Сегодня же Голливуд переключился с интересных фильмов, пусть боевиков, на суперменов, которые еще больше уходят от реальности. Мы никогда не станем супергероями. Станем, если будем обращать на нас же внимание, а не на "Железного
Даже Джейсон Стетхем удручает - говорит три слова за фильм. У Сталоне и Чарли Шина и то ХАРАКТЕРНЕЕ роли, чем у молчаливого Стетхема, КОТОРЫЙ МОЛЧА РАЗДАЕТ ЛЮЛЕЙ И УХОДИТ, что уж там - это РАБОТА такая.Мы любим то чего не существует? Железного человека? Да? К чему я собственно веду: пусть снимут фильм про нынешнюю реальность, про бедность, про неудавшуюся историю любви виновником чего, были деньги. Пусть фильмы будут приближеннее к людям, пусть они будут не оптимистическими, не важно, пусть они будут про реальность! И я гарантирую, что они станут культовыми фильмами эпохи! А этого на самом деле нет. Индиана Джонс 4 - про пришельцев, Послезавтра, 2012 - моделирование катастрофы с кучей денег на спецэффекты, Мстители и иже с ними - про супергероев, которых нет, Луна 2012 - про клонирование человека на Луне и его эксплуатацию из-за денег, Солт - про жизнь агента, которая никоем образом не связана жизнью, которой живут 99% населения. И так далее.
Со всего что моделирует дополнительную реальность, хороший разве что "9-ый район". В остальных фильмах, чувствуются только надуманность, и отрешенность.
вторник, 9 апреля 2013 г.
Анекдоты (364 стр) / Форум / Флейм / GameDev.ru — Разработка игр
ЭКСТРЕННАЯ НОВОСТЬ! Страшным неурожаем Обернулось зависание сайта "Одноклассники" 5 апреля 2013 года. У десятков тысяч пользователей на ферме завяли помидоры! Старожилы утверждают, что такого они не помнят с 1933 года!
Источник: http://www.gamedev.ru/flame/forum/?id=11553&page=364
Источник: http://www.gamedev.ru/flame/forum/?id=11553&page=364
воскресенье, 7 апреля 2013 г.
пятница, 5 апреля 2013 г.
Оптимизация игры.. практика и немного теории.
Можно использовать три метода оптимизации игры:
- Улучшать алгортимы.
- Кэшировать данные.
- Показывать в игре ровно столько примитивов, сколько позволяет ее нормальная работа или урезание количества объектов на сцене.
Начнем с принципа построения карты в игре Лабиринт. Карта строилась размещением одинаковых элементов - стен по точкам где они должны были располагаться. Элементы - стены, состоят из 6 граней. Первая оптимизация для игры: убрать верхнюю грань - потолок, и нижнюю (пол) для стен, т. к. они не будут видны. Убрали. Что дальше? Дальше интереснее - будем считать что надо показывать только те грани которые видит пользователь в игре. Итого, расположив бок о бок две стенки, мы избавляемся от 2-ух граней в которых они соприкасаются. Немного, но и на том неплохо. Здесь уже алгоритм сложнее, но не на много: при инициализации карты мы будем запоминать какую грань показывать. Для этого просто берем и исходя из каждой стены проверяем ее соседей. Если стена есть рядом, мы запоминаем направление и образно помним что в этой области грани не будет, и так с каждой стенкой. Кому-то может показаться процесс такой модификации скучным, но как по мне, он совсем не скучный, а очень интересный, поскольку мы решаем одновременно две задачи: кэширования настоящей карты и удалением лишних графических примитивов со сцены. Даже наоборот, такая задача, должна подогреть интерес к разработке. В чем заключается кэширование? Кэширование заключается в том, что ОДИН раз, при загрузке, мы записываем в массив массив реальных граней, которые видит пользователь, а потом мы просто раз за разом их считываем, а не просчитываем заново. Экспериментально было выявлено, что смартфон отлично держит карту - 12x12, больше - уже появляются проблемы с производительностью, поэтому на будущее, будем делать двери, которые будут загружать новые уровни. Так у мы не будем каждый раз рисовать ВЕСЬ лабиринт, а только участки на которых мы находимся. В принципе это все.
Далее - будет.
вторник, 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/
Подписаться на:
Сообщения (Atom)