Difference between revisions of "Source:setRelative"

m (Remove superfluous line of code.)
(Improved code example.)
Line 15: Line 15:
 
This example demonstrates how an absolute source is affected by the position of the listener.
 
This example demonstrates how an absolute source is affected by the position of the listener.
 
<source lang="lua">
 
<source lang="lua">
-- The position of the listener.
+
local x, y, z = 0, 0, 0;
local x, y, z;
 
 
 
-- The sound to play.
 
 
local snd;
 
local snd;
 +
local relative;
  
 
function love.load()
 
function love.load()
     snd = love.audio.newSource('example.ogg', 'static')
+
     snd = love.audio.newSource('beep.wav', 'static')
 
     snd:setLooping(true);
 
     snd:setLooping(true);
 
     snd:play();
 
     snd:play();
  
     -- Set the position of the listener and the source to the middle of the screen.
+
     -- By default the sound is not relative.
     x = love.graphics.getWidth() * 0.5;
+
     relative = snd:isRelative();
    y = love.graphics.getHeight() * 0.5;
 
    z = 0;
 
    love.audio.setPosition(x, y, z);
 
    snd:setPosition(x, y, z);
 
 
end
 
end
  
-- Move the listener to the left ('a') or to the right ('d').
 
 
function love.keypressed(key)
 
function love.keypressed(key)
 +
    -- Move the listener via WASD.
 
     if key == 'a' then
 
     if key == 'a' then
 
         x = x - 1;
 
         x = x - 1;
        love.audio.setPosition(x, y, z);
 
 
     elseif key == 'd' then
 
     elseif key == 'd' then
 
         x = x + 1;
 
         x = x + 1;
         love.audio.setPosition(x, y, z);
+
    elseif key == 'w' then
 +
         y = y - 1;
 +
    elseif key == 's' then
 +
        y = y + 1;
 
     end
 
     end
 +
    love.audio.setPosition(x, y, z);
 +
 +
    -- Toggle between a relative and absolute source.
 +
    if key == 'r' then
 +
        relative = snd:isRelative();
 +
        snd:setRelative(not relative);
 +
    end
 +
end
 +
 +
function love.draw()
 +
    love.graphics.print('Relative: ' .. tostring(relative), 20, 20);
 +
    love.graphics.print('Listener: (x = ' .. x .. ', y = ' .. y .. ')', 20, 40);
 
end
 
end
 
</source>
 
</source>

Revision as of 15:57, 30 September 2014

Available since LÖVE 0.9.0
This function is not supported in earlier versions.

Sets whether the Source's position, velocity, direction, and cone angles are relative to the listener, or absolute.

By default, all sources are absolute and therefore relative to the origin of love's coordinate system [0, 0, 0]. Only absolute sources are affected by the position of the listener.

Function

Synopsis

Source:setRelative( enable )

Arguments

boolean enable ("false")
True to make the position, velocity, direction and cone angles relative to the listener, false to make them absolute.

Returns

Nothing.

Absolute Source Demonstration

This example demonstrates how an absolute source is affected by the position of the listener.

local x, y, z = 0, 0, 0;
local snd;
local relative;

function love.load()
    snd = love.audio.newSource('beep.wav', 'static')
    snd:setLooping(true);
    snd:play();

    -- By default the sound is not relative.
    relative = snd:isRelative();
end

function love.keypressed(key)
    -- Move the listener via WASD.
    if key == 'a' then
        x = x - 1;
    elseif key == 'd' then
        x = x + 1;
    elseif key == 'w' then
        y = y - 1;
    elseif key == 's' then
        y = y + 1;
    end
    love.audio.setPosition(x, y, z);

    -- Toggle between a relative and absolute source.
    if key == 'r' then
        relative = snd:isRelative();
        snd:setRelative(not relative);
    end
end

function love.draw()
    love.graphics.print('Relative: ' .. tostring(relative), 20, 20);
    love.graphics.print('Listener: (x = ' .. x .. ', y = ' .. y .. ')', 20, 40);
end

See Also

Other Languages