что что в игре не было двойной буферизации
Как это знакомо до боли.
В комментариях к этому посту поступили предложения о создании блогов с тематикой, посвященной созданию игр, у меня есть некоторый опыт и я готов им поделиться.
Первую игру я делал с одноклассником (он тоже есть на стопгейме под ником Tiranys). Геймплей заключался в отстреливании рук и ног от тела, причём вместо лица можно было вставить фотографию. Игра была написана на Visual Basic, и выглядела ужасно. Здесь мы переходим к теории.
Не считайте меня графодрочером, но без приятной и быстрой графики игре не обойтись. В моём первом блине коме этого не было — все текстуры на экране мерцали, «а почему?» спросите вы, а потому, что в игре не было двойной буферизации. Что же это значит?
Рассмотрим два способа обновления сцены на экране (изначально в сцене уже присутствуют объекты, и нам надо их передвинуть):
1)
— стереть первый объект
— нарисовать на его месте фон
— нарисовать первый объект на новом месте
— повторить всё это со следующими объектами
Этот метод порочен тем, что глаз успевает заметить как мы стираем объект, перерисовываем фон и опять рисуем объект (3 операции рисования на объект).
2)
— рассчитать новые координаты всех объектов
— перерисовать фон
— вывести все объекты с новыми координатами
Это и есть двойная буферизация — сначала готовится кадр, а потом он выводится целиком (1 операция рисования), тут уже глаз ничего не успевает заметить.
Используя двойную буферизацию мы получим быструю графику только для малых разрешений, и вряд ли для 3D. Проблема в том, что если не использовать DirectX или OpenGl, все операции рисования будет выполнять процессор, и он с этим справляется плохо. В моей первой игре дело так и обстояло.
Графические API
Итак, если хотите делать игру, изучайте OpenGl или DirectX, без них вам удастся реализовать разве что квесты (я не ручаюсь за гениев оптимизации, которые умеют(?) рисовать быструю и сложную 3d графику на процессоре). Кроме того, они и буферизацию за вас сделают, и отсортируют модели по глубине и ещё много чего.
Теперь начинающий игродел стоит перед выбором что круче — DX или OGL. Это всё равно, когда вы станете гуру и будете знать тонкости каждой API, тогда и выберете, а сейчас возможностей и того и другого вам хватит с головой. Так что используйте то чем владеете (но зачем тогда вы это читаете), либо то, что понравится.
Также обстоит дело и с языком программирования — используйте ваш любимый.
Мне нравится C# + SlimDX/XNA (SlimDX и XNA — обёртки над DX, для .NET)
Краткий итог.
Изучите графическое API, без них вам придётся очень тяжко.
P.S. Я ничего не сказал про готовые движки, так как сам ими не пользуюсь, но это тоже хороший вариант для старта.
что что в игре не было двойной буферизации
у пользователя наверняка уже стоит редист.
Как это знакомо до боли.