Главная › Форумы › Blender Game Engine (BGE) › Всякие вопросы
После сборки игры в exe, игра от запуска к запуску подтормаживает. Сказывается это торможение на вращение камеры, скорость которой падает вдвое, а иногда может и запинаться. Данный эффект проходит через какое-то время, но хотелось бы узнать природу этой причуды и как с ней бороться.
Возможно банальная подгрузка игры в память? Помню в далеком 2003 я с жуткими тормозами проезжал круг в NFS Underground, затем рестарт и все плавненько (было 32 метра на карточке).
А вообще нужно копать эту тему, так как сцена из последнего урока тоже не плавная, хотя там ничего нет. Причем не плавная, сколько по ней не бегай.
Это первое что приходит в голову. Но как тогда проследить полноценную инициализацию игры?
Давал exe паре товарищей, с более сильным железом, так они и вовсе не увидели каких-то различий от запуску к запуску. И сам этот момент, что подтормаживает не всегда, очень смущает. Не говоря о том, что сама тестовая сцена очень скромная, в 12 000 треугольников, тремя источниками света, двумя текстурами и всего-лишь двумя скриптами(полет камеры).
Похоже ответ найден.
Во вкладке Render, свитка Standalone Player, устанавливаем значение Refresh Rate на 75.
Во вкладке World, свитка Phisics, значение FPS устанавливаем 50.
Так же, посоветовали закрыть камеру и прокрутить ее на все 360, в качестве своеобразного прелоада. Но обошлось без этого.
Мои тесты показывают, что достаточно на вкладке мира установить FPS: 50 и рывки пропадают. А на вкладке рендера что 60, что 100 — одинаково.
Ох… С вами снова Я.
Теперь пришло время сражения на фронте материалов. Как мне именно скриптом изменить цвет объекта? Или вернее, где копать?
Изучив документацию и множество классов/подклассов посредством функции dir(), пришел к цепочке:
KX_GameObject -> KX_MeshProxy -> KX_VertexProxy
Последний имеет атрибут color[r, g, b, a] и метод setRGBA(). В каких-то других местах, возможности работы с RGBA, я не нашел, в том числе в подклассе KX_BlenderMaterial, который есть наследник KX_MeshProxy. Однако изменение параметров атрибута color, или использование setRGBA(), не дают никаких результатов, как и не выдают истинный цвет, назначенного им материала.
В разного рода поисках, начала закрадываться неутешительная мысль, что это уже начинается работа с шейдерами. Однако моего языкового могущества, недостаточно, чтобы полноценно вникнуть в вопрос, например здесь.
Простое изменение цвет в окне Info говорит следующее:
bpy.context.object.active_material.diffuse_color = (0.8, 0.8, 0.8)
Здорово. Только подобное изменяет цвет объекта в самом блендере, а не в процессе игры. То есть, цвет будет изменен после выхода из игры, в настройках материала. Тоже самое произойдет если работать с альфа-каналом через bpy модуль.
Говорят люди работает через смену цвета вершин:
import GameLogic co = GameLogic.getCurrentController() obj = co.owner m_i = 0 mesh = obj.getMesh(m_i) while mesh != None: for mat in range(mesh.getNumMaterials()): for v_index in range(mesh.getVertexArrayLength(mat)): vertex = mesh.getVertex(mat, v_index) vertex.colour = [1.0, 0.0, 0.0, 1.0] m_i += 1 mesh = obj.getMesh(m_i)
Неправду говорят люди. Да и к чему я тогда текст выше расписал, об атрибутах класса KX_VertexProxy.
Вернее помогает, однако только в режиме шейдинга Multitexture. И то, не совсем верно, так как альфа не регулируется. Она либо есть, в этом режиме, либо ее нет, т.е. объект становится полностью прозрачным, если сместить альфу хоть на сколько меньше единицы.
https://docs.google.com/file/d/0ByE-x_kxGr3SNjZqVWhrUTBqSjQ/edit
Ссылка, по которой можно загрузить blend-файл с тестовой сценой. В окно консоли будет выведен результат работы с атрибутом color. Для запуска процесса смены цвета — пробел. Меняем GLSL на Multitexture для убедительности.
Таки форум снова доступен.
Вопрос был решен простой установкой галочки возле Object color в материале объекта. В последствие, изменение цвета и альфы объекта происходит через его атрибут color.
Например:
Obj = bge.logic.getCurrentController().owner Obj.color[3] = 0.2
Извиняюсь за кипишь. Впредь буду внимательнее.
Да, после обновления WordPress слетел форум (знать бы че). Пришлось обновиться.
Что проблема решена — это хорошо. Не стесняйся обращаться в будущем.
А не подскажите. У меня в BGE вечной альфа текстуры сливаются. Как сделать что б они как обычные текстуры отображались?
У меня в BGE вечной альфа
текстуры сливаются
Честно, не понимаю что это. Покажи скрин или напиши без ошибок. Что за вечная текстура… вечнО, наверное?