Как добавить объект на некоторый промежуток времени

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

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

Post #1by Август » 11.12.2018, 10:05

Всем привет. Знатоки Python подскажите пожалуйста как можно в
addObject(объект, ссылка, время=0)
добавить объект на определённое время. Ругает Python меня за то, что я ему ссылку не даю.
Объект и время вроде его устраивают.
Август M
Posts: 163

Post #2by Bibo » 11.12.2018, 12:10

Повесить вот такую логику на добавляемый объект

Image

Объект будет удален через 5 секунд (поле Value у сенсора) после добавления.
Bibo
Avatar
Posts: 604

Post #3by Август » 11.12.2018, 15:59

Bibo wrote:Объект будет удален через 5 секунд (поле Value у сенсора) после добавления.
Спасибо за попытку помочь, но так я умею пользоваться. Bibo, я спрашиваю как это можно сделать в скрипте, т.е. через Python.
Вот, например строка:
ob = sc.addObject(sl) # получить объект sl в сцену
добавляет объект sl в сцену, но без ограничения нахождения объекта в сцене, т.е. бессрочно.
Так вот мой вопрос как получить в скрипте объект, например на 50 кадров или строго на 71, но не через кирпичи. Получить объект на время значения какой-то переменной.
Как полученному объекту установить ещё и время жизни?
Строка: addObject(объект, ссылка, время=0), параметры объект и время понимает, но требует ссылку. Что это такое, ссылка, и на что она, непонятно - это одно дело, а другое, интересно вообще понять как можно обходить выборочно параметры, например, использовать первый и третий, а второй игнорировать.
Last edited by Август on 11.12.2018, 16:13, edited 1 time in total.
Август M
Posts: 163

Post #4by Wegemu » 11.12.2018, 16:06

Так вот мой вопрос как получить в скрипте объект, например на 50 кадров или строго на 71, но не через кирпичи. Получить объект на время значения какой-то переменной. Как полученному объекту установить ещё и время жизни
Code: Select all
scene.addObject("obj_name", "to_obj_name", lifetime)
либо
Code: Select all
scene.addObject("obj_name", lifetime)
где lifetime = 50 или 71.

Объект удаляется через 50 или 71 кадр соответственно. lifetime = 0 добавить объект "с бесконечной жизнью".

https://pythonapi.upbge.org/bge.types.KX_Scene.html#KX_Scene.addObject
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

Ушел в поисках приключений в страну GLSL.
Wegemu M
Avatar
Posts: 62

Post #5by Август » 11.12.2018, 16:21

Wegemu wrote:КОД: ВЫДЕЛИТЬ ВСЁ
scene.addObject("obj_name", lifetime)
где lifetime = 50 или 71.
Wegemu, уже пробовал такой вариант, ругает питон меня так:
TypeError: scene.addObject(object, reference, time): KX_Scene (second argument), expect a KX_GameObject, a string or None
Август M
Posts: 163

Post #6by Bibo » 11.12.2018, 16:25

Август wrote:Так вот мой вопрос как получить в скрипте объект, например на 50 кадров или строго на 71, но не через кирпичи. Получить объект на время значения какой-то переменной. Как полученному объекту установить ещё и время жизни
Значит я неправильно понял. Ругается потому что принимает 3 аргумента. В твоем случае на место referece нужно передать None
Code: Select all
addObject(объект, None, время)
Bibo
Avatar
Posts: 604

Post #7by Август » 11.12.2018, 16:30

Bibo wrote:Значит я неправильно понял. Ругается потому что принимает 3 аргумента. В твоем случае на место referece нужно передать None
Вместо ссылки поставил "None", проблема и решилась. Всем спасибо за помощь. На последок, что это за параметр, что это за ссылка, на что она?
Август M
Posts: 163

Post #8by Wegemu » 11.12.2018, 16:42

Значит я неправильно понял. Ругается потому что принимает 3 аргумента. В твоем случае на место referece нужно передать None
Что-то и я специально пропустил второй аргумент) Переработал немного)

Вместо ссылки поставил "None", проблема и решилась. Всем спасибо за помощь. На последок, что это за параметр, что это за ссылка, на что она?
Это имя объекта в позиции (ориентации и масштабе) которого появится добавляемый объект.

Code: Select all
scene.addObject(object, reference, time=0.0)

Например object это объект куб с именем "cube", reference - пустышка (Empty) с именем "p_spawn".

Code: Select all
scene.addObject("cube", "p_spawn", 120.0)
Добавит куб в позицию пустышки на 2 секунды (60 кадров = 1 сек по умолчанию), ориентация в пространстве и масштаб куба будут как у пустышки (например если пустышку до добавления повернули по оси Z на 45 градусов и увеличили масштаб в 2 раза, то и куб будет также повернутым и масштабированным). То бишь можно добавлять объекты в произвольные координаты на уровне в игре переставляя пустышку.
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

Ушел в поисках приключений в страну GLSL.
Wegemu M
Avatar
Posts: 62

Post #9by Август » 11.12.2018, 16:46

Wegemu wrote:Добавит куб в позицию пустышки на 2 секунды (60 кадров = 1 сек по умолчанию), ориентация в пространстве и масштаб куба будут как у пустышки (например если пустышку до добавления повернули по оси Z на 45 градусов и увеличили масштаб в 2 раза, то и куб будет также повернутым и масштабированным). То бишь можно добавлять объекты в произвольные координаты на уровне в игре переставляя пустышку.
Отлично, спасибо за пояснения, а то я в документации так и не понял смысла этого параметра.
Август M
Posts: 163

Post #10by Bibo » 11.12.2018, 17:30

Wegemu wrote:Добавит куб в позицию пустышки на 2 секунды (60 кадров = 1 сек по умолчанию)
Не стоит делать таких сравнений, FPS нестабильный параметр к которому лучше такие исчисления не применять.
Bibo
Avatar
Posts: 604

Post #11by Wegemu » 12.12.2018, 02:06

Не стоит делать таких сравнений, FPS нестабильный параметр к которому лучше такие исчисления не применять.

Поправочка. В UPBGE 1 секунда = 50 фреймам и не зависит от текущего FPS (хоть 120, хоть 5).

UPD. Точнее для параметра time в методе addObject и всего что зависит от внутреннего таймера. "Тики" у сенсоров приклеены к FPS и плавают, да.
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

Ушел в поисках приключений в страну GLSL.
Wegemu M
Avatar
Posts: 62

Post #12by Август » 13.12.2018, 09:06

Wegemu wrote:Поправочка. В UPBGE 1 секунда = 50 фреймам и не зависит от текущего FPS (хоть 120, хоть 5).
Ещё раз спасибо за пояснения. Удачи всем и замечательных идей!
Август M
Posts: 163


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

Who is online (over the past 5 minutes)

Users browsing this forum: 1 guest