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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2009, 16:31   #21
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Если от меня будут требовать структуризации кода по модулям, то я сделаю так, иначе зачем мне это ?
Дело не в требовании, пиши код как хочешь. Просто потом будет нелегко в нем разобраться. Например у меня сейчас понемногу идет разработка GravityRace и в игре и 2 редакторах для нее используется 15 модулей. Если весь код не был бы структоризован и разбит по разным модулям то он был бы вообще не читаем. В данном случае все что касается анимации (и работает без проблем) лучше раскидать по процедурам и занести их в модули. Может сейчас это и необязательно, но когда у тебя основной модуль проэкта станет на строк 500-1000...
Вадим Буренков вне форума Ответить с цитированием
Старый 17.11.2009, 16:38   #22
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Вот когда будет количество строк больше тысячи, тогда раскидаю, а пока что только хуже будет. Хотелось бы услышать мнение Beermonza по поводу 13 % загрузки ЦП(см. пост #18) и можно ли этого как-нибудь избежать? Только если выводить графику с помощью видеокарты или есть другой вариант? Также хотелось бы получить ответ от Beermonza по поводу подгрузки изображений во время вывода графики(см. тот же пост #18)

Последний раз редактировалось Манжосов Денис :); 17.11.2009 в 16:40.
Манжосов Денис :) вне форума Ответить с цитированием
Старый 17.11.2009, 17:00   #23
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Цитата:
Вот когда будет количество строк больше тысячи, тогда раскидаю, а пока что только хуже будет.
Я тоже так думал...Игра переписывается с нуля второй раз...
Цитата:
по поводу 13 % загрузки ЦП(см. пост #18) и можно ли этого как-нибудь избежать? Только если выводить графику с помощью видеокарты или есть другой вариант?
Уже была похожая тема:
http://www.programmersforum.ru/showthread.php?t=59037
Мое мнение: хватит насиловать канвас цель не стоит средств. Возможно и есть способы оптимизации, ассемблерные вставки и другое но дело в том что с таким выводом графики далеко не уйдешь. Да, он подходит для простеньких игр, но всегда будет тормозить, нагружать процессор и.т.д. К тому же никогда не будет альфа канала (сделать вроде можно с помощю ассемблера, но мне кажется знает его не каждый), поворота спрайтов, смешивания и других возможностей предоставляемых видеокартой.
Вадим Буренков вне форума Ответить с цитированием
Старый 17.11.2009, 17:24   #24
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Я хотел делать игру на OpenGL, но там система координат другая. Возьмём тот же самый цикл вывода графики:
Код:
 for i := 0 to MapResolutionX-1 do
    for j := 0 to MapResolutionY-1 do
    begin
    if Map.ObjMatrix[i + Map.sx, j + Map.sy] <> -1 then
      begin
        im := i + Map.sx;
        jm := j + Map.sy;

        ip := i * sPoint;
        jp := j * sPoint;

        if cbGame.Checked then
             if   Animations[Map.ObjMatrix[im, jm]].Enabled
             then Animations[Map.ObjMatrix[im, jm]].DrawAnimation(ip,jp)
             else _2DDraw(ip, jp, Textures[Map.ObjMatrix[im, jm]])
             else _2DDraw(ip, jp, Textures[Map.ObjMatrix[im, jm]]);

     end;
    end;
И как перевести это всё в систему координат OpenGL? Каким-то образом делить на сто и умножать на что-то?
Манжосов Денис :) вне форума Ответить с цитированием
Старый 17.11.2009, 18:06   #25
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Господа, ...о чем спор? Речь идет о 2D, лично я считаю достойным представителем этого класса игр - Age Of Empires II, но она у меня ест 100% CPU, хоть и на OpenGL, если не ошибаюсь. Моя же разработка рисует 4 слоя 1024 х 768 х 24bit с полным 24 битным альфа-каналом (не 8) и не через интервал 99 мс, а 31 мс, т.е. 25 кадров, как в кино. При все этом управляется с объектами, списками, динамически рулит ресурсами, и грузит CPU на 45%, ...я уже доволен, ...но мои анимированные деревья размером 455 х 500 не идут ни в какие сравнения с "имперскими", хотя игровой юнит почти такой же как и там, ...т.е. на лицо масштаб реальности.
Это типа похвастал )) ...на самом деле просто рассказал, что может простой оптимизированный код со вставками на ассемблере творить даже без библиотек и поддержки видеокарт.

Денис, я так понимаю, ты из клана "пока жареный петух не клюнет в зад"? )))) ...серьезно, ...продумывай структуру движка сразу.

Что касается загрузки ресурсов, не совсем помню где она у тебя расположена, при создании формы? ...как бы то ни было, нужно сперва проанализировать загружаемую карту, и определить какие ресурсы требуются. Тут цикл, ...пока пробегаем по клеткам карты, массив банка текстур, равно как и анимации - пуст. Натыкаемся на объект в клетке, считываем код, выполняем загрузку графики и данных с винта, ищем в банке первую свободную ячейку, заполняем ее записи по ее типу, на карту ставим вместо кода объекта - индекс ячейки в банке текстур - это ссылка. И так до проверки всех клеток. Каждый раз, при обращении к коду клетки, алгоритм ищет в банке текстур по записям "нет ли уже такого загруженного ресурса", если есть, то ставит индекс, если нет, то выполняет загрузку очередного ресурса. В итоге, у нас массив карты - массив ссылок на банк текстур и анимации, со всеми вытекающими вспомогательными данными в записях типа.

Для существенного увеличения производительности и снижения нагрузки на CPU, нужно пользоваться специальной подложкой заднего фона. Допустим, это какая-то трава, как у меня. Известно, что большой заготовленный кусок, например 1024 х 768, отрисуется быстрее нежели множество кусочков по 50 х 50 в сумме с тем же объемом цельной площади. Посему, ...мы при сдвиге камеры на некоторый участок карты, делаем построение подложки из кусочков 1 раз, далее, пока нет сдвига камеры, каждый раз будет выводиться подложка целиком, а алгоритм построения будет пропускаться. Как только камера сместилась, алгоритм снова соберет подложку и отключится. Это очень эффективно.

По поводу модульности. Шибко не увлекайтесь, ...отдельная процедура/функция внутри кода - ссылка на кусок кода. Модуль - обращение в реальном времени как к библиотеке. У меня нет модулей, и не будет, сам проект и есть движок игры, он все умеет, главное правильно создать ресурсы, и задать систему, как ими правильно пользоваться.

Сначала создайте правильную и эффективную структуру загрузки и обработки ресурсов, а потом плавно избавляйтесь от канвы.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его

Последний раз редактировалось Beermonza; 17.11.2009 в 18:36.
Beermonza вне форума Ответить с цитированием
Старый 17.11.2009, 18:06   #26
Вадим Буренков
Участник клуба
 
Аватар для Вадим Буренков
 
Регистрация: 06.03.2009
Сообщений: 1,346
По умолчанию

Если мало опыта возьми любой движок с открытыми исходниками. При желании сможешь разобраться как работает, а если что будешь просто использовать. Никаких особенных отличий не будет даже от canvas (вместо canvas.draw будет например DrawTexture2D)
Вадим Буренков вне форума Ответить с цитированием
Старый 17.11.2009, 18:20   #27
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Цитата:
Денис, я так понимаю, ты из клана "пока жареный петух не клюнет в зад"? ))))
.
Я изначально знал, что будет в движке. Всё продумано, почему нет: вывод графики есть, работа с картой есть, звука пока нет, но будет.
Вадим, этот проект не будет использовать OpenGL графики, может в других и заюзаю.
Beermonza, я не понял насчёт так называемой подложки. Можете объяснить поподробней? Заготовленный кусок 1024х768 будет создаваться из более мелких кусков 50 x 50, ведь так? И смысл создавать заготовленное изображение, если будет играть анимация и наш кусок будет не нужен, потому как на нём старый кадр из анимации?
Манжосов Денис :) вне форума Ответить с цитированием
Старый 17.11.2009, 19:27   #28
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Тема плавно перетекает в эту http://www.programmersforum.ru/showthread.php?t=59037
Ну, так и быть. Что есть подложка? ...это задний фон, некоторая поверхность, то на чем потом рисуются объекты. Карта бывает разная, нужна то трава, то почва, то песок, то вода и пр. пр. пр. Это все в мелких тайлах (спрайтах). Камера цепляет сразу диапазон клеток карты. Для того, чтобы на видимый диапазон клеток карты натянуть самый первый растр - фон, ...нужно собрать его по циклу из кусков. При том, что у тебя 99 мс интервал кадровки, то эта процедура будет каждый раз тебе лепить задний фон по кускам, загружая CPU лишней работой, а если 31 мс будет, для гладкой анимации?
Поэтому, есть метод: в первый раз после смещения камеры собрать подложку заднего фона, и выводить готовый кусок на всю видимую область, что захватывает камера от карты. Как только камера сместилась, у тебя новый диапазон клеток, ...пробегаем по ним, слепляем подложку фона, и ее используем. Каждый раз новый кадр начинается с помещения этой подложки, затем объекты. Вся анимация выглядит как нужно, но CPU уже не напрягается.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Старый 17.11.2009, 20:07   #29
Манжосов Денис :)
Участник клуба
 
Регистрация: 29.01.2008
Сообщений: 1,039
По умолчанию

Так...в-общем, подложка мне не нужна. У меня пустой, белый фон. Есть анимационные объекты - деревья. Каждый раз, когда перерисовывается экран, идёт расстановка объектов, кадр увеличивается, а значит подложка будет не в тему - в ней же содержится старый кадр. Тем более, это редактор, а не сама игра. Здесь объекты можно помещать на карту в реальном времени, и каждый раз создавать обложку, при добавлении нового объекта, нет смысла. Надеюсь, что мы понимаем друг друга Beermonza, а то мне уже кажется обратное? Тему про оптимизацию дочитаю, попробую также заменить файлы формата BMP на PNG - читал в некоторых темах про него.
Манжосов Денис :) вне форума Ответить с цитированием
Старый 17.11.2009, 20:50   #30
Beermonza
Инженер ИС
Старожил
 
Аватар для Beermonza
 
Регистрация: 13.12.2006
Сообщений: 2,671
По умолчанию

Вообще я смутно представляю что это будет за игра, в которой один слой.
PNG не разгрузит CPU, это метод хранения ресурсов в меньшем объеме, и только, ...в памяти они снова занимают полный объем.
Руководитель проекта MMO 2D RPG: Настоящее имя Денис Стрижак (10.05.1981-6.02.2019) Мир духу его
Beermonza вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Delphi 7 проблема с Анимацией Rus 47 Помощь студентам 1 26.05.2009 00:17
Помогите с анимацией проги! Aboltus Общие вопросы Delphi 3 29.07.2008 23:21
Работа с анимацией в ACCESS kuk132 Microsoft Office Access 1 17.07.2008 14:07
Задача с анимацией KpeHDeJIb Помощь студентам 1 04.07.2008 20:23
Помогите с анимацией в Паскале ЕвгениуS Помощь студентам 6 06.06.2008 15:10