Класс sound object — различия между версиями

Материал из xrWiki
Перейти к: навигация, поиск
 
(не показаны 2 промежуточные версии 2 участников)
Строка 1: Строка 1:
 +
{{DISPLAYTITLE:Класс sound_object}}
 
=Описание класса из lua_help=
 
=Описание класса из lua_help=
 
<syntaxhighlight lang="cpp">C++ class sound_object {
 
<syntaxhighlight lang="cpp">C++ class sound_object {
Строка 88: Строка 89:
 
'''Описание параметров'''<br/>
 
'''Описание параметров'''<br/>
 
<code>obj</code> - игровой объект<br/>
 
<code>obj</code> - игровой объект<br/>
<code>timeout</code> - задержка перед проигрыванием звука<br/>
+
<code>timeout</code> - задержка перед проигрыванием звука (в секундах)<br/>
 
<code>position</code> - позиция<br/>
 
<code>position</code> - позиция<br/>
<code>volume</code> - громкость<br/>
+
<code>volume</code> - громкость (в диапазоне от 0.0 до 1.0)<br/>
 
<code>flags</code> - набор констант класса sound_object (looped, s2d, s3d)
 
<code>flags</code> - набор констант класса sound_object (looped, s2d, s3d)
 
==play==
 
==play==
Строка 113: Строка 114:
 
# в случае проигрывания в пространстве - параметр position устанавливает позицию проигрывания звука на уровне; необходимо использовать флаг s3d;
 
# в случае проигрывания в пространстве - параметр position устанавливает позицию проигрывания звука на уровне; необходимо использовать флаг s3d;
 
# если задано циклическое проигрывание звука, то оно не прекратится, даже если перезагрузить уровень;
 
# если задано циклическое проигрывание звука, то оно не прекратится, даже если перезагрузить уровень;
# громкость задается в интервале от 0.0 до 1.0;
 
 
# поскольку метод без обратной связи, в процессе проигрывания звука нельзя изменить его громкость, позицию, а также оставить проигрывание.
 
# поскольку метод без обратной связи, в процессе проигрывания звука нельзя изменить его громкость, позицию, а также оставить проигрывание.
 
Данный метод подходит для проигрывания не цикличных звуков, для который не требуется дальнейшее изменение параметров.
 
Данный метод подходит для проигрывания не цикличных звуков, для который не требуется дальнейшее изменение параметров.
Строка 121: Строка 121:
 
При использовании методов ''play'' и ''play_at_pos'' необходимо сохранять созданный звуковой объект во внешнюю локальную переменную, иначе сборщик мусора затрет звук.
 
При использовании методов ''play'' и ''play_at_pos'' необходимо сохранять созданный звуковой объект во внешнюю локальную переменную, иначе сборщик мусора затрет звук.
 
|}
 
|}
[[Категория:Скриптовый движок игры]]
+
 
 +
[[Категория:Движок]]

Текущая версия на 03:20, 11 сентября 2023

Описание класса из lua_help[править]

C++ class sound_object {
    const looped = 1; // зацикленность звука
    const s2d = 2; // играть в голове актора
    const s3d = 0; // играть в пространстве

    property frequency; // частота
    property max_distance; // максимальная дистанция слышимости
    property min_distance; // минимальная дистанция слышимости
    property volume; // громкость

    sound_object (string); // создание звукового объекта, в аргументе - путь до звукового файла
    sound_object (string, enum ESoundTypes); // тоже самое, что и предыдущее + установка типа звука

    function set_position(const vector&); // установить позицию звука
    function stop_deffered(); // отложенная остановка
    function get_position() const; // получить позицию звука
    function stop(); // остановка
    function length(); // получить длительность звука
    function playing() const; // играет ли звук в данный момент

    function play_no_feedback(game_object*, number, number, vector, number);
    function play_at_pos(game_object*, const vector&);
    function play_at_pos(game_object*, const vector&, number);
    function play_at_pos(game_object*, const vector&, number, number);
    function play(game_object*);
    function play(game_object*, number);
    function play(game_object*, number, number);
};

Описание ESoundTypes из движка игры[править]

enum ESoundTypes
{
  SOUND_TYPE_NO_SOUND = 0x0,
  SOUND_TYPE_WEAPON = 0x80000000,
  SOUND_TYPE_ITEM = 0x40000000,
  SOUND_TYPE_MONSTER = 0x20000000,
  SOUND_TYPE_ANOMALY = 0x10000000,
  SOUND_TYPE_WORLD = 0x8000000,
  SOUND_TYPE_PICKING_UP = 0x4000000,
  SOUND_TYPE_DROPPING = 0x2000000,
  SOUND_TYPE_HIDING = 0x1000000,
  SOUND_TYPE_TAKING = 0x800000,
  SOUND_TYPE_USING = 0x400000,
  SOUND_TYPE_SHOOTING = 0x200000,
  SOUND_TYPE_EMPTY_CLICKING = 0x100000,
  SOUND_TYPE_BULLET_HIT = 0x80000,
  SOUND_TYPE_RECHARGING = 0x40000,
  SOUND_TYPE_DYING = 0x20000,
  SOUND_TYPE_INJURING = 0x10000,
  SOUND_TYPE_STEP = 0x8000,
  SOUND_TYPE_TALKING = 0x4000,
  SOUND_TYPE_ATTACKING = 0x2000,
  SOUND_TYPE_EATING = 0x1000,
  SOUND_TYPE_IDLE = 0x800,
  SOUND_TYPE_OBJECT_BREAKING = 0x400,
  SOUND_TYPE_OBJECT_COLLIDING = 0x200,
  SOUND_TYPE_OBJECT_EXPLODING = 0x100,
  SOUND_TYPE_AMBIENT = 0x80,
  SOUND_TYPE_ITEM_PICKING_UP = 0x44000000,
  SOUND_TYPE_ITEM_DROPPING = 0x42000000,
  SOUND_TYPE_ITEM_HIDING = 0x41000000,
  SOUND_TYPE_ITEM_TAKING = 0x40800000,
  SOUND_TYPE_ITEM_USING = 0x40400000,
  SOUND_TYPE_WEAPON_SHOOTING = 0x80200000,
  SOUND_TYPE_WEAPON_EMPTY_CLICKING = 0x80100000,
  SOUND_TYPE_WEAPON_BULLET_HIT = 0x80080000,
  SOUND_TYPE_WEAPON_RECHARGING = 0x80040000,
  SOUND_TYPE_MONSTER_DYING = 0x20020000,
  SOUND_TYPE_MONSTER_INJURING = 0x20010000,
  SOUND_TYPE_MONSTER_STEP = 0x20008000,
  SOUND_TYPE_MONSTER_TALKING = 0x20004000,
  SOUND_TYPE_MONSTER_ATTACKING = 0x20002000,
  SOUND_TYPE_MONSTER_EATING = 0x20001000,
  SOUND_TYPE_ANOMALY_IDLE = 0x10000800,
  SOUND_TYPE_WORLD_OBJECT_BREAKING = 0x8000400,
  SOUND_TYPE_WORLD_OBJECT_COLLIDING = 0x8000200,
  SOUND_TYPE_WORLD_OBJECT_EXPLODING = 0x8000100,
  SOUND_TYPE_WORLD_AMBIENT = 0x8000080,
  SOUND_TYPE_WEAPON_PISTOL = 0x80000000,
  SOUND_TYPE_WEAPON_GUN = 0x80000000,
  SOUND_TYPE_WEAPON_SUBMACHINEGUN = 0x80000000,
  SOUND_TYPE_WEAPON_MACHINEGUN = 0x80000000,
  SOUND_TYPE_WEAPON_SNIPERRIFLE = 0x80000000,
  SOUND_TYPE_WEAPON_GRENADELAUNCHER = 0x80000000,
  SOUND_TYPE_WEAPON_ROCKETLAUNCHER = 0x80000000,
};

Методы проигрывания звуков[править]

Описание параметров
obj - игровой объект
timeout - задержка перед проигрыванием звука (в секундах)
position - позиция
volume - громкость (в диапазоне от 0.0 до 1.0)
flags - набор констант класса sound_object (looped, s2d, s3d)

play[править]

function play(obj);
function play(obj, timeout);
function play(obj, timeout, flags);
  1. методы с одним и двумя аргументами не работают;
  2. работает только для актора.

Метод годится только для проигрывания звуков в голове актора.

play_at_pos[править]

function play_at_pos(obj, position);
function play_at_pos(obj, position, timeout);
function play_at_pos(obj, position, timeout, flags);
  1. для метода с двумя аргументами, второй аргумент - это позиция на уровне. Звук не перемещается вместе с объектом, а остается играть там, где запустили. Работает и для актора и для других объектов;
  2. метод с тремя аргументами работает как и предыдущий, но появилась возможность установки таймаута;
  3. особенности метода с четырьмя аргументами:
    • для актора аргумент position - это смещение звука относительно актора. Звук смещается вместе с актором. Также, необходимо использовать флаг s2d (при s3d звука не будет);
    • для других объектов аргумент position является позицией на уровне. В этом случае необходимо использовать флаг s3d.

play_no_feedback[править]

function play_no_feedback(obj, flags, timeout, position, volume);
  1. в случае проигрывания в голове актора - параметр position устанавливает смещение относительно актора; звук перемещается вместе с актором; необходимо использовать флаг s2d (при s3d звука не будет);
  2. в случае проигрывания в пространстве - параметр position устанавливает позицию проигрывания звука на уровне; необходимо использовать флаг s3d;
  3. если задано циклическое проигрывание звука, то оно не прекратится, даже если перезагрузить уровень;
  4. поскольку метод без обратной связи, в процессе проигрывания звука нельзя изменить его громкость, позицию, а также оставить проигрывание.

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

Внимание!

При использовании методов play и play_at_pos необходимо сохранять созданный звуковой объект во внешнюю локальную переменную, иначе сборщик мусора затрет звук.