Java-программирование (1-ые посты) 23.09.2015 / 11:59 | | aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| 19Ram84, да, нужен JP-8 и выше. А k810 - JP-7.
__________________
let live |
28.09.2015 / 10:18 | | 19Ram84 Пользователь Сейчас: Offline
Регистрация: 30.08.2015
| Цитата aNNiMON: 19Ram84, да, нужен JP-8 и выше. А k810 - JP-7.Ясно, спасибо. А вот отсюда и напрашивается вопрос, как это реализовать на всех телефонах, а не только с поддержкой чапи? Есть идея сделать что то наподобие католога фс телефона, что то типа закладок, но проблема сделать запуск из закладок прог java, а в самой закладке будет находиться инфа об иконке файла, открываемом им приложении и прочие параметры Но пока конечно, до этого далеко(даже сказать поздно, вспоминая пост про машину времени) |
28.09.2015 / 10:22 | | aNNiMON Супервизор Сейчас: Offline
Имя: Витёк Регистрация: 11.01.2010
| 19Ram84, никак. Абсолютно.
__________________
let live |
28.09.2015 / 10:50 | | 19Ram84 Пользователь Сейчас: Offline
Регистрация: 30.08.2015
| Цитата aNNiMON: 19Ram84, никак. Абсолютно.Жаль Но всё равно, надо бы поискать нестандартные подходы |
4.10.2015 / 18:10 | | nikita488m Пользователь Сейчас: Offline
Имя: Никита Регистрация: 04.10.2015
| Добрый вечер. Есть двигающийся спрайт (игрок), есть TiledLayer. Нужно сделать коллизию (чтобы спрайт не проходил сквозь TiledLayer, а стоял на нём), никак не могу придумать как её сделать. Подскажите пожалуйста, как?
Изменено nikita488m (4.10 / 18:22) (всего 1 раз) |
4.10.2015 / 19:50 | | Banschey Пользователь Сейчас: Offline
Имя: Banschey Откуда: Донецк, Украина Регистрация: 22.03.2015
| nikita488m, Открыть спойлер Закрыть спойлер Не знаю как в java но в с++ я делал так. игроку делал хит бокс(виртуальный прямоугольник в котором находится игрок), объекты тоже были покрыты хитбоксами. В цикле апдейт я проверял по формуле пересечения прямоугольников, хитбокс персонажа пересекся ли с хитбоксом одного из объекта ? Если да то нужно проверить с кокой стороны. Вот тут одно из самых сложных. У меня было два варианта одни простой, мало ресурсоемкий но не надежный или же второй вариант сложный и ресурсо емкий но надежней чем первый. 1.при движении твоего игрока нужно определять в какую сторону он направляется и при столкновении выталкивать его в противоположную сторону то-есть задать ему туже скорость и направление только обратно. 2.тут уже так просто не объяснить, но суть в том что бы определять при инициализации твоего героя и карты с объектами вершины их хитбоксов а именно под каким углом они находятся от своего центра. Получим градусные диапазоны на 4 стороны, от первой вершины до второй это верх, от второй до третей это правая сторона итд... Затем в момент колижина нужно чертить вектор от центра твоего героя к центру объекта с которым он столкнулся и проверять под каким градусом он находится, следовательно мы точней узнаем сторону в которую влетел наш игрок. Но тут есть один нюанс, бывает так что (точней сказать так будет) если у тебя препядствие и твой игрок на него прыгает задивая его только краешком ты попадешь не в тот диапазон градусов и определится боковая сторона а не верхняя. Для этого нужно дополнительно вести вектор от первой и второй вершин тоесть верх фигуры объекта по два вектора к центру игрока и уже сверять дополнительно. тогда всё будет нормально. Но как я и сказал этот вариант сложней и ресурсоемок.
|
4.10.2015 / 20:13 | | Magatino Администратор Сейчас: Offline
Имя: Alexandr Откуда: Где Ленин родился. Simbirsk City Регистрация: 28.01.2011
| nikita488m, Хорошо бы если ты скинул скриншот, а так, вот самое простое: public void move(int dx, int dy)
{
x+=dx;
y+=dy;
if (myHero.collidesWith(myTiledLayer, false))
{
x-=dx;
y-=dy;
}
}
Изменено Magatino (4.10 / 20:15) (всего 2 раза) |
4.10.2015 / 21:03 | | Naik Пользователь Сейчас: Offline
Имя: %name% Регистрация: 14.03.2010
| Banschey, еще нужно учесть что на больших скоростях обьекты смогут пролетать через другие, т.е. за одну итерацию проскочат и пойдут дальше. Чтобы избежать такого, я проверял не хит бокс, а прямоугольник, полученный с координат до движения + хитбокс и после, и тогда отбрасывал назад, на координаты, когда обьекты будут максимально близки.
Но это я делал когда движение только в 4 стороны было, если больше, то прямоугольниками обычными не обойтись, наверное можно через матрицы сделать, универсально.
Изменено Naik (4.10 / 21:06) (всего 1 раз) |
4.10.2015 / 21:55 | | nikita488m Пользователь Сейчас: Offline
Имя: Никита Регистрация: 04.10.2015
| Цитата Magatino: nikita488m, Хорошо бы если ты скинул скриншот, а так, вот самое простое: public void move(int dx, int dy) { x+=dx; y+=dy; if (myHero.collidesWith(myTiledLayer, false)) { x-=dx; y-=dy;
Спасибо, однако сделал немного по другому: if(spritePlayer.collidesWith(tiledLayer, true))
{
spritePlayer.move(-5, 0);
}
Добавил это во все кнопки управления, заменяя значения. Вроде работает
Прикрепленные файлы: N_LJjsu1nBE.jpg (71.83 кб.) Скачано 124 раза |
5.10.2015 / 00:36 | | Banschey Пользователь Сейчас: Offline
Имя: Banschey Откуда: Донецк, Украина Регистрация: 22.03.2015
| Naik, да ты прав. Но есть ещё ощё одно, при сильной нагрузке на цикл можно провалиться и с малой скоростью. Чем больше расчетов тем больше вероятность этого. Можно ещё поступить как box2d, если я не ошибаюсь там ещё проверяется на сколько тело вошло в тело, под каким углом итд.. и можно делать и на этом поправки. Но тут что то зло что то, или производительность в ущерб качеству или качество в ущерб производительности. Недавно работал над игрой, и столкнулся с этой проблемой так что сам подумываю над матрицами. Как доделаю выложу nikita488m, все же используй стразу пример с dx и dy, потому что потом все равно придется, и ко времени привязку делай. |
Всего сообщений: 16875 Фильтровать сообщения Поиск по теме Файлы топика (794)
|