Difference between revisions of "love.math.newTransform"

m (0.11.0 -> 11.0)
(Examples)
 
(One intermediate revision by one other user not shown)
Line 9: Line 9:
 
</source>
 
</source>
 
=== Arguments ===
 
=== Arguments ===
None
+
None.
 +
 
 
=== Returns ===
 
=== Returns ===
 
{{param|Transform|transform|The new Transform object.}}
 
{{param|Transform|transform|The new Transform object.}}
Line 33: Line 34:
  
 
== Examples ==
 
== Examples ==
Creates a new Transform object and uses it to position and rotate a rectangle around its center.
+
Creates a new Transform object and uses it to position and rotate a rectangle around its center:
 
<source lang="lua">
 
<source lang="lua">
 
function love.load()
 
function love.load()
Line 48: Line 49:
 
end
 
end
 
</source>
 
</source>
 +
 +
 +
Creates two rectangles and rotates it around its center:
 +
<source lang="lua">
 +
local function createTransform(rect)
 +
local transform = love.math.newTransform()
 +
transform:translate(rect.x + rect.width/2, rect.y + rect.height/2)
 +
transform:rotate(rect.rotation)
 +
return transform
 +
end
 +
 +
function love.load()
 +
rect1 = {x=100, y=100, width=200, height=200, rotation=1}
 +
rect1.transform = createTransform(rect1)
 +
rect2 = {x=300, y=100, width=200, height=100, rotation=0.1}
 +
rect2.transform = createTransform(rect2)
 +
end
 +
 +
function love.draw()
 +
for i, rectangle in ipairs ({rect1, rect2}) do
 +
love.graphics.push()
 +
love.graphics.applyTransform(rectangle.transform)
 +
love.graphics.rectangle("line", -rectangle.width/2, -rectangle.height/2, rectangle.width, rectangle.height)
 +
love.graphics.pop()
 +
-- the line shows the middle of the rectangle:
 +
love.graphics.line (0, 0, rectangle.x+rectangle.width/2, rectangle.y+rectangle.height/2)
 +
end
 +
end
 +
</source>
 +
 
== See Also ==
 
== See Also ==
 
* [[parent::love.math]]
 
* [[parent::love.math]]

Latest revision as of 11:05, 24 February 2023

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

Creates a new Transform object.

Function

Creates a Transform with no transformations applied. Call methods on the returned object to apply transformations.

Synopsis

transform = love.math.newTransform( )

Arguments

None.

Returns

Transform transform
The new Transform object.

Function

Creates a Transform with the specified transformation applied on creation.

Synopsis

transform = love.math.newTransform( x, y, angle, sx, sy, ox, oy, kx, ky )

Arguments

number x
The position of the new Transform on the x-axis.
number y
The position of the new Transform on the y-axis.
number angle (0)
The orientation of the new Transform in radians.
number sx (1)
Scale factor on the x-axis.
number sy (sx)
Scale factor on the y-axis.
number ox (0)
Origin offset on the x-axis.
number oy (0)
Origin offset on the y-axis.
number kx (0)
Shearing / skew factor on the x-axis.
number ky (0)
Shearing / skew factor on the y-axis.

Returns

Transform transform
The new Transform object.

Examples

Creates a new Transform object and uses it to position and rotate a rectangle around its center:

function love.load()
    rectwidth = 100
    rectheight = 100

    -- arguments are: x, y, angle, scalex, scaley, offsetx, offsety
    transform = love.math.newTransform(100, 100, math.pi/4, 1, 1, rectwidth / 2, rectheight / 2)
end

function love.draw()
    love.graphics.applyTransform(transform)
    love.graphics.rectangle("fill", 0, 0, rectwidth, rectheight)
end


Creates two rectangles and rotates it around its center:

local function createTransform(rect)
	local transform = love.math.newTransform()
	transform:translate(rect.x + rect.width/2, rect.y + rect.height/2)
	transform:rotate(rect.rotation)
	return transform
end

function love.load()
	rect1 = {x=100, y=100, width=200, height=200, rotation=1}
	rect1.transform = createTransform(rect1)
	rect2 = {x=300, y=100, width=200, height=100, rotation=0.1}
	rect2.transform = createTransform(rect2)
end

function love.draw()
	for i, rectangle in ipairs ({rect1, rect2}) do
		love.graphics.push()
			love.graphics.applyTransform(rectangle.transform)
			love.graphics.rectangle("line", -rectangle.width/2, -rectangle.height/2, rectangle.width, rectangle.height)
		love.graphics.pop()
		-- the line shows the middle of the rectangle:
		love.graphics.line (0, 0, rectangle.x+rectangle.width/2, rectangle.y+rectangle.height/2)
	end
end

See Also

Other Languages