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

Список разделов Геймдев в 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



Сообщение #141 rek_on » 30.04.2014, 09:24

denis8424 писал(а):rek_on, посмотри тут, есть все необходимое
Спасибо дружище , что то я тупанул :slowpoke:
rek_on
Сообщения: 9

Сообщение #142 rek_on » 22.05.2014, 08:16

Ребят а подскажите в чем ошибка? делаю скрипт который по нажатию "W" поворачивает объект на определеный градус. Так вот сделал так что бы поворачивалось но поворачивается одномоментно , а хотелось бы увидить плавный поворот. пытался сделать что бы проход цикла был с задержкой но задержка есть а плавного поворота до сих по нет :(

Спойлер
from bge import logic
import math
import time
scene = logic.getCurrentScene()
player1 = scene.objects["1"]
keyboard = bge.logic.keyboard
wKey = bge.logic.KX_INPUT_ACTIVE == keyboard.events[bge.events.WKEY]
keyboard = bge.logic.keyboard
rad = math.pi/180
i = 0
n=30
x=0
euler1 = player1.worldOrientation.to_euler()
if wKey:
if round(euler1.z/rad, 0) <= n:
for i in range(n):
player1.applyRotation((0, 0, rad), True)
print(i)
#time.sleep(0.1)
print(euler1.z/rad)
rek_on
Сообщения: 9

  • 1

Сообщение #143 andreymal » 22.05.2014, 08:27

После поворота нужно пересчитать физику и перерисовать кадр, а делается это только после завершения скрипта, поэтому переписывай скрипт с сохранением угла в проперти и его изменением при каждом запуске скрипта.
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M В сети
Аватара
Сообщения: 1196

Сообщение #144 rek_on » 23.05.2014, 08:07

andreymal писал(а):После поворота нужно пересчитать физику и перерисовать кадр, а делается это только после завершения скрипта, поэтому переписывай скрипт с сохранением угла в проперти и его изменением при каждом запуске скрипта.
ок , спасибо за пояснение , а подскажи еще пожалуйста как запускать и останавливать скрипт раз в доли секунд?
rek_on
Сообщения: 9

Сообщение #145 denis8424 » 23.05.2014, 10:39

rek_on, тут почитай, или можно в самом скрипте, при работающем в импульсном режиме сенсоре, использовать переменную-счетчик, которая будет отслеживать количество запусков скрипта.
denis8424
Аватара
Сообщения: 724

Сообщение #146 rek_on » 26.05.2014, 14:40

Просидел все выходные но все таки получилось сделать этот "№!#@! поворот.
Правда появились новые вопросы :suicid: :
1. функция bge.logic.getCurrentController()-означает "получить контроллер, на котором запущен данный скрипт."
Есть ли функция которая запускает контроллер на любом объекте

2.Что бы создать проперти для объекта используют функцию bpy.ops.object.game_property_new(name="") нужно ли подключать какие либо дополнительные библиотеки или просто достаточно указать выбраный объект с помощью p = scene.objects["1"] и далее создавать новый проперти
rek_on
Сообщения: 9

Сообщение #147 denis8424 » 26.05.2014, 15:15

rek_on, по поводу создания проперти - в bge модуль bpy не работает. Проперти создаются так:
Код: Выделить всё
ob = scene.objects['object'] # или получить объект другим способом
ob['new_property'] = 123 # создаем проперти и записываем значение
denis8424
Аватара
Сообщения: 724

  • 1

Сообщение #148 Wegemu » 26.05.2014, 19:41

rek_on писал(а):1. функция bge.logic.getCurrentController()-означает "получить контроллер, на котором запущен данный скрипт."
Есть ли функция которая запускает контроллер на любом объекте

Активировать контроллер нельзя (да и незачем, он всегда активен и проверяет состояние сенсоров)
Пример:
Код: Выделить всё
# контроллер объекта
cont = KX_GameObject.controllers['cont_name']
# получаем сенсор и работаем с сенсором
mouse = cont.sensors['cursor']
...
# ----------------------
получаем актуатор (если необходимо изменить его атрибуты)
act = cont.actuators['act_name']
# активация/деактивация актуатора
cont.activate('act_name')
cont.deactivate('act_name')

Сложно спеку почитать? :beer:
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

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

Сообщение #149 ЖенькаАзаров » 08.06.2014, 04:52

Народ, подскажите, может кто знает. У меня перс вправо-влево только бегает, а когда на пути возникает препятствие и он в него упирается то медленно начинает отползать в сторону. Как этого избежать? У меня конечно есть вариант по бокам плэйны поставить, да только есть ли возможность без них?
Делаю платформер.
ЖенькаАзаров M
Аватара
Откуда: Иркутская обл. г. Тулун
Сообщения: 34

  • 1

Сообщение #150 andreymal » 08.06.2014, 08:31

Актуатором Constraint ограничить?
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M В сети
Аватара
Сообщения: 1196

Сообщение #151 ЖенькаАзаров » 08.06.2014, 12:09

Актуатором Constraint ограничить?
Надо попробовать.
ЖенькаАзаров M
Аватара
Откуда: Иркутская обл. г. Тулун
Сообщения: 34

  • 2

Сообщение #152 exooman » 08.06.2014, 12:33

ЖенькаАзаров писал(а):Народ, подскажите, может кто знает. У меня перс вправо-влево только бегает, а когда на пути возникает препятствие и он в него упирается то медленно начинает отползать в сторону. Как этого избежать? У меня конечно есть вариант по бокам плэйны поставить, да только есть ли возможность без них?
Делаю платформер.


вариант первый - устанавливаешь объекту в настройках физики "твердое тело"(rigid body), а дальше блокируешь ненужные повороты и перемещения по осям(галочки там есть). С настройками "динамически" не работает.

вариант второй - в скрипте прописываешь world-координаты по нужной оси для объекта.
К примеру:
obj.worldPosition[0] = 122

где obj - нужный тебе объект, .worldPosition[0] - позиция в мире по оси "x"(если нужно по оси "y" - пишем в скобках [1], а если по "z" -[2]), 122 - это уже нужное тебе значение для присвоения положения в игровом мире, в котором объект будет находиться при каждом выполнении скрипта.
exooman
Аватара
Сообщения: 1942


Сообщение #153 andreymal » 08.06.2014, 20:10

exooman писал(а):в скрипте прописываешь world-координаты по нужной оси для объекта
Не, ну это уже совсем извращение
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M В сети
Аватара
Сообщения: 1196

Сообщение #154 ЖенькаАзаров » 13.06.2014, 06:56

Товарищи, подскажите как справиться с этой ерундой.

Добавлено спустя 20 минут 18 секунд:
Уже нашёл. В аддоне 115 строку надо удалить просто.
Вложения
Ошибка.jpg
ЖенькаАзаров M
Аватара
Откуда: Иркутская обл. г. Тулун
Сообщения: 34

Сообщение #155 ЖенькаАзаров » 17.06.2014, 10:32

Товарищи, подскажите, может кто знает, почему при сохранении игры происходят жуткие косяки с текстурами?
как получается:
Изображение
как должно быть:
Изображение
ЖенькаАзаров M
Аватара
Откуда: Иркутская обл. г. Тулун
Сообщения: 34

Сообщение #156 andreymal » 17.06.2014, 11:47

Пути к текстурам при сохранении бьются из-за другого каталога?
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M В сети
Аватара
Сообщения: 1196

Сообщение #157 ЖенькаАзаров » 17.06.2014, 13:38

Пути к текстурам при сохранении бьются из-за другого каталога?
Да без понятия если честно, подскажи как посмотреть.

Добавлено спустя 17 минут 36 секунд:
Вот так вот.

Иногда немного падает, но в основном 60:
Изображение
ЖенькаАзаров M
Аватара
Откуда: Иркутская обл. г. Тулун
Сообщения: 34

Сообщение #158 dominatorus » 24.06.2014, 15:08

Есть сцена и оверлэй меню. как сделать так чтобы сенсор Mouse - Over не срабатывал на объекте, если тот перекрывается каким-нибудь элементом оверлэя?
dominatorus
Аватара
Сообщения: 64

  • 1

Сообщение #159 denis8424 » 24.06.2014, 15:33

dominatorus, если объектов на оверлее немного, то можно на каждый повесить сенсор MouseOver, который при срабатывании будет отправлять сообщение на игровую сцену. Получившие это сообщение объекты будут изменять свое проперти, или состояние State (лучше состояние) и соответственно, не будут реагировать на курсор мыши.
P.S. нужно еще на оверлейные объекты повесить дополнительно цепочку из негативного сенсора MouseOverAny(?) которая бы отправляла сообщение, что игровым объектам можно уже возвращаться в исходное состояние.
Или если объектов на оверлее много, то при наведении курсора мыши на объект в игровой сцене нужно скриптом проверить экранные координаты объектов на оверлейной сцене, если они находятся на каком-то расстоянии от экранных координат курсора, то можно считать, что объект на игровой сцене не перекрывается.
denis8424
Аватара
Сообщения: 724

Сообщение #160 dominatorus » 24.06.2014, 17:19

denis8424, спасибо за идею, только использовал глобальную переменную вместо сообщения

и попутный ворпрос :)
как и куда можно засунуть скрипт инициализации (объявление глобальных перемнных, загрузка настроек и т.п), который бы запускался только один раз, при старте игры?
dominatorus
Аватара
Сообщения: 64

Пред.След.

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

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

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