Вопросы по созданию игр.

Список разделов Геймдев в Blender Игровой движок Blender

Описание: Все вопросы и обсуждения, касающиеся BGE
Модераторы: exooman, denis8424

  • 0

Сообщение #1 exooman » 25.01.2014, 14:45

В этой теме помогаем друг-другу разбираться в игростроении на движке BGE.
Внимание, прежде чем задать вопрос, просмотрите темы:
Blender Game Engine FAQ
Blender Game Engine примеры
Полезные ресурсы по BGE


Пожалуйста, выкладывайте бленд-файлы, изображения и другие ресурсы на сторонних хостингах. Приветствуется упаковывание файлов в архив, желательно в формате .7z. По возможности старайтесь использовать изображения формата .jpeg.
exooman
Аватара
Сообщения: 1942



Сообщение #101 Line » 24.03.2014, 10:31

denis8424 писал(а):В общем уточни, как бы ты хотел, чтобы оно выглядело
К пустышке привязан объект или их группа. Объект скрыт (перенесен на другой слой). При запуске BGE отображаются только пустышки, к которым привязаны объекты. Далее. А почему сплайны не могут отображаться в BGE? Там все построено на треугольниках, полигонах? А сплайны это уже нет. .... Разбираюсь, сколько всего надо знать.
Энтузиаст Blender 3D
Line M
Аватара
Сообщения: 743


Сообщение #102 denis8424 » 24.03.2014, 11:27

Line писал(а):К пустышке привязан объект или их группа. Объект скрыт (перенесен на другой слой). При запуске BGE отображаются только пустышки, к которым привязаны объекты.
Если привязки не будут меняться, то можно к пустышке прикрепить объект, который будет становиться видимым/невидимым, в зависимости от каких-то условий, которые тебе нужны. То есть парентишь к пустышке куб, и в настройках физики делаешь его видимым/невидимым. Хотя проще использовать объекты вместо пустышек изначально. А скриптом вообще замечательно.
Line писал(а):Далее. А почему сплайны не могут отображаться в BGE? Там все построено на треугольниках, полигонах?
Потому что разработчик не написал такую функцию, тем более, что она не нужна.

P.S. Сейчас проверил кое-что. Ты уверен, что тебе нужно отображение пустышек, потомки которых на неактивном слое? Или достаточно того, что они невидимы?

Код: Выделить всё
import bge
cont = bge.logic.getCurrentController()
scene = bge.logic.getCurrentScene()
key = cont.sensors['Keyboard']
if key.positive:
    for obj in scene.objects:
        if 'Empty' in obj.name and obj.children:
            pos = obj.worldPosition
           
            vec1X = [obj.worldPosition[0] - 1, obj.worldPosition[1], obj.worldPosition[2]]
            vec2X = [obj.worldPosition[0] + 1, obj.worldPosition[1], obj.worldPosition[2]]
            vec1Y = [obj.worldPosition[0], obj.worldPosition[1] -1, obj.worldPosition[2]]
            vec2Y = [obj.worldPosition[0], obj.worldPosition[1] +1, obj.worldPosition[2]]
            vec1Z = [obj.worldPosition[0], obj.worldPosition[1], obj.worldPosition[2]-1]
            vec2Z = [obj.worldPosition[0], obj.worldPosition[1], obj.worldPosition[2]+1]
            color = [256, 0, 0]
            bge.render.drawLine(vec1X, vec2X, color)
            bge.render.drawLine(vec1Y, vec2Y, color)
            bge.render.drawLine(vec1Z, vec2Z, color)
denis8424
Аватара
Сообщения: 724

Сообщение #103 rek_on » 31.03.2014, 13:59

ребят подскажите с реализацией
Есть объект, он вращается на произвольный угол. Если запросить ориентацию относительно глобальных или локальных координат, появляется матрица (3х3). Так вот собственно вопрос как из этих значений получить градусы?

и еще один вопрос как с помощью скрипта изменить значение пророперти присвоенного к другому объекту?
rek_on
Сообщения: 9

  • 1

Сообщение #104 denis8424 » 31.03.2014, 14:59

rek_on писал(а):Есть объект, он вращается на произвольный угол. Если запросить ориентацию относительно глобальных или локальных координат, появляется матрица (3х3). Так вот собственно вопрос как из этих значений получить градусы
Ориентация осей записывается в матрицы в виде столбцов, то есть вертикально. Можно выковырять вектор ориентации конкретной оси просто по индексам, или с помощью функции own.getAxisVect(), подробнее смотри в #bge.types.KX_GameObject.getAxisVect
Для того что бы получить угол между осями, например глобальной осью Х и осью ориентации объекта можно использовать функцию mathutils.Vector.angle
rek_on писал(а):и еще один вопрос как с помощью скрипта изменить значение пророперти присвоенного к другому объекту?
Код: Выделить всё
otherObject = bge.logic.getCurrentScene().objects['имя другого объекта']
otherObject['prop'] = чему-то там.
denis8424
Аватара
Сообщения: 724

  • 3

Сообщение #105 Wegemu » 31.03.2014, 18:05

Есть объект, он вращается на произвольный угол. Если запросить ориентацию относительно глобальных или локальных координат, появляется матрица (3х3). Так вот собственно вопрос как из этих значений получить градусы?

Код: Выделить всё
from bge import logic

rad = 180/3.14

obj = logic.getCurrentController().owner

euler = obj.worldOrientation.to_euler()
print(euler.z/rad) # угол по оси z в градусах

euler.x = 45*rad # градусы, переведенные в радианы
euler.z = 30*rad

obj.worldOrientation = euler.to_matrix()
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

Ушел в поисках приключений в страну GLSL.
Wegemu M
Аватара
Сообщения: 62

Сообщение #106 andreymal » 31.03.2014, 18:08

Wegemu писал(а):rad = 180/3.14
Как грубо =(

import math
rad = 180/math.pi
Wegemu писал(а):obj.worldOrientation = euler.to_matrix()
to_matrix, кстати, необязательно, само переведётся.

А вообще я на каких-то геймдев-сайтах читал, что туда-сюда матрицы-градусы лучше конвертировать поменьше, а то операция типа ресурсозатратная. Но лично не проверял.

Добавлено спустя 4 минуты 21 секунду:
denis8424 писал(а):"какие ваши доказательства?(с)"
Не, моё 2011 годом датируется =-) http://www.youtube.com/watch?v=YauxQunYpko
Странно, что я на этот пример не обратил внимания.
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 1196

Сообщение #107 Wegemu » 31.03.2014, 18:22

andreymal писал(а):Как грубо =(

import math
rad = 180/math.pi

Нафига "лишний" модуль подключать? Да и такая точность избыточна. =)

andreymal писал(а):to_matrix, кстати, необязательно, само переведётся.

А вообще я на каких-то геймдев-сайтах читал, что туда-сюда матрицы-градусы лучше конвертировать поменьше, а то операция типа ресурсозатратная. Но лично не проверял.

Ага, переводится само. Раньше не работало (в предыдущих версиях).

Да, ты прав - ресурсозатратно. Но ведь это для "начала" не плохой способ ведь.
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

Ушел в поисках приключений в страну GLSL.
Wegemu M
Аватара
Сообщения: 62

  • 1

Сообщение #108 andreymal » 31.03.2014, 18:25

Wegemu писал(а):Нафига "лишний" модуль подключать?
А он всё равно уже где-нибудь внутри блендера подключен, ресурсы не тратит.

Wegemu писал(а):Да и такая точность избыточна.
Нет, я хочу максимально доступную точность) К тому же это уже начинает иметь значение, если где-то считать обороты тысячами, например (не в данном случае, да).
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 1196

Сообщение #109 rek_on » 02.04.2014, 14:13

спасибо за помощь!!! :-D

Wegemu тоже раздумывал над такой же реализацией
только
Wegemu писал(а):rad = 180/3.14
все же rad = 3.14/180

а вот еще вопрос
Wegemu писал(а):euler = obj.worldOrientation.to_euler()
obj.worldOrientation = euler.to_matrix()

у вас глобальные величины оринтации, а можно ли как нибудь вращать объекты в локальной системе?
просто изменив с obj.worldOrientation = euler на obj.localOrientation = euler не работает, точнее работает но все равно беруться глобальные величины
rek_on
Сообщения: 9

Сообщение #110 engine9 » 02.04.2014, 14:38

Подскажите, БГЕ ограничен в размерах локации? К примеру я хочу сделать поле 200х200 км, для авиасима. Потянет?
engine9 M
Аватара
Откуда: Архангельск
Сообщения: 695

  • 1

Сообщение #111 andreymal » 02.04.2014, 17:27

Не знаю. В самом блендере ограничение 10k×10k×10k, в бге не проверял
Уменьши все размеры в 1000 раз и вперёд
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Аватара
Сообщения: 1196

Сообщение #112 Wegemu » 02.04.2014, 17:40

rek_on писал(а):у вас глобальные величины оринтации, а можно ли как нибудь вращать объекты в локальной системе?
просто изменив с obj.worldOrientation = euler на obj.localOrientation = euler не работает, точнее работает но все равно беруться глобальные величины
В чем проблема?
Код: Выделить всё
euler = obj.localOrientation.to_euler()
obj.localOrientation = euler.to_matrix()
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

Ушел в поисках приключений в страну GLSL.
Wegemu M
Аватара
Сообщения: 62

Сообщение #113 engine9 » 02.04.2014, 18:10

>Уменьши все размеры в 1000 раз и вперёд
А самые мелкие размеры какие? Точней точность самого блена.
engine9 M
Аватара
Откуда: Архангельск
Сообщения: 695

  • 1

Сообщение #114 denis8424 » 02.04.2014, 18:26

engine9, обратись к Flogger-K за консультацией, он тоже авиасим делает. Но локации у него точно больше десяти километров.
denis8424
Аватара
Сообщения: 724

Сообщение #115 rek_on » 03.04.2014, 08:21

Wegemu писал(а):В чем проблема?

в этом случае, работает только снятие локальных координат, но вот поворот в локальной системе не осуществляется, то есть вращение происходит все равно относительно глобальных осей
consol_grad2.zip
rek_on
Сообщения: 9

Сообщение #116 denis8424 » 03.04.2014, 20:24

rek_on, Все равно непонятно, в чем проблема. Не стесняйся писать подробные тексты.
Загляни сюда заодно http://www.blender.org/documentation/blender_python_api_2_69_release/mathutils.html, в самом начале есть пример кода, реализующего поворот через матрицу поворота.
denis8424
Аватара
Сообщения: 724

Сообщение #117 Line » 07.04.2014, 13:25

Что это за командное окно управления анимацией (я так понял)? Файл с расширением .pd.
http://www.youtube.com/watch?v=t-5a5S0-8Hg
Энтузиаст Blender 3D
Line M
Аватара
Сообщения: 743


Сообщение #118 iliya2013 » 12.04.2014, 12:33

как сделать с помощью нодов так чтобы плоскость с одной стороны давала одно свечение а с другой другое? и по цветам тоже разное.
Открывая душу будь всегда готов, что кто то в нее обязательно плюнет.
iliya2013 M
Аватара
Откуда: Магнитогорск
Сообщения: 448

  • 1

Сообщение #119 maleficmax » 12.04.2014, 13:02

Продублировать плоскость и инвертировать нормали. Не знаю конкретно про БГЕ, но в юнити помогало )
maleficmax M
фашист і бандерівець
Аватара
Откуда: Україна, Кременчук
Сообщения: 4380


Сообщение #120 iliya2013 » 12.04.2014, 14:48

maleficmax писал(а):Продублировать плоскость и инвертировать нормали. Не знаю конкретно про БГЕ, но в юнити помогало )
а чтобы свечение было через ноды, как сделать? :)
Открывая душу будь всегда готов, что кто то в нее обязательно плюнет.
iliya2013 M
Аватара
Откуда: Магнитогорск
Сообщения: 448

Пред.След.

Вернуться в Игровой движок Blender

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 1 гость