Изменение количества пропускаемых тиков в сенсоре через скрипт

Список разделов Геймдев в Blender Игровой движок Blender

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

Сообщение #1 Август » 08.01.2019, 15:17

Всем привет. Ребята, помогите советом или фрагментом кода изменить количество пропускаемых тиков в сенсоре.
Как пример. Нажал на клавишу когда скорость такая-то, то количество пропускаемых тиков в сенсоре такое.
Август M
Сообщения: 163

Сообщение #2 Wegemu » 08.01.2019, 16:15

When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

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

Сообщение #3 Август » 08.01.2019, 17:21

Wegemu писал(а):sensor.skippedTicks
Wegemu, спасибо за попытку помочь, но с моими знаниями она оказалась недостаточной. Попробовал получить сенсор через контроллер - неудачно. Попробовал получить по типу получения контроллера:
sens = bge.logic.getCurrentSensor("Gas")
опять меня Python отматерил:
AttributeError: module 'GameLogic' has no attribute 'getCurrentSensor'
Как это сделать по уму, чтобы Python не матерился?
И ещё, значение как ввести, как равно числу? sensor.skippedTicks = 25 - так?
Август M
Сообщения: 163

Сообщение #4 Wegemu » 08.01.2019, 17:33

Wegemu, спасибо за попытку помочь, но с моими знаниями она оказалась недостаточной. Попробовал получить сенсор через контроллер - неудачно. Попробовал получить по типу получения контроллера:
sens = bge.logic.getCurrentSensor("Gas")
опять меня Python отматерил:
AttributeError: module 'GameLogic' has no attribute 'getCurrentSensor'
Как это сделать по уму, чтобы Python не матерился?
И ещё, значение как ввести, как равно числу? sensor.skippedTicks = 25 - так?

Нужно API хотя бы открывать. Методом тыка вряд ли что-то выйдет. :)

Код: Выделить всё
from bge import logic

cont = logic.getCurrentController()
sens = cont.sensors['Gas']

sens.skippedTicks = 25
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

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

Сообщение #5 Август » 08.01.2019, 18:33

Wegemu писал(а):sens = cont.sensors['Gas']
Спасибо за помощь Wegemu. В слове sensors "s" в конце не поставил, вот он меня и ругал.
А, так, вроде заработало. Завтра, внимательнее, по месту, посмотрю.
Удачи и с наступившим.
Август M
Сообщения: 163

Сообщение #6 Август » 09.01.2019, 20:27

Август писал(а):Завтра, внимательнее, по месту, посмотрю.
Посмотрел и разочаровался. Wegemu, была идея изменять тембр цикличного звукового файла, т.е. за счёт изменения количества пропуска тиков учащать/замелять воспроизведение файла. Ожидал своего рода влияния на частоту звука. От 1 до 100 тиков попробовал, но ожидаемого эффекта не услышал (если честно, то вообще никакого эффекта не услышал).
Wegemu или кто-то, кто читает, вы можете подсказать что-то, что в состоянии в BGE работать как генератор переменных звуковых частот, или как тот же молоток по рельсе с частотой от 20 до 2000 ударов в секунду?
Надеюсь и жду.
Август M
Сообщения: 163

Сообщение #7 Wegemu » 09.01.2019, 21:56

Посмотрел и разочаровался. Wegemu, была идея изменять тембр цикличного звукового файла, т.е. за счёт изменения количества пропуска тиков учащать/замелять воспроизведение файла. Ожидал своего рода влияния на частоту звука. От 1 до 100 тиков попробовал, но ожидаемого эффекта не услышал (если честно, то вообще никакого эффекта не услышал).
Wegemu или кто-то, кто читает, вы можете подсказать что-то, что в состоянии в BGE работать как генератор переменных звуковых частот, или как тот же молоток по рельсе с частотой от 20 до 2000 ударов в секунду?
Надеюсь и жду.

Странные хотелки. Каким образом воспроизводится файл? Если через логические блоки, то так можно только воспроизвести файл и ничего более. Чтобы менять тембр нужно использовать модуль aud (метод pitch у класса handle). Пример: sound_test_279.blend

Запускаем файл, крутим колесиком мыши.
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

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

Сообщение #8 Август » 11.01.2019, 18:58

Wegemu писал(а):Странные хотелки. Каким образом воспроизводится файл? Если через логические блоки, то так можно только воспроизвести файл и ничего более. Чтобы менять тембр нужно использовать модуль 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
Wegemu, если не затруднит прокомментировать строки кода, то осчастливьте.
Дело в том, что код интересен, но пока его применить не могу. Боюсь, что когда он станет для меня актуальным, может быть так, что не смогу обратиться за разъяснением по каким-либо причинам.
Август M
Сообщения: 163

Сообщение #9 Wegemu » 12.01.2019, 00:40

https://docs.blender.org/api/2.79b/aud.html

Код: Выделить всё
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
                   
When debugging, novices insert corrective code; experts remove defective code.
VEゲーム

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

Сообщение #10 Август » 14.01.2019, 08:01

Wegemu писал(а):
Wegemu » 12.01.2019, 01:40

https://docs.blender.org/api/2.79b/aud.html
Wegemu, я вам очень и очень благодарен за помощь. Всего вам самого наилучшего.
Август M
Сообщения: 163


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

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

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