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

Материал из xrWiki
Перейти к: навигация, поиск
(Новая страница: «=Описание класса из lua_help= <syntaxhighlight lang="cpp">C++ class sound_object { const looped = 1; // зацикленность звука…»)
 
 
(не показаны 3 промежуточные версии 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==
Строка 96: Строка 97:
 
function play(obj, timeout);
 
function play(obj, timeout);
 
function play(obj, timeout, flags);</syntaxhighlight>
 
function play(obj, timeout, flags);</syntaxhighlight>
1) Методы с одним и двумя аргументами не работают.<br/>
+
# методы с одним и двумя аргументами не работают;
2) Работает только для актора.<br/>
+
# работает только для актора.
По сути, этот метод годится только для проигрывания звуков в голове актора.
+
Метод годится только для проигрывания звуков в голове актора.
 
==play_at_pos==
 
==play_at_pos==
 
<syntaxhighlight lang="lua">function play_at_pos(obj, position);
 
<syntaxhighlight lang="lua">function play_at_pos(obj, position);
 
function play_at_pos(obj, position, timeout);
 
function play_at_pos(obj, position, timeout);
 
function play_at_pos(obj, position, timeout, flags);</syntaxhighlight>
 
function play_at_pos(obj, position, timeout, flags);</syntaxhighlight>
1) Для метода с двумя аргументами, второй аргумент - это позиция на уровне. Звук не перемещается вместе с объектом, а остается играть там, где запустили. Работает и для актора и для других объектов.<br/>
+
# для метода с двумя аргументами, второй аргумент - это позиция на уровне. Звук не перемещается вместе с объектом, а остается играть там, где запустили. Работает и для актора и для других объектов;
2) Метод с тремя аргументами работает как и предыдущий, но появилась возможность установки таймаута.<br/>
+
# метод с тремя аргументами работает как и предыдущий, но появилась возможность установки таймаута;
3) Особенности метода с четырьмя аргументами:<br/>
+
# особенности метода с четырьмя аргументами:
- Для актора аргумент position - это смещение звука относительно актора. Звук смещается вместе с актором. Также, необходимо использовать флаг s2d (при s3d звука не будет).<br/>
+
#* для актора аргумент position - это смещение звука относительно актора. Звук смещается вместе с актором. Также, необходимо использовать флаг s2d (при s3d звука не будет);
- Для других объектов аргумент position является позицией на уровне. В этом случае необходимо использовать флаг s3d.
+
#* для других объектов аргумент position является позицией на уровне. В этом случае необходимо использовать флаг s3d.
 
==play_no_feedback==
 
==play_no_feedback==
 
<syntaxhighlight lang="lua">function play_no_feedback(obj, flags, timeout, position, volume);</syntaxhighlight>
 
<syntaxhighlight lang="lua">function play_no_feedback(obj, flags, timeout, position, volume);</syntaxhighlight>
1) Для актора аргумент position - это смещение звука относительно актора. Звук перемещается вместе с актором. Также, необходимо использовать флаг s2d (при s3d звука не будет).<br/>
+
# в случае проигрывания в голове актора - параметр position устанавливает смещение относительно актора; звук перемещается вместе с актором; необходимо использовать флаг s2d (при s3d звука не будет);
2) Для других объектов аргумент position является позицией на уровне. В этом случае необходимо использовать флаг s3d.<br/>
+
# в случае проигрывания в пространстве - параметр position устанавливает позицию проигрывания звука на уровне; необходимо использовать флаг s3d;
3) При наличии looped, звук продолжает циклически играть и после перезагрузки сейва.<br/>
+
# если задано циклическое проигрывание звука, то оно не прекратится, даже если перезагрузить уровень;
4) Громкость задается в диапазоне от 0.0 до 1.0.<br/>
+
# поскольку метод без обратной связи, в процессе проигрывания звука нельзя изменить его громкость, позицию, а также оставить проигрывание.
5) Для этого метода не работает дальнейшее изменение каких-либо параметров, в т.ч. и остановка<br/>
+
Данный метод подходит для проигрывания не цикличных звуков, для который не требуется дальнейшее изменение параметров.
Фактически не подходит для проигрывания зацикленных звуков.
+
{| style="background-color: #fffdee;" width="100%"
 +
|<span style="color:#172172;">'''Внимание!'''</span>
 +
----
 +
При использовании методов ''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 необходимо сохранять созданный звуковой объект во внешнюю локальную переменную, иначе сборщик мусора затрет звук.