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

Board index Геймдев в Blender Игровой движок Blender

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

  • 0

Post #1by exooman » 25.01.2014, 14:45

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


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



Post #141by rek_on » 30.04.2014, 09:24

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

Post #142by rek_on » 22.05.2014, 08:16

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

Spoiler
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
Posts: 9

  • 1

Post #143by andreymal » 22.05.2014, 08:27

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

Post #144by rek_on » 23.05.2014, 08:07

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

Post #145by denis8424 » 23.05.2014, 10:39

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

Post #146by 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
Posts: 9

Post #147by denis8424 » 26.05.2014, 15:15

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

  • 1

Post #148by Wegemu » 26.05.2014, 19:41

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

Активировать контроллер нельзя (да и незачем, он всегда активен и проверяет состояние сенсоров)
Пример:
Code: Select all
# контроллер объекта
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
Avatar
Posts: 62

Post #149by ЖенькаАзаров » 08.06.2014, 04:52

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

  • 1

Post #150by andreymal » 08.06.2014, 08:31

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

Post #151by ЖенькаАзаров » 08.06.2014, 12:09

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

  • 2

Post #152by exooman » 08.06.2014, 12:33

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


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

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

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


Post #153by andreymal » 08.06.2014, 20:10

exooman wrote:в скрипте прописываешь world-координаты по нужной оси для объекта
Не, ну это уже совсем извращение
Читая эту подпись, вы впустую потратили 5 секунд своей жизни.
andreymal M
Avatar
Posts: 1195

Post #154by ЖенькаАзаров » 13.06.2014, 06:56

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

Added after 20 minutes 18 seconds:
Уже нашёл. В аддоне 115 строку надо удалить просто.
Attachments
Ошибка.jpg
ЖенькаАзаров M
Avatar
Location: Иркутская обл. г. Тулун
Posts: 34

Post #155by ЖенькаАзаров » 17.06.2014, 10:32

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

Post #156by andreymal » 17.06.2014, 11:47

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

Post #157by ЖенькаАзаров » 17.06.2014, 13:38

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

Added after 17 minutes 36 seconds:
Вот так вот.

Иногда немного падает, но в основном 60:
Image
ЖенькаАзаров M
Avatar
Location: Иркутская обл. г. Тулун
Posts: 34

Post #158by dominatorus » 24.06.2014, 15:08

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

  • 1

Post #159by denis8424 » 24.06.2014, 15:33

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

Post #160by dominatorus » 24.06.2014, 17:19

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

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

PreviousNext

Return to Игровой движок Blender

Who is online (over the past 5 minutes)

Users browsing this forum: 2 guests