Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2013, 09:12   #121
ruN00b
Почетный нуб
Форумчанин
 
Аватар для ruN00b
 
Регистрация: 07.05.2013
Сообщений: 155
По умолчанию

Ну, в общем, я его попробую, создав новый проект. У меня на новом проекте FPS 64-66, если там алгоритм больше десятой части отъедать не будет, то добавлю.
ruN00b вне форума Ответить с цитированием
Старый 27.05.2013, 13:15   #122
Kix.IV
Участник клуба
 
Регистрация: 11.08.2012
Сообщений: 1,226
По умолчанию

Цитата:
Кстати, у меня билд обозначает кол-во строк в коде главного окна игры.
Ужас. Я вам рекомендую разделить код на модули, так будет гораздо проще работать. И это поможет избежать многих проблем в будущем.
Kix.IV вне форума Ответить с цитированием
Старый 27.05.2013, 21:53   #123
ruN00b
Почетный нуб
Форумчанин
 
Аватар для ruN00b
 
Регистрация: 07.05.2013
Сообщений: 155
По умолчанию

Делить на модули не буду, ведь мне и так удобно. Я в каждом модуле знаю, примерно на какой строке что находится.

Кстати, давно никто не тестировал игру так, чтобы было видно, что человек тестировал ее не менее 5 минут. Может кто-нибудь уделить время игре?

Заметил пару багов: у посоха не отображается префикс (редкий, древний и т.д) и он не продается в магазине.
ruN00b вне форума Ответить с цитированием
Старый 27.05.2013, 23:26   #124
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,845
По умолчанию

Цитата:
Сообщение от ruN00b Посмотреть сообщение
Я в каждом модуле знаю, примерно на какой строке что находится.
Да уж. А вы уверены, что будете и через пару лет помнить, в какой строке что у вас находится?
Arigato на форуме Ответить с цитированием
Старый 27.05.2013, 23:35   #125
ROD
Linux C++ Qt ARM
Старожил
 
Аватар для ROD
 
Регистрация: 30.11.2008
Сообщений: 3,030
По умолчанию

Вся прелесть модульности в том, что ваши модули можно таскать из игры в игру. Те же мобы, те же элементы интерфейса, даже мир, в той или иной степени. Просто подтянул модуль (не знаю как оно там в делфях выглядит), и у тебя этот кусок уже готовый есть. (правда тут придется подойти ответственнее к проектированию).
Дилетант широкого профиля.

"Слова ничего не стоят - покажите мне код!" © Линус Торвальдс
ROD вне форума Ответить с цитированием
Старый 28.05.2013, 00:13   #126
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от ROD Посмотреть сообщение
Вся прелесть модульности в том, что ваши модули можно таскать из игры в игру. Те же мобы, те же элементы интерфейса, даже мир, в той или иной степени. Просто подтянул модуль (не знаю как оно там в делфях выглядит), и у тебя этот кусок уже готовый есть. (правда тут придется подойти ответственнее к проектированию).
Прелесть только в случае медлительных программ, которым незачем спешить. Игры - это ветвь, предъявляющая особые требования к производительности кода. Модуль несёт в себе множество процедур, функций, которые требуют создания стэков ввода/вывода, иначе транслировать текущие данные из программы в универсальную структуру модуля и обратно - никак. Напротив, если требуется быстрота кода, как например - конвертирование графики, преобразование и отрисовка, то лучше универсальный модуль не использовать, а прописать все операции минуя ввод/вывод данных. В остальных случаях можете поступать как вам хочется.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 28.05.2013, 01:33   #127
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,845
По умолчанию

Цитата:
Сообщение от Beermonza Посмотреть сообщение
Объект TTimer не реагирует на интервалы 1,2,3,4 ...15, это бесполезно, только на кратные 16.
Простая программка для теста:

Код:
var
  Start: LongWord;
  Count: Int64;

procedure TForm1.FormShow(Sender: TObject);
begin
  Timer1.Enabled := True;
  Count := 0;
  Start := GetTickCount;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  if GetTickCount - Start >= 10000 then begin
    Timer1.Enabled := False;
    ShowMessage (IntToStr (Count));
  end else Inc (Count);
end;
Ставлю интервал 16, получаю 386, интервал 10 - 639, 1 - 639. То есть между 1 и 10 разницы нет, а вот между 10 и 16 разница в 1,6 раз.

Дальнейшие тесты показали, что при интервале в 15 тоже выдает 639. То есть минимальный интервал, который имеет смысл ставить для таймера - 15.

Построим таблицу результатов:

< 16 - 639
16 - 386
17..31 - 319
32 - 239
33..46 - 213
47 - 187
48..62 - 159
63 - 133
64..77 - 127
78 - 121
79.. - 106

Действительно, вокруг интервалов, кратных 16, происходит реальная смена скорости работы таймера. Но интересно, что смена именно вокруг таких значений, а не конкретно на них, то есть интервалы 46, 47 и 48 дают разные скорости таймера.
Arigato на форуме Ответить с цитированием
Старый 28.05.2013, 07:38   #128
intmain
Играюсь с Python
Форумчанин
 
Аватар для intmain
 
Регистрация: 12.12.2012
Сообщений: 340
Лампочка

Цитата:
Действительно, вокруг интервалов, кратных 16, происходит реальная смена скорости работы таймера
Возможно дело в этом.

Цитата:
Функция timeBeginPeriod(1) призвана повысить разрешение multimedia и waitable timers до 1ms. На самом деле, таймеры обрабатываются планировщиком, и их события не могут возникнуть чаще, чем планировщик получает управление. Понижая quantum до 1ms, мы позволяем планировщику более точно вызывать события таймера.
http://www.dtf.ru/articles/read.php?id=39888&page=2
Что ел то - в долг, что жил то - зря.
Для избранных. ))
Секретные разработки
intmain вне форума Ответить с цитированием
Старый 28.05.2013, 15:18   #129
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Действительно, вокруг интервалов, кратных 16, происходит реальная смена скорости работы таймера. Но интересно, что смена именно вокруг таких значений, а не конкретно на них, то есть интервалы 46, 47 и 48 дают разные скорости таймера.
"Вокруг" из-за того, что интервалы идут "вагончиками", изменение происходит при переходе на следующий "вагончик", внутри которого выполняются операции. И кратность слегка плавает, и из-за версии ОС и из-за приоритета программы. В user32.dll зашиты все ассемблерные коды, можно посмотреть на счёт таймера, но там множество кода и джампов, очень сложно вычленить нужный кусок, поскольку код как монолит, множество входов и выходов.

Я, в своё время, потратил неделю на то чтобы вычленить участок ассемблерного кода, отвечающего за BitBlt. Нашёл, но код среди множества джампов выглядел специфически. Это некая команда похожая на биос-драйверную, которая работает только на моей машине, а если нужна работа на всех ОС Windows, то без тонных кодов подготовки не обойтись. Поэтому BitBlt на ассемблер переводить смысла нет, быстрей не будет.

Ещё есть одна интересная вещь. На разных машинах Canvas ведёт себя по-разному. Где-то быстрее, где-то медленнее. И таймеры ведут себя аналогично.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 28.05.2013, 22:40   #130
ruN00b
Почетный нуб
Форумчанин
 
Аватар для ruN00b
 
Регистрация: 07.05.2013
Сообщений: 155
По умолчанию

Arigato, уж не сомневайтесь, не забуду. У меня давно был один проектик, года четыре так назад, кода в нем было, может, не 8 тысяч, как тут, а где-то 5. Но спустя эти 4 года я забыл там только одну 40-строковую процедурку.

А насчет модулей, я с 99% вероятностью не буду их добавлять, ведь даже если я буду делать вторую часть этой игры (хотя я для начала планирую закончить эту), я точно переверну в игре все, в том числе графику, мобов, персонажей, оставлю разве что какие-то города. А за 7 лет программирования у меня ни разу не было случаев, когда нужно было скопировать код.

Есть один вопрос: как выжать из цикла FOR максимум производительности? А то из-за него у меня FPS в игре 14-15 кадров вместо должных хотя бы 30.
ruN00b вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi RPG ruN00b Мультимедиа в Delphi 1 07.05.2013 09:40
RPG-SpaceInvaders revaldo666 Gamedev - cоздание игр: Unity, OpenGL, DirectX 9 08.02.2012 18:04
Delphi-клиент для Online RPG "Dragon Knight" apromix Gamedev - cоздание игр: Unity, OpenGL, DirectX 0 23.05.2009 12:48
3D-RPG Кронос Gamedev - cоздание игр: Unity, OpenGL, DirectX 25 12.05.2007 11:21