![]() |
eXeL@B —› Программирование —› Можно ли увеличить скорость простой DirectX игры ? |
Посл.ответ | Сообщение |
|
Создано: 24 апреля 2007 19:10 · Личное сообщение · #1 |
|
Создано: 24 апреля 2007 19:30 · Личное сообщение · #2 ToBad я имию оень приблизительное представление о 3D, но всё упирается в несколько вещей: - кадры перересовываются железом, так быстро как можно (получаем fps) - всё что касается координат и движения счетается относительно времяни а не кадров - DirectX имеет или опускает фички в зависимости от того что поддерживает видео драйвер и железо - игра может смотреть в установки и добавлять/убирать эффекты Ну и, ессно, включив всё в игре и подняв разнешение ты сможешь загнать слабый комп в неизрабельные 0.5 fps ![]() ![]() |
|
Создано: 24 апреля 2007 21:03 · Личное сообщение · #3 Игра очень простая, типа "однорукого бандита". Полнейший примитив - никаких эффектов. Вся графика в bmp а музыка в wav. Я так понял просто меняются картинки. Например, горение свечи, 2-3 маленькие bmp-шки огня. Меня интересует не поднятие fps, а возможность ускорить весь геймплей. Например кручение барабана и его остановка занимает определённое время, вот это и нужно немного ускорить. Просто не знаю как примерно это может быть организованно. Не sleep-же используется ? ![]() |
|
Создано: 24 апреля 2007 21:07 · Личное сообщение · #4 |
|
Создано: 24 апреля 2007 22:08 · Личное сообщение · #5 |
|
Создано: 24 апреля 2007 23:25 · Поправил: s0larian · Личное сообщение · #6 ToBad, обычно в таких простых играх есть ф-ция UpdateFrame() которая вызыватся бисто-бистро и часто-часто ![]() Но, в конце концов, rendering патчить не надо, т.к, думаю, ты найдёшь константы скорости и времяни вращения тех колёс. ![]() |
|
Создано: 25 апреля 2007 02:49 · Личное сообщение · #7 Veliant пишет: ты ее точно найдешь по запросу "CS SpeedHack" Утилитку нашёл, называется: Bubba's Warcraft Hack v1.5, но к сожалению игра под ней слетает. s0larian пишет: обычно в таких простых играх есть ф-ция UpdateFrame() Тут всё это выполняется в коде таймера. Dr3d пишет: Ну если не слип, то может таймеры? Да, точно, так и вышло. Запустил под Идой, поставил бряки на все Sleep, GetTickCount, SetTimer, timeGetTime. Удалял функции, правил результаты, писал другие интервалы - на игру не влияет. Нашёл DXTimer, он влияет, но уменьшать некуда. Увеличиваю – тормозит, на 1 – работает обычно. Что же делать ? ![]() |
|
Создано: 25 апреля 2007 04:10 · Личное сообщение · #8 как вариант - попробуй хучить QueryPerformanceCounter (блин, главное чтобы память меня не подводила) и в заглушке править интервалы. по-моему именно так работает половина SpeedHack'ов. только сомневаюсь что твоя игрушка на этом попадется. либо скачай DelphiX (на котором судя по всему она написана), он опенсурсовый, посмотри какие механизмы использует DXTimer и вообще что может влиять еще на рендер. ![]() |
|
Создано: 25 апреля 2007 10:18 · Личное сообщение · #9 |
|
Создано: 25 апреля 2007 10:58 · Личное сообщение · #10 NaumLeNet пишет: попробуй хучить QueryPerformanceCounter Попробовал. Она вызывается один раз и присваивает переменной результат своей работы. Тут я тоже всячески правил, значительно увеличивал и уменьшал результат, обходил этот код вообще. На скорость геймплея не отразилось. NaumLeNet пишет: так работает половина SpeedHack'ов Подскажи неплохие. Viktoro пишет: скорость увеличить можно, если отказаться от компонентов DelphiX Я реверсю программку. Я не её разработчик. Даже не представляю, как возможно то, что ты предложил не имея исходников... ![]() |
|
Создано: 25 апреля 2007 11:52 · Поправил: NaumLeNet · Личное сообщение · #11 ToBad пишет: Подскажи неплохие. google. не помню названий, давно уже не щупал. -> "либо скачай DelphiX (на котором судя по всему она написана), он опенсурсовый, посмотри какие механизмы использует DXTimer и вообще что может влиять еще на рендер.". <- имхо, самый правильный вариант. я думаю других вариантов тут вообще нет. задача очень специфическая (какой-то адский самопал, да еще и DelphiX). Viktoro пишет: А DelphiX оптимизировать смысла я не вижу... речи об оптимизации вообще нету. тут даже дело судя по всему не в тормозах, а в желании топикстартера "не ждать" пока сработает однорукий бандит ) или нечто подобное. ![]() |
|
Создано: 27 апреля 2007 10:02 · Поправил: Satanael · Личное сообщение · #12 Для ускорения игр есть проги : SpeadGear,xspeedx и пр. Мне не нравится DelphiX, тормознутый слишком. Лучше использовать движки например HGE (кому надо могу лого (powered by HGE) убрать из движка). Но больше мне нравитя SpriteCraft, там можно выбирать DirectX, OpenGL. Написан с использованием COM так что программерить можно не только на Visual C++ но и на Дельфи да и на любом другом языке поддерживаемом технологию COM. Щас там вышла версия, можно на Питоне писать. Вообщем: [url=http://suda-chen.biz/ ]http://suda-chen.biz/ [/url] P.S. Забыл сказать это только для 2-х мерных игрушек. http://www.spritecraft.com/ http://www.spritecraft.com/ ----- Никто не знает столько, сколько не знаю я ![]() |
|
Создано: 27 апреля 2007 10:11 · Личное сообщение · #13 ToBad Как вообще устроен механизм того, что бы и на слабом компьютере по возможности игра нормально работала и на очень хорошем не летала как ДОСовские ? -- Есть два способа: 1) Ограничить количество фпс, например как в игре Oni там 60 лимит В SpriteCraft это eng.DisplayEx(60); 2) Изменять скорость движения в зависимости сколько времени уходит на прорисовку всего изображения: GetTickFrame - в миллесикундах. Const speed=500 obj:=obj+speed*GetTickFrame/1000; (так примерно хз, не помню щас) ----- Никто не знает столько, сколько не знаю я ![]() |
![]() |
eXeL@B —› Программирование —› Можно ли увеличить скорость простой DirectX игры ? |