Форум: "Игры";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
ВнизОцените игру - Tank Wars Найти похожие ветки
← →
Servelat (2004-03-08 21:18) [0]Привет всем.
Собственно, зацените игру, пишется помаленьку уже четвертый месяц. Игра по мотивам старых добрых дендевских танков, хотя планируются улучшения. Не буду долго распространятся, а дам ссылку: www.tankwars.land.ru . Жду вашего мнения, сообщения о багах и т.п. Игра еще не закончена, хотя играть можно, скрины есть по ссылке выше.
ЗЫ Женскую половину мастеров (если такая имеется) - с их законным праздником!
← →
Mihey © (2004-03-08 22:12) [1]Сейчас заценим.
← →
TButton © (2004-03-08 22:18) [2]оценил. ниче так игра, тока динамичности не хватает, стены разламываются со второго попадания, танк еле ползает, стреляет тоже... вобщем ничего так игрушка.
← →
Mihey © (2004-03-08 22:31) [3]На DirectX 8.0 for Win 98 не пашет, не знаю, зачем Мелкософт оставил эту версию у себя на сайте.
← →
Servelat (2004-03-08 22:50) [4]>танк еле ползает
Слишком медленно?
FPS должен быть 50, вроде скорость нормальная, если сделать быстрее, то танк будет быстро пересекать всю карту.
По поводу противников: нет ли у кого идей, как они должны ездить? (пока катаются на Random"е).
← →
Mihey © (2004-03-08 23:00) [5]>По поводу противников: нет ли у кого идей, как они должны ездить? (пока катаются на Random"е).
Тактика должна быть. Попробуй сделай wavepoints.
← →
lyeh © (2004-03-09 00:20) [6]2 Mihey ©
> Тактика должна быть. Попробуй сделай wavepoints.
Ты имел ввиду waypoints?
← →
Servelat (2004-03-09 07:51) [7]>Тактика должна быть. Попробуй сделай wavepoints.
Это для каждой карты надо свои точки делать, по которым танк должен ездить? А при создании новых карт юзеру придется их самому придумавать? Я думаю, так не стоит делать.
← →
cyborg © (2004-03-09 09:09) [8]Не грузится сайт у меня.
← →
Witcher © (2004-03-09 12:21) [9]А где ее взять-то?
Либо я после праздников торможу, либо....
← →
cyborg © (2004-03-09 12:22) [10]Весьма неплохо, но лучше бы ты музыку туда не включал ;).
Дивижение оставь рендомные, но с уклоном вниз и вбок, вверх пусть реже ездит и не так часто меняй путь.
← →
Witcher © (2004-03-09 12:22) [11]Ага, нашел... Точно торможу после праздников :-)
← →
Servelat (2004-03-09 14:27) [12]>Дивижение оставь рендомные, но с уклоном вниз и вбок, вверх пусть реже ездит и не так часто меняй путь.
В принципе, и штаб, и танки могут появляться в любом месте карты (в редакторе карт нажав кнопку от 6 до 9 можно двигать танки, нажав "f" - штаб), поэтому необязательно вниз и вбок. Пока он вверх ездит действительно реже, но если врагов поместить внизу, а штаб и игрока сверху - будет не очень хорошо.
>Весьма неплохо, но лучше бы ты музыку туда не включал ;).
Неужели так плохо? Музыку можно отключить через файл data\config.cfg.
← →
tim © (2004-03-09 15:02) [13]Игру пока не смотрел, но фраза
"FPS должен быть 50..."
меня смутила, может сделать привязку к таймеру?
Когда-то я занимался написанием игрушки. У меня там вертолет летал с определенной скоростью, а FPS зависил от производительности машины. Если есть вопросы, можешь обратиться в мыло.
← →
cyborg © (2004-03-09 15:17) [14]
> >Весьма неплохо, но лучше бы ты музыку туда не включал ;).
> Неужели так плохо?
Это зависит какая звуковая, большинство обычных очень плохо играют MIDI, сейчас поставил драйвер ямахи, стало более менее хорошо играть, а так один ужас.
← →
Servelat (2004-03-09 15:34) [15]>Игру пока не смотрел, но фраза
"FPS должен быть 50..."
меня смутила
Ну это конечно не очень хорошо, по идее надо было сделать так: два таймера, один - с постоянной скоростью, для движения, другой с максимально возможной, для вывода на экран. Но я как-то не придумал, как сделать чтобы один таймер выполнялся ровно 50 раз в секунду, а другой - сколько вытянет видюха. Второй таймер "забивает" первый. Это наверно можно воплотить через потоки с разными приоритетами, но я пока решил не мудрить, а сделать основу игры.
>Если есть вопросы, можешь обратиться в мыло.
Было бы неплохо узнать методы решения этой проблемы.
← →
Mihey © (2004-03-09 15:35) [16]>Это для каждой карты надо свои точки делать, по которым танк должен ездить? А при создании новых карт юзеру придется их самому придумавать? Я думаю, так не стоит делать.
думаю стоит, ты ведь не супермастер, чтобы как в red alert сделать так сразу.
← →
cyborg © (2004-03-09 16:31) [17]Просто смотри в какой стороне от танка штаб, в том направлении и делай приоритет движения.
← →
TButton © (2004-03-09 20:56) [18]не совсем, смотри как далеко штаб и как далеко противник. и дуй к ближайшему.
← →
NailMan © (2004-03-10 00:22) [19]Servelat
Ну это конечно не очень хорошо, по идее надо было сделать так: два таймера, один - с постоянной скоростью, для движения, другой с максимально возможной, для вывода на экран. Но я как-то не придумал, как сделать чтобы один таймер выполнялся ровно 50 раз в секунду, а другой - сколько вытянет видюха. Второй таймер "забивает" первый. Это наверно можно воплотить через потоки с разными приоритетами, но я
Все это чайниковские бредовые идеи, которые не могут быть реализованы так как...с отдельными потоками ты натрахаешься.
Вот тебе пример синхронизации по системному HighPerfomance счетчику(это не голимый gettickcount с его 18.2 Гц):
объявляем переменные:var
TimerResolution : Int64; //Разрешение одной секунды в
//HighPerfomance тиках
TimerMSecResolution : Cardinal;
//Разрешение одной миллисекунды в HighPerfomance тиках
Процедура определения разрешения синхронизатора(ее вызывать только в начале игры):
Procedure CalcHPSyncResolution;
begin
QueryPerformanceCounter(z);
Sleep(1000);
QueryPerformanceCounter(z2);
TimerResolution:=z2 - z;
TimerMSecResolution:= round(TimerResolution / 1000);
end;
Объявляем структуру синхронизатора:TYPE
TSyncronize = packed record
LastHPC : Int64; //Предыдущее значение счетчика
TimeOffset : Cardinal; //Время(в HP тиках) синхро-паузы
CorrMultiplier : Extended; //коэффициент коррекции процесса
End;
У Актера(игрового объекта) есть свойство Sync:TSyncronize; которое является его личным синхронизатором.
Функция задания задержки синхо-события:
Function SetSync(msecs:Cardinal):TSyncronize;
begin
QueryPerformanceCounter(result.LastHPC);
result.TimeOffset:=TimerMSecResolution * msecs;
Result.CorrMultiplier:=1;
end;
Функция проверки синхро-события:Function CheckSync(Var Sync:TSyncronize):boolean;
var tickcount,subtraction:int64;
begin
result:=false;
QueryPerformanceCounter(Tickcount);
subtraction:=tickcount - Sync.LastHPC;
//если наступило время срабатывания, то вычисляем коэффициент,
//и даем добро(заодно и деление на ноль пресекаем).
If subtraction>=Sync.TimeOffset then
begin
If Sync.TimeOffset=0 then Sync.CorrMultiplier:=1 else
Sync.CorrMultiplier:=subtraction / (Sync.TimeOffset);
result:=true;
end;
end;
Метод движка который выполняет обработку игровых объектов и игрока:Procedure TGameEngine.Processing;
var i:integer;
begin
i:=0;
repeat
Actor[i].Processing
until i=TotalActors;
UTPlayer.Processing
end;
Теперь как организован игровой цикл:Procedure TGameEngine.CocpitMode;
var e:integer;
begin
REPEAT
//если вы юзаете формы, то эта строка вам не нужна
if PeekMessage(Msg,Handle,0,0,PM_REMOVE) then begin TranslateMessage(Msg);DispatchMessage(Msg);end;
//читаем данные от игрока
ReadInputCocpitMode;
//обрабатываем все что связано с игровыми объектами
Processing;
//понятно чего делаем
Dev.BeginScene;
Scene.Render(False);
Dev.EndScene;
//даем добро на переключение страниц(D3D) и инкрементируем счетчик фпс-ов
Dev.Present(nil, nil, 0, nil);
Inc(FPSCounter);
//до тех пор пока не произойдет одно из этих событий
UNTIL status.ProcStatus in[STAT_EXITCODE,STAT_RESTART, STAT_SCREENSHOT];
end;
Ну и как собсно использовать персональный синхронизатор:Procedure TActor.Processing;
begin
if CheckSync(Sync) then
BEGIN
...
//что-то делаем важное с актером(скажем задаем ему скорости,
//анимируем его части, проверяем коллизии и т.д.
//например...:
world.ANGV.x:=MoveCaps.YawAngularVelocity * Sync.CorrMultiplier;
world.ANGV.y:=MoveCaps.PitchAngularVelocity * Sync.CorrMultiplier;
world.ANGV.z:=MoveCaps.RollAngularVelocity * Sync.CorrMultiplier;
//Например задаем ему угловые скорости, но с поправкой,
//которая будет корректировать изменения координат
//(скоростей) в случае отклонений заданного времени
//синхро-паузы от фактически прошедшего времени с момента
//создания синхро. Другими словами "растягивать" движение,
//если тачка тормозит, и не допускать черезчур быстрой
//скорости движения при очень быстрой тачке, т.е синхронизировать.
MoveTo; //двигаем наконец-таки актера
Sync:=SetSync(20); //задаем ему задержку в 20 мсек,
//когда он будет в следующий раз
//проводить все вышеперечисленные
//действия.
END;
end;
Таким образом все активные участники сцены(Актеры и Игрок) будут синхронизированы с машинным временем(но е с собой ессно).
Единственное условие(желательное) чтобы Актеры и Игрок начинали свое действие в разное время секунды. Т.е скажем при создании сцены(создании актеров и игрока) им надо задавать в первый раз SetSync в разные моменты текущей секунды времени. Таким образом нагрузка на проц(при обработке актера и игрока) будет более равномерной по времени и не будет возникать лагов(на дохлых тачках в основном это будет хоть как-то заметно невооруженным взглядом).
← →
NailMan © (2004-03-10 00:26) [20]Забыл дописать что в CalcHPSyncResolution
z и z2 - это мусорные int64
← →
Mihey © (2004-03-10 00:45) [21]2 NailMan:
Очень классно! Я похожее делал на уровне синхронизации с событием отрисовки, но не на таком уровне. Спасибо за код.
← →
Servelat © (2004-03-10 15:55) [22]Добавил патч, реализующий интеллект по методу cyborg"а, с уклоном в сторону штаба:
http://www.tankwars.land.ru/patch.exe
>TButton © (09.03.04 20:56) [18]
>не совсем, смотри как далеко штаб и как далеко противник. и дуй к ближайшему.
Тут есть свои ньюансы: как считать расстояние до штаба? если по-прямой, то возможно к штабу ехать намного дольше, чем к игроку (если их разделяет стенка, штаб как-будто рядом, а на самом деле ехать долго). Считать алгоритмом (типа A* ) намного сложнее, и использовать результаты будет менее удобно (большие мучения, а результат вряд ли превзойдет рендом). В общем, еще есть над чем подумать.
>NailMan © (10.03.04 00:22) [19]
Огромное спасибо за способ, попробую его воплотить в ближайшее время.
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2004.07.04;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.04 c