Навигация
Поддержать материально
Steam Greenlight

Логотипы
Медальки
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Темы форума
WoL
22.04.2024
 Darthman
185 - RPG
9.02.2024
 Vaskrol
В каком банке открыт…
24.01.2024
 Darthman
185 - ?
30.12.2023
 Mefistofel
TESTAMENT - Тактичес…
15.11.2023
 KregHek
RES - Движок для пик…
27.09.2023
 rimush
177 - One Button Str…
20.09.2023
 VoroneTZ
JS 13k contest
13.09.2023
 Mefistofel
184 - Arcade II
14.08.2023
 tiger1025
184 - ?
14.07.2023
 Kaps
Сейчас на сайте
Гостей: 1
На сайте нет зарегистрированных пользователей

Пользователей: 1,789
новичок: NickName
Обсуждение «144 - Minimal Shooter»
Страница 5 из 7 << < 2 3 4 5 6 7 >
DRON
Avatar пользователя

Опубликовано 11.07.2017 09:42 (7 лет назад)    #
Dan написал:
DRON, уже продление дали, вливайся;)

Я имел неосторожность удалить все что сделал :( Сейчас совсем с нуля слишком хардкорно начинать, старый я уже по ночам кодить :)
cdmlex
Avatar пользователя

Опубликовано 12.07.2017 07:55 (7 лет назад)    #
Добавил немного мозгам врагу
Разукрасил огонь
dzanis
Avatar пользователя

Опубликовано 12.07.2017 17:41 (7 лет назад)    #
cdmlex, как? Box2D может? У меня все кубики в одно месиво собираются.Почитал,надо нормали использовать,для нормального скольжения.Это вобще сложна.
cdmlex
Avatar пользователя

Опубликовано 12.07.2017 18:10 (7 лет назад)    #
Нет, не Box2D.
Такой механизм скольжения давно уже реализовывал в разных своих играх (и в 3д и не только), суть в том, чтобы проверять сперва для смещения по всем осям, а потом уже по каждой отдельно
Если кратко, то:
Флаг_коллизия_X = ложь;
Флаг_коллизия_Y = ложь;

Новая_точка = Старая_точка + Вектор_движения
Если (Проверка_коллизии_для (Новая_точка.X, Новая_точка.Y)) то {
Если (Проверка_коллизии_для (Новая_точка.X, Старая_точка.Y)) то {
Новая_точка.X = Старая_точка.X;
Флаг_коллизия_X = истина;
}
Если (Проверка_коллизии_для (Старая_точка.X, Новая_точка.Y)) то {
Новая_точка.Y = Старая_точка.Y;
Флаг_коллизия_Y = истина;
}
Если НЕ Флаг_коллизия_X и НЕ Флаг_коллизия_Y то
//Персонаж уперся в ребро куба
Новая_точка = Старая_точка;
}


функция "Проверка_коллизии_для" у меня наличие столкновения со стенками и с другими персонажами.
Можно еще добавить при обнаружении столкновения небольшое отталкивание в противоположную сторону, чтобы объекты пружинились.

Еще как вариант, можно двигать объекты а потом проверять их все на пересечении и расталкивать в разные стороны при возможности, но тогда такую проверку желательно прогонять несколько раз, что мне кажется более затратным по ресурсам, при отсутствии подвижных объектов (посмотри мою игру с конкурса 133 "Stealth cat", там есть эта реализация)

А противники у меня пока просто двигаются в направлении игрока:
Направление_Врага = Точка_Игрока - Точка_Врага;
Направление_Врага = Направление_Врага / Направление_Врага.Длинна_вектора;
Вектор_движения = Направление_Врага * Скорость_Врага ;
dzanis
Avatar пользователя

Опубликовано 12.07.2017 19:07 (7 лет назад)    #
cdmlex, понятно,если столкновение то возвращает струю позицию.Но зачем псевдокод,глаза сломалься читать. Пытался как раз таки расталкивать в разные стороны,но всё слиплось в кучу .Передохнул ,потом вернулся и оказалось что пол размера было.
Вот код расталкивания
if(one.intersect(two))
{
float dx = one.position.x - two.position.x;
float dy = one.position.y - two.position.y;
float dist = (float) sqrt(dx * dx + dy * dy);
float size = one.size + two.size;
float push = (( (size - dist) * 20.f ) / dist) ;//расчёт толчка , 20 это скорость движения,лучше если будет не меньше скорости сущности
one.position.x += (dx * push) * deltaTime;
one.position.z += (dy * push) * deltaTime;
}

В общем нормально работает,можно через толпу пробежать,пропускают.
Архив скачал,поиграю и посмотрю код :)
Dan
Avatar пользователя

Опубликовано 12.07.2017 22:30 (7 лет назад)    #
уже весело получается=)
cdmlex
Avatar пользователя

Опубликовано 13.07.2017 06:20 (7 лет назад)    #
Добавил эффекты горения, брызги и лужи крови
ZblCoder
Главный Говнюк
Avatar пользователя

Опубликовано 13.07.2017 08:04 (7 лет назад)    #
cdmlex написал:
Добавил эффекты горения, брызги и лужи крови

Выходит здорово, но стоит добавить патрулирование врагов, их атаку и хождение к игроку по видимому контакту. Если ты ушел за стенку, он должен идти туда где тебя видел последний раз и если там опять тебя нет, вернуться )

редакция от ZblCoder, 13.07.2017 08:04

cdmlex
Avatar пользователя

Опубликовано 13.07.2017 13:08 (7 лет назад)    #
ZblCoder
Ну я пока ии и не делал еще толком.
Пока что при видимом контакт враги только стреляют. Хочу добавить поиск пути, и сделать врагов-командиров-телепатов, которые всегда будут знать, где игрок и идти к нему, остальный враги, находясь в зоне действия и видя командира будут идти за ним.
Стратегия игрока - вывести из игры сперва командиров, пока они не успели собрать вокруг себя большой отряд.
Mefistofel
Инженер‑космогоник
Avatar пользователя

Опубликовано 14.07.2017 08:25 (7 лет назад)    #
Ну что, у кого как успехи?
Несмотря на неделю времени Я чет фейлюсь (
CEight
Avatar пользователя

Опубликовано 14.07.2017 09:01 (7 лет назад)    #
Я в минусе. Но игру, попытаюсь доделать.
KEFIR
Avatar пользователя

Опубликовано 14.07.2017 12:12 (7 лет назад)    #
У меня всё очень плохо :) 3 дня размышлял использовать ли box2d или самому пилить коллизии. Да, за это время можно было реализовать и то и другое несколько раз. Не знаю в чем дело :) Таймер пока еще дает надежду что я что-то сделаю, но надежда тает на глазах. Пока всё вот так. Да, без коллизий все еще :D

dzanis
Avatar пользователя

Опубликовано 14.07.2017 14:37 (7 лет назад)    #
KEFIR написал:
3 дня размышлял использовать ли box2d или самому пилить коллизии.


Поделюсь как у меня сделана проверка коллизии
class Entity{	
vec2 min , max;
vec2 size;
bool intersect(Entity e)
{
if(size.x <= 0 || size.y <= 0 || e.size.x <= 0 || e.size.y <= 0)
{
//trow для проверки пересечения должен быть установлен размер
return false;
}
min = position - size;
max = position + size;
e.min = e.position - e.size;
e.max = e.position + e.size;
if ((max.x < e.min.x) || (min.x > e.max.x) ||
(max.y < e.min.y) || (min.y > e.max.y) )
{
return false;// outside
}
if ((min.x <= e.min.x) && (max.x >= e.max.x) &&
(min.y <= e.min.y) && (max.y >= e.max.y) )
{
return true;//inside
}
return true;
}
};
}

редакция от dzanis, 14.07.2017 14:38

Darthman
Древний организм
Avatar пользователя

Опубликовано 14.07.2017 15:08 (7 лет назад)    #
dzanis, а какой смысл проверять дважды. У тебя условие на НЕПОПАДАНИЕ, иначе ты проверяешь еще раз тоже самое на попадание. Если он не снаружи, то внутри, логично же.
Darthman
Древний организм
Avatar пользователя

Опубликовано 14.07.2017 15:10 (7 лет назад)    #
Не знаю на чем ты пишешь, но похоже....
return !(max.x < e.min.x || min.x > e.max.x || max.y < e.min.y || min.y > e.max.y)
dzanis
Avatar пользователя

Опубликовано 14.07.2017 15:38 (7 лет назад)    #
Darthman написал:
dzanis, а какой смысл проверять дважды. У тебя условие на НЕПОПАДАНИЕ, иначе ты проверяешь еще раз тоже самое на попадание. Если он не снаружи, то внутри, логично же.

Вот такой я копипастер ахах. Но дело в том ,что если он не снаружи,то не обязательно он может быть внутри,а может оказаться скраю,т.е прикоснуться слегка.Вот такой каламбур.
Darthman
Древний организм
Avatar пользователя

Опубликовано 14.07.2017 15:44 (7 лет назад)    #
А, всё. Уже туплю под конец рабочего дня. Да, хорошо.
Dan
Avatar пользователя

Опубликовано 14.07.2017 17:30 (7 лет назад)    #
function G2RectVsRect(const r0, r1: TG2Rect; var Resp: TG2Vec2): Boolean;
var dx0, dx1, dy0, dy1, dy, dx: TG2Float;
begin
Result := False;
dx0 := r0.r - r1.l; dx1 := r1.r - r0.l;
if (dx0 < 0) or (dx1 < 0) then Exit;
dy0 := r0.b - r1.t; dy1 := r1.b - r0.t;
if (dy0 < 0) or (dy1 < 0) then Exit;
Result := True;
if dx0 < dx1 then dx := dx0 else dx := dx1;
if dy0 < dy1 then dy := dy0 else dy := dy1;
if dx < dy then
begin
Resp.y := 0;
if dx0 < dx1 then
Resp.x := dx0
else
Resp.x := -dx1;
end
else
begin
Resp.x := 0;
if dy0 < dy1 then
Resp.y := dy0
else
Resp.y := -dy1;
end;
end;

вроде больше для столкновения прямоугольников и не нужно...
если первый прямоугольник это игрок, а второй это препятствие то сдвигаем игрока на Resp.x/y и готово.

редакция от Dan, 14.07.2017 17:45

KLiM
Avatar пользователя

Опубликовано 15.07.2017 21:33 (7 лет назад)    #
Сделал 4 типа противников
dzanis
Avatar пользователя

Опубликовано 16.07.2017 12:55 (7 лет назад)    #
У меня не получилось сделат задуманное ._. Вид с верху,3d кубы.Смысл продержаться на платформе,до приезда следуюшей.Стреляя по врагам,они уменьшаются,так же как и сам. Дроп с врага увеличивает размер. В обшем думал ешё и шейдер света добавить,и бакгроунд,но тут оказалось что коллизия с платформой багованная,и на вторую не перейти.Устал.. тадам пампам

редакция от dzanis, 16.07.2017 12:56

Страница 5 из 7 << < 2 3 4 5 6 7 >
Перейти на форум:
Конкурсы
Открытые конкурсы:
Активных нет
Недавние конкурсы:
 185 - RPG XII
 184 - Arcade II
 183 - Novel
 182 - RPG XI
 181 - Pixel Craft 128
 Все конкурсы
Случайная игра
Мини-чат
Вам необходимо залогиниться.

Архив чата

25,363,991 уникальных посетителей

Создано на базе русской версии PHP-Fusion copyright © 2003-2006 by Nick Jones.
Released as free software under the terms of the GNU/GPL license.