Текущий архив: 2007.10.07;
Скачать: CL | DM;
Вниз
2Д исходник Найти похожие ветки
← →
KiberKot © (2006-04-05 19:49) [40]Чесно говоря у меня щас нету времени основательно учить математику. Я щас сдаю диплом, и делаю на него эту стрелялку, здать мне его надо завтра :)
Щас я пытаюсь по быстрому переделать прогу из книги "DirectX графика в проектах Delphi. Щас мне надо что нибудь показать, что бы отцепились, типо 50% игры, а потом уже займусь основательно. Всегда хотел игры делать.
Так вот, может есть способ полегче, а то что то не очень понятно, как с этим работать. А я потом буду разберать то что ты предлагаеш.
← →
XProger © (2006-04-05 20:29) [41]KiberKot, больно стукни этого "кое кто" ибо играл он в Need For Kill в которой и 50% того, что в нашей Time For Kill нету...
"Всегда хотел игры делать."..."здать мне его надо завтра" ну зачем же надо было "хотеть" до крайнего срока? ;)
← →
Cash © (2006-04-05 20:35) [42]Хм, если надо простые хаотические движения, то нет ничего лучше
генератора случайных чисел! Random так сказать рулит! :)
Если у тебя есть момент поворота объекта на определенный угол,
то делай просто: один раз в секунду или в милли- микросекунду или в
тик, запускай примрно такой генератор:
Изменить угол поворота на (+/-)random(...) градусов;
можно перемещаться:=(random(...)=...);
Или что нибудь в этом духе. Прояви свое творчесое начало.
Изобрети "динаму". И с ее помощью задинамь, что это есть AI! :)
А там уж в полную силу за материал и писать свой AI-шник!
← →
KiberKot © (2006-04-05 21:14) [43]
> KiberKot, больно стукни этого "кое кто" ибо играл он в Need
> For Kill в которой и 50% того, что в нашей Time For Kill
> нету...
Да забей на всех, игра реальная и два года потрачено не зря. А этот кое кто, говорит что игра не плохая, а просто не верит что ее можно написать (или что то типо таго)
> "Всегда хотел игры делать."..."здать мне его надо завтра"
> ну зачем же надо было "хотеть" до крайнего срока? ;)
Просто затянул курсовую по VBA которуя , во первых не хотелось делать, во вторых у нас не одной пары в этом семестре небыло, на всех парах перней страдали, так что я вобщем и не знал как ее делать, но всетаки добил и сам написал БД.
> Cash
Да нет у меня никаких углов, кроме стрельбы побокам, в верх, низ и под углом 45 градусов.
Боты будут появлятбся после открытия определенных участков карты, а дальше что нибудь делать (наверно буду проверять растояние между героем и ботом, и исходя из этого, бот будет отбегать или подходить ближе).
← →
Cash © (2006-04-06 09:04) [44]KiberKot © (05.04.06 21:14) [43]:
А перемещаются боты как? То есть только в 4 стороны (вверх, вниз, влево
и вправо)?
Если так, то и сюда можно прикрутить угол поворота. Так просто легче
поворачивать бота.
Конечно, следует проверять близость плеера к ботам, а каждый бот пусть
решает переть к плееру или от него. Да да, все верно!
Во! у тебя же на карте есть всякие препятствия, и наверняк они где нибудь
в виде матрицы записаны. Так заставь бота просчитывать свой маршрут с
учетом этой карты препятствий. Такую вещь можно сделать с
использованием While цыкла:
while not((WpX=Ex)and(WpY=Ey)) do begin
Изменяем WpX и WpY на те, что поближе к плееру;
Проверяем, нет ли препятствия по этим координатам;
Если есть, то приближаем к боту самую близкую из WpX и WpY координат;
Записываем эти координаты в очередь маршрута;
end;
Это так, набросок. На практике там еще куча наворотов.
Ex и Ey - это положения плеера в этой матрице препятствий.
WpX и WpY - это положение осматриваемой ячейки матрицы на предмет
препятствий и, если оных нет, точка маршрута.
Тем самым бот прокладывает свой маршрут и прется на то место, где
заметил плеера.
← →
KiberKot © (2006-04-07 03:27) [45]
> А перемещаются боты как?
Перемещаются влево, право и подпрыгивают. Тоесть прыжок это тоже перемещение, но к проверке пути, я так понимаю его ненужно подключать
> Так заставь бота просчитывать свой маршрут с
> учетом этой карты препятствий
А какой вид будет иметь матрица , ведь двух координат будет не достаточно для описания объекта. В матрицу получается нужно засунуть координаты хотябы двух углов, верхнего левого и правого нижнего, а это чеырех мерный массив
> Во! у тебя же на карте есть всякие препятствия,
На карте у меня еще толком ничего нет, только герой, который стреляет и прыгает и куча врагов, которые бестолково носятся по земле оталкиваясь друг от друга и от границ экрана
← →
Cash © (2006-04-07 09:29) [46]KiberKot © (07.04.06 03:27) [45]:
Sorry men, я что то с дуру подумал, что у тебя вид сверху.
а из:... влево, право и подпрыгивают ...
ясно, что вид сбоку.
Эти выше описанные методы хороши для вида сверху, а тут - не применимы.
Тут наверное за советом надо к Darth XProger-у, по TFK.
← →
KiberKot © (2006-04-08 00:55) [47]
> Cash ©
> я что то с дуру подумал, что у тебя вид сверху.
> а из:... влево, право и подпрыгивают ...
Я в самом начале писал что вид с боку, правда не в описании игры
> Эти выше описанные методы хороши для вида сверху, а тут
> - не применимы.
ну почему не применимы, мне кажется из этого может что то толковое получиться, ну на крайняк, в матрице хранить не координаты обьектов, а действия бота в определенной месности. К примеру: бот идет на встречу к плееру, перед ходом проверяет точку на которой стоит, если данные координаты указаны в матрице, то делает нужные действия. Матрицу представить в виде (x1,y1,x2,y2,действие). Действие обозначить цифрой, к примеру 1-прыгать, 2-прохода нет повяртай назад. Если же по данной области нет особых указаний, смотреть по месту положения пользователя
Ну вот примерно так. Че думаеш про это ?
> Тут наверное за советом надо к Darth XProger-у, по TFK.
XProger, общетвенность (нас двое пока :) ) требует твоего вмешательства в данный вопрос. Помоги плииз
← →
XProger © (2006-04-08 08:06) [48]
// представление карты - блоки (в графике 16х16 каждый)
// 0 - занято, > 0 - свободно
// 1 - пустая клетка
// для бота
// BK_LEFT = 2 - идти влево
// BK_RIGHT = 4 - идти вправо
// BK_JUMP = 8 - прыгать
// BK_CROUCH = 16 - присесть
// BK_STAY = 32 - стоять (ждать врага)
map : array [0..39, 0..29] of WORD;
...
// обработка ввода для расчёта ускорения при движении
with Player, Acc do
begin
// Player.Keys : array
// Player.Acc : TVector
if Keys[Left] then X := -Horiz_Accel;
if Keys[Right] then X := +Horiz_Accel;
if Keys[Up] then Y := -JumpSpeed;
if Keys[Down] then X := X * chouch_k; // замедление в сидячем положении
end;
// если игрок не стоит на земле - на его ускорение действует гравитация
if not map[X div 16, Y div 16] then
Acc.Y := Acc.Y + gravity
else
Acc.Y := 0;
// Расчёт столкновений (кривой)
if map[(X + Acc.X) div 16, Y div 16] > 0 then X := X + Acc.X;
if map[X div 16, (Y + Acc.Y) div 16] > 0 then Y := Y + Acc.X;
Для ботов будет отличаться только взятие состояния клавишk := map[X div 16, Y div 16];
if k > 1 then // если блок-действие для бота
begin
if k and BK_LEFT > 0 then Keys[Left] := True;
if k and BK_RIGHT > 0 then Keys[Right] := True;
if k and BK_JUMP > 0 then Keys[Up] := True;
if k and BK_CROUCH > 0 then Keys[Down] := True;
if k and BK_STAY > 0 then
begin
Keys[Left] := False;
Keys[Right] := False;
Keys[Up] := False;
Keys[Down] := False;
end;
end;
Ошибки в коде не исключены, но общая логика должна быть понятна :)
← →
KiberKot © (2006-04-08 12:54) [49]
> XProger ©
Все понятно, кроме одного, как бот будет узнавать что ему делать, то есть
как будут задаваться флаги
> if k and BK_LEFT > 0 then Keys[Left] := True;
> if k and BK_RIGHT > 0 then Keys[Right] := True;
> if k and BK_JUMP > 0 then Keys[Up] := True;
> if k and BK_CROUCH > 0 then Keys[Down] := True;
> if k and BK_STAY<b/> > 0 then
я так понял, что каждый из них надо будет задать вручную в массиве
> map : array [0..39, 0..29] of WORD;
а если так, то зачем делить экран на пустые и заполненные клетки
← →
XProger © (2006-04-08 13:36) [50]Игровая карта представляется в виде набора клеток занятых и свободных. Помимо этого свободные клетки могут давать некие указания боту.
Задавать вручную или динамически (придумай алгоритм ;)map[i, j] := BK_LEFT or BK_JUMP; - прыгнуль влево
map[i, j] := BK_RIGHT or BK_CROUCH; - ползти гуськом вправо
и т.п.
Вообще, задачу расстановки подобных флагов рациональнее реализовать в редакторе уровней.
← →
KiberKot © (2006-04-08 14:26) [51]Ну в принцепе по игре все понятно, если возникнут какие вопросы, буду
спрашивать. Спасибо всем за помощь, пошол делать мега игру :))
← →
WillRock © (2006-10-19 13:07) [52]Классную дискуссию развели.
Спасибо вам всем за данные ответы..они мне помогут..
У меня остался один тупой вопрос ))
Как проверять столконвения м/у прямоугольником и окружностью? ))
просьба ногами не пинать ))
Просто я ни разу как то этим не занимался )
← →
Shirson © (2006-10-19 14:39) [53]http://www.gamedev.ru/articles/?id=70124
← →
@!!ex © (2006-10-19 19:48) [54]Эх... неуспел поучавствовать... :\
Но все равно вставлю свое ИМХО!
Программер без математики, как свадьба без невесты...
НЕзная математики ниче толвокого не напишеш, тем более в играх.
Страницы: 1 2 вся ветка
Текущий архив: 2007.10.07;
Скачать: CL | DM;
Память: 0.56 MB
Время: 0.036 c