![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Прошу потестировать cyborgengine2d
cyborg © (2004-09-11 09:35:00)Прошу потестировать на скорость спрайтовый движок cyborgengine2d.dll.
Особенно интересует скорость на старых компьютерах и на плохих видеокарточках (встроенные или старые с 1-4 мегабайтами видеопамяти) с целью узнать минимальные системные требования.
Прошу над графикой не смеяться, она в паинте нарисована :). Игра Танчики.
http://www.cyborghome.ru/download/temp/thanchiki2.rar
230 килобайт.
Требования DirectX7 и выше, виндовс любая 32 битовая, интересно на вин 95 потестить, не знаю заработает ли.
Для максимального FPS запустите noWait.batили саму программу с любым параметром.
В меню нажать Enter для процеса игры. Escape - выход в меню или из программы.
В игре левая кнопка мышки - генерировать карту, правая - взорвать танки противника.
У меня в меню около 1000 FPS, в игре около 600 FPS.
CPU Duron 800, PC133 384Mb., GF FX5200 128 Mb. AGP4x, DirectX9, WinXP
Прошу написать подобные характеристики!
NikeOLD (2004-09-16 17:09:00) [21]Но AV по Alt+F4 это факт.
Устраняй!
cyborg (2004-09-16 14:40:00) [22]
> [52] Micah'GF © (16.09.04 14:33)
Действительно ненормально :), на такой тачке 30 секунд запускаться, подозрения у меня, что ты там чего-то намутил :).
cyborg (2004-09-16 14:37:00) [23]Нарисовал полноценный пример, игра "Мухи", типа той, что на денди была, пуляешь там летающие объекты. В примере: создание и обработка сцен "Меню", "О программе" и "Игра"; анимация объектов и динамическая работа с ними - противник, пули, взрывы. Выстрелы противника делать не стал, лень, хватит выстрелов игрока, противнику также делать, как и игроку, там даже функцию создания пульки противника сделал.
Плюс в библиотеке добавил функции получения контекста устройства поверхности и получение доступа к пикселям поверхности, не проверял как работает, но должно работать, по идее :)
ftp://cyborghome.ru/CyborgEngine2D/CyborgEngine2D.zip
166 килобайт
Для компиляции примеров нужно скопировать файлы: CyborgEngineHeader.pas и cyborgengine2d.dll в папку с примером. Для работы вашей программы нужно помещать в папку программы файл cyborgengine2d.dll.
В архиве есть скомпилированный пример "Мухи" на Дельфи и на Фрипаскале, почувствуйте разницу ;), кроме размера ничем не отличается. Люди переходите на Фрипаскаль! :)
Micah'GF (2004-09-16 14:33:00) [24]- запускалась она у меня несколько длительно ~30сек. Думаю это не нормально.
- сделай чтобы клавиши обрабатывались исключительно. Т.е. в винде у меня назначено несколько комбинаций клавиш, связанных с Ctrl и стрелками, и при нажатии комбинации в игре все просто встает. При попытке переключиться в другую задачу или закрыть по Alt-F4 выдает "Приложение выполнило недопустимую операцию".
- поиграть так и не удалось.
WinXP, p4-2.4, 512, GF4-Ti4200
Darthman (2004-09-15 12:21:00) [25]>>Header-ом обойдёшься :)
Тоже стыдно за свои каляки-маляки? Потому и прячешь, угадал? :)))))
Если по существу:
Помимо функции заменяющей три обычные - можно же сделать дополнительно функции и классы позволяющие быстро все сделать, может быть и с большими ограничениями. Иногда это удобнее.
cyborg (2004-09-15 11:25:00) [26]http://robowarz.cyborghome.ru/
MANGOL (2004-09-15 11:20:00) [27]а шо за RoboWarz?
cyborg (2004-09-15 10:21:00) [28]
> [47] Magikan © (15.09.04 10:19)
Header-ом обойдёшься :)
Нужны исходники - собирай: статьи на моём сайте+исходники RoboWarz+фантазия ;)
Magikan (2004-09-15 10:19:00) [29]Даешь исходники в массы!!!
cyborg (2004-09-15 09:12:00) [30]
> [43] cyborg © (15.09.04 08:52)
> На вывод спрайта влияют поля: X,Y,W,H и SrcRect
Забыл UseScreenOfset ещё в этот список добавить
cyborg (2004-09-15 09:05:00) [31]
> [44] cyborg © (15.09.04 09:02)
Только пока с этим глюки имеются, если спрайт за границу экрана уходит, то размеры меняются :). На данный момент так можно фон на весь экран растягивать.
cyborg (2004-09-15 09:02:00) [32]Кстати, картинки можно растягивать, в третьем примере замените:
//Спрайт мышиного курсора:
SpriteMouse :=CreateSpr(0,0,100,100, SurfaceMouse , nil, 0, false, lDown, false);
SpriteMouse^.W:=200;
SpriteMouse^.H:=200;
и
//Отобразить спрайт мышки:
ShowSprite(SpriteMouse, nil);
cyborg (2004-09-15 08:52:00) [33]
> [41] Колбасьев © (14.09.04 20:41)
> 1. Лучше сделать какой-то универсальный формат хранения спрайтов
Чем BMP не универсальный формат спрайта? Лбой редактор поддерживает этот формат.
По пункту 2 не правильная у тебя мысль, массивы зачем-то прилепить, видимо у тея никогда небыло задачи работать с множеством разных объектов и обрабатывать их. Это не сишные замашки - работать с данными, это рутинная работа программиста на любом языке ;). Если ты этого никогда не использовал, то попробуй поработать так, тебе понравится :).
> 3. ... так как все приходиться делать самому, даже утомительные
> рутинные операции.
Если ты возьмёшся за игру, с движком, у которого всё фиксировано - конкретный формат не дающий тебе ничего лишнего сделать, то через месяц-другой ты начнёшь плеваться, что не можешь сделать того-то и того-то, потому, что у тебя нет возможности использовать объект так, как тебе хочется. У меня же сделано так, что с объектом ты можешь делать всё, что тебе угодно. Единственные поля, которые нельзя трогать (изменять значения) в PSprite это Pred, Next, Chain, DataSize и Data, остальное рули как хочешь. На вывод спрайта влияют поля: X,Y,W,H и SrcRect остальные поля под твоё усмотрение, как хочешь их, так и используй.
Kind (2004-09-14 21:47:00) [34]ATHLON 600; RAM 384; TNT2 16MB
На WIN98 и ХР FPS в меню 550 в игре 427
На WIN2000 FPS равен refresh rate монитора
95 недавно удалил, а в 3.11 пробовать не стал :)
Колбасьев (2004-09-14 20:41:00) [35]
> > [28] Servelat © (13.09.04 18:00)
> Почти всё, что ты написал, там есть :)
> И тайлы и анимации, только это нужно делать ВАМ!
> Если бы я сделал всё в движке, то о движке как таковом небыло
> бы и речи, я ведь не знаю какой формат хранения спрайтов
> вам понадобится и как кадры будут в нём расположены, как
> у меня - кадры горизонтально и направления вертикально (танк
> например так в игре сделан) или как-то по другому.
Хочу заметить, что DirectX например поддерживает .X файлы (думаю известный факт) - которые являются более-менее сбалансированными в плане объем-скорость_загрузки-функциональность. Для подавляющего большинства задач этого хватает. А написанные "свои" форматы часто являются дописками к .X.
Но DX - это даже не движок в данном понимании этого слова. Движки пишуться над ним.
Поэтому пару советов, уважаемый cyborg:
1. Лучше сделать какой-то универсальный формат хранения спрайтов + поставлять функции (и программу) для преобразования из BMP, например, в него. Остальные функции библиотеки будут с ним работать.
2. Добавить дополнительное "место" в спрайт для хранения разной информации - очень хорошо придумано. Но правильней этого бы не делать, так как для организации объектов игры можно использовать список(массив)-запись (создаваемую программистом игры), где один из полей - спрайт. Тогда работ по указателю будет меньше, как и приобразований типов, что возможно на Си выглядит и неплохо, но в Delphi - уродует код (с моей точки зрения - я всегда стораюсь написать элегантней и поменьше).
3. Вот все это и будет движок. А так больше похоже на оболочки для функций API DX сгруппированные по 2 по 3. Несильно помогает, так как все приходиться делать самому, даже утомительные рутинные операции.
Желаю успехов в совершенствовании. Хочется видеть в этом более "мощьный" продукт.
Magikan (2004-09-14 10:50:00) [36]Что-то до боли знакомая ситуация с обработчиками событий...
Верное решение. Одобряю ;)
cyborg (2004-09-14 09:39:00) [37]
> [38] NikeOLD © (14.09.04 09:33)
Ты неправильно понял, мухи отдельно, котлеты отдельно.
NikeOLD (2004-09-14 09:33:00) [38]
> cyborg © (14.09.04 09:20) [36]
Я движок не смотрел, некогда, но вопрос, у тебя как, я понял, каждый спрайт на своей поверхности? Зря это, лучше бы на одной...
cyborg (2004-09-14 09:30:00) [39]
> А то с установкой событий и писанием процедур их обработки,
> писать становится не удобно.
Наоборт это очень удобно ;)
Для меню ставим один обработчик, для игры другой.
Например нужно в рекордах сделать ввод имени:
1) Ставим обработик нажатий клавиш на обработчик сцены рекордов.
2) Если игрок побил рекорд, то ставим обработчик на функцию ввода имени в строку
3) Исли в обработчике ввода имени нажали Enter, то записываем введённое имя в рекорды и устанавливаем обработчик сцены рекордов.
Так же при выходи из процесса игры:
1) В игре нажали ESCAPE
2) ставим обработчик запроса на выход
3) если нажали ESCAPE - отмену, то возвращаем обработчик игры
если нажали ENTER, то выходим из текущей сцены
Только не забывайте при изменении сцен все обработчики нажатий обнулять:
SetEventKeyDown (@EventProcessKeyDownDummy); //Тут, например, обработчик выхода из программы по нажатию ESC
SetEventKeyDown (nil);
SetEventKeyUp (nil);
SetEventMouseDown (nil);
SetEventMouseUp (nil);
SetEventMouseShell(nil);
иначе у вас будет вызываться старые обработчики другой сцены :)
cyborg (2004-09-14 09:20:00) [40]UseScreenOfset можно использовать для прокручиваемой карты, и соответственного рисования объектов с учётом смещения.