Всем привет. Ребята, помогите советом или фрагментом кода изменить количество пропускаемых тиков в сенсоре.
Как пример. Нажал на клавишу когда скорость такая-то, то количество пропускаемых тиков в сенсоре такое.
Board index › Геймдев в Blender › Игровой движок Blender
Wegemu, спасибо за попытку помочь, но с моими знаниями она оказалась недостаточной. Попробовал получить сенсор через контроллер - неудачно. Попробовал получить по типу получения контроллера:Wegemu wrote:sensor.skippedTicks
Wegemu, спасибо за попытку помочь, но с моими знаниями она оказалась недостаточной. Попробовал получить сенсор через контроллер - неудачно. Попробовал получить по типу получения контроллера:
sens = bge.logic.getCurrentSensor("Gas")
опять меня Python отматерил:
AttributeError: module 'GameLogic' has no attribute 'getCurrentSensor'
Как это сделать по уму, чтобы Python не матерился?
И ещё, значение как ввести, как равно числу? sensor.skippedTicks = 25 - так?
from bge import logic
cont = logic.getCurrentController()
sens = cont.sensors['Gas']
sens.skippedTicks = 25
Спасибо за помощь Wegemu. В слове sensors "s" в конце не поставил, вот он меня и ругал.Wegemu wrote:sens = cont.sensors['Gas']
Посмотрел и разочаровался. Wegemu, была идея изменять тембр цикличного звукового файла, т.е. за счёт изменения количества пропуска тиков учащать/замелять воспроизведение файла. Ожидал своего рода влияния на частоту звука. От 1 до 100 тиков попробовал, но ожидаемого эффекта не услышал (если честно, то вообще никакого эффекта не услышал).Август wrote:Завтра, внимательнее, по месту, посмотрю.
Посмотрел и разочаровался. Wegemu, была идея изменять тембр цикличного звукового файла, т.е. за счёт изменения количества пропуска тиков учащать/замелять воспроизведение файла. Ожидал своего рода влияния на частоту звука. От 1 до 100 тиков попробовал, но ожидаемого эффекта не услышал (если честно, то вообще никакого эффекта не услышал).
Wegemu или кто-то, кто читает, вы можете подсказать что-то, что в состоянии в BGE работать как генератор переменных звуковых частот, или как тот же молоток по рельсе с частотой от 20 до 2000 ударов в секунду?
Надеюсь и жду.
В том то и дело что хочу уйти от блоков. Пример посмотрел и даже попробовал прокомментировать его, но почти сразу застрял:Wegemu wrote:Странные хотелки. Каким образом воспроизводится файл? Если через логические блоки, то так можно только воспроизвести файл и ничего более. Чтобы менять тембр нужно использовать модуль aud (метод pitch у класса handle). Пример: sound_test_279.blend
from bge import logic, events # импортируем модуль для доступа к логическим функциям
import aud # импортируем модуль aud (звук)
# ==============================
mouse = logic.mouse # получить логику мыши
scene = logic.getCurrentScene() # получить активную сцену
# ==============================
device = aud.device() # получить aud устройство
device.distance_model = aud.AUD_DISTANCE_MODEL_LINEAR # получить расстояние для расчета затухания
device.listener_location = scene.active_camera.worldPosition
device.volume = 1.0 # получить значение силы звука для устройства звука
# ==============================
FREQ = 1000
PITCH_ITER = 0.05
HANDLES = []
# ==============================
def play_sine():
alarm = aud.Factory.sine(FREQ)
handle = device.play(alarm)
handle.relative = False
handle.distance_maximum = 50
handle.distance_reference = 10
HANDLES.append(handle)
# ==============================
def change_pitch():
handle = HANDLES[0]
for key, status in mouse.active_events.items():
if status == logic.KX_INPUT_ACTIVE:
if key == events.WHEELUPMOUSE:
handle.pitch += PITCH_ITER
if key == events.WHEELDOWNMOUSE:
pitch = handle.pitch
if pitch:
pitch -= PITCH_ITER
if pitch < 0.0:
pitch = 0.0
handle.pitch = pitch
from bge import logic, events
import aud
# ==============================
mouse = logic.mouse
scene = logic.getCurrentScene()
# ==============================
device = aud.device()
device.distance_model = aud.AUD_DISTANCE_MODEL_LINEAR
device.listener_location = scene.active_camera.worldPosition
device.volume = 1.0
# ==============================
FREQ = 1000 # частота генерируемой синусоиды (пример, для готовых звуков не нужно)
PITCH_ITER = 0.05 # приращение изменения частоты (тональности)
HANDLES = [] # список хэндлов всех воспроизводимых звуков
# (опционально для управления звуками в процессе)
# ==============================
def play_sine():
'''генерация синусоиды c частотой FREQ'''
alarm = aud.Factory.sine(FREQ)
handle = device.play(alarm) # воспроизвести сгенерированный звук и получить его хэндл
# 3D звук
handle.relative = False
handle.distance_maximum = 50 # макс. дистанция от источника, на которой звук затихает до 0
handle.distance_reference = 10 # мин. дистанция от источника, на которой громкость звука равна 1
HANDLES.append(handle) # добавляем хэндл в список для хранения и последующего обращения
# (если нужно)
# ==============================
def change_pitch():
'''изменения частоты (тональности) звука'''
handle = HANDLES[0] # берем нужный хэндл (для примера он у нас только один в списке)
# управление мышью
for key, status in mouse.active_events.items():
if status == logic.KX_INPUT_ACTIVE:
if key == events.WHEELUPMOUSE:
handle.pitch += PITCH_ITER
if key == events.WHEELDOWNMOUSE:
pitch = handle.pitch
# если тон > 0.0 вычитаем из него приращение PITCH_ITER
# и если тон стал отрицательным (погрешность вычисления операций с
# вещественными числами в Python :)), то присваиваем тону 0.0
if pitch:
pitch -= PITCH_ITER
if pitch < 0.0:
pitch = 0.0
handle.pitch = pitch
Return to Игровой движок Blender
Users browsing this forum: 1 guest