denis8424 писал(а):Однако теперь при каждом запуске скрипта опять будет происходить создание нового набора, но только обьект ручек будет постоянно перезаписываться в свойство объекта, а старое оттуда удаляться. То есть нужно организовать проверку наличия проперти у обьекта. Правильно получить список имен проперти объекта с помощью функции bge.types.KX_GameObject.getPropertyNames и проверить входит ли в него интересующее нас имя с помощью оператора in.
КОД: ВЫДЕЛИТЬ ВСЁ
if sensorR.positive:
# если проперти с таким именем у объекта нет, то создаем проперти и наш набор звук, фабрика, устройство
if 'sound_handle' not in own.getPropertyNames():
sound = aud.Factory.file(bge.logic.expandPath('//Звук2.mp3')) # получить файл звука2
sound_device = aud.device() # получить устройство звука
Добрый день Денис. При запуске кода получил:
- Код: Выделить всё
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Svuk
14=====sensG.positive == False sensR.positive == False car[GasRev] == 0
Python script error - object 'Car', controller 'Python.006':
Traceback (most recent call last):
File "Svuk", line 22, in <module>
KeyError: 'value = gameOb[key]: KX_GameObject, key "sound_handle" does not exist
Решил в стартовом скрипте получить первый набор звука, чтобы уйти от ошибки таким кодом:
- Код: Выделить всё
if 'sound_handle' not in own.getPropertyNames(): # если свойства с таким именем у объекта нет, то ...
sound = aud.Factory.file(bge.logic.expandPath('//Звук2.mp3')) # ... создаем свойство и наш файл звука запуска двигателя
sound_device = aud.device() # получить устройство звука
print("64======Start == sound", sound)
однако запускать звук не стал. Посчитал что возможно запустить в звуковом скрипте.
Нарисовалась такая картинка:
Blender Game Engine Started
- Код: Выделить всё
7!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Start
62======Start == sound_handle not in own.getPropertyNames() True
64======Start == sound <aud.Factory object at 0x000000000CA09B10>
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Svuk
14=====sensG.positive == False sensR.positive == False car[GasRev] == 0
Python script error - object 'Car', controller 'Python.006':
Traceback (most recent call last):
File "Svuk", line 22, in <module>
KeyError: 'value = gameOb[key]: KX_GameObject, key "sound_handle" does not exist
Консоль утверждает что при старте звуковой файл получен, но в скрипте Svuk отсутствует и с упорством маньяка твердит об этом при каждом обращении к скрипту Svuk.
Однако после нажатия на клавишу ошибка пропадает. Конечно можно сделать при первом обращении к скрипту Svuk, при отсутствии нажатия на клавиши объявление первого набора звука, но мой вопрос о другом. И в документации, и ты утверждаешь что "отработавшая фабрика скорее всего остается висеть в памяти, порождая утечку памяти", которую я не вижу, ведь ошибка говорит об отсутствии "sound_handle".
Я что-то недопонимаю?
Да, ещё, в коде own, это own = cont.owner?
Жду ответа, как соловей лета.