Difference between revisions of "love.graphics.rotate (日本語)"

(Created page with "二次元座標系を回転させます。 この関数を呼び出すと指定された弧度の量により原点の周囲にある座標系の回転を行うため以降...")
 
m
 
(One intermediate revision by the same user not shown)
Line 30: Line 30:
 
love.graphics.setPointSize(5)
 
love.graphics.setPointSize(5)
 
love.graphics.setColor(0, 0, 0xff)
 
love.graphics.setColor(0, 0, 0xff)
love.graphics.point(width/2, height/2)
+
love.graphics.points(width/2, height/2)
 
end
 
end
  
Line 38: Line 38:
 
angle = angle % (2*math.pi)
 
angle = angle % (2*math.pi)
 
end
 
end
 +
</source>
 +
 +
=== 画面全体の回転 ===
 +
この用例では画面を反時計回り90度回転する方法を示します。常に横向きの画面で起動するゲームでAndroid 用の .love ファイルを配布する場合は、特に有用です。この処理後は、 Canvas の幅と高さは "交換" が行われます。常に入力の解釈を行い、それに応じて全ての画面境界に対する明確な確認を怠らないでください。
 +
<source lang="lua">
 +
function love.load()
 +
-- デスクトップではなく、キャンバスの幅と高さを取得します。
 +
width, height = love.graphics.getWidth(), love.graphics.getHeight()
 +
end
 +
 +
function love.draw()
 +
love.graphics.translate(width/2, height/2)
 +
love.graphics.rotate(-math.pi / 2)
 +
love.graphics.translate(-height/2, -width/2)
 +
 +
love.graphics.setColor(255, 0, 0)
 +
love.graphics.points(0, 0)
 +
-- 1 ピクセルの点を観測するには拡大が必要となりますが、その動作を示すために行います。
 +
end
 +
 +
-- 例えば、マウスの入力を解釈するための簡単な関数
 +
local function translate(_x, _y)
 +
local y = _x
 +
local x = height - _y
 +
 +
return x, y
 +
end
 +
--[[
 +
-- 上述のように、解釈システムで、 love.graphics.rectangle("fill", 150, 170, 125, 145) を示してください。
 +
-- マウス入力として translate(x, y) が必要であり x は [150, 275] の範囲内、
 +
-- y は [170, 315] の範囲内として確認をします。幅と高さの反転は不要です。
 +
--]]
 
</source>
 
</source>
  

Latest revision as of 08:17, 8 August 2017

二次元座標系を回転させます。

この関数を呼び出すと指定された弧度の量により原点の周囲にある座標系の回転を行うため以降の全描画操作に影響します。この変更は love.draw() の終端まで継続します。

関数

概要

love.graphics.rotate( angle )

引数

number angle
弧度による座標系の回転量。

返値

ありません。

用例

静止場面の回転

この用例では指定された点の周囲の静止場面を回転する方法を示します。常に原点の周囲で回転が行われ、回転操作の後部周囲を画面中心の原点として平行移動することにより有効な回転地点を画面中央として設定します。これは回転を与える長方形の描画および場面の回転時において、ちょうど中心にある点は不動であるという実証です。描画命令には単に画面上の大きさに依存する座標があることに注意してください。

local angle = 0

function love.draw()
	local width = love.graphics.getWidth()
	local height = love.graphics.getHeight()
	-- 弧度の角度により画面中心より周辺を回転します。
	love.graphics.translate(width/2, height/2)
	love.graphics.rotate(angle)
	love.graphics.translate(-width/2, -height/2)
	--  中心から少し離れたところに白色の長方形を描画します。
	love.graphics.setColor(0xff, 0xff, 0xff)
	love.graphics.rectangle('fill', width/2-100, height/2-100, 300, 400)
	-- 5ピクセル幅の青い点を中心に描画します。
	love.graphics.setPointSize(5)
	love.graphics.setColor(0, 0, 0xff)
	love.graphics.points(width/2, height/2)
end

function love.update(dt)
	love.timer.sleep(.01)
	angle = angle + dt * math.pi/2
	angle = angle % (2*math.pi)
end

画面全体の回転

この用例では画面を反時計回り90度回転する方法を示します。常に横向きの画面で起動するゲームでAndroid 用の .love ファイルを配布する場合は、特に有用です。この処理後は、 Canvas の幅と高さは "交換" が行われます。常に入力の解釈を行い、それに応じて全ての画面境界に対する明確な確認を怠らないでください。

function love.load()
	-- デスクトップではなく、キャンバスの幅と高さを取得します。
	width, height = love.graphics.getWidth(), love.graphics.getHeight()
end

function love.draw()
	love.graphics.translate(width/2, height/2)
	love.graphics.rotate(-math.pi / 2)
	love.graphics.translate(-height/2, -width/2)

	love.graphics.setColor(255, 0, 0)
	love.graphics.points(0, 0)
	-- 1 ピクセルの点を観測するには拡大が必要となりますが、その動作を示すために行います。
end

-- 例えば、マウスの入力を解釈するための簡単な関数
local function translate(_x, _y)
	local y = _x
	local x = height - _y

	return x, y
end
--[[
-- 上述のように、解釈システムで、 love.graphics.rectangle("fill", 150, 170, 125, 145) を示してください。
-- マウス入力として translate(x, y) が必要であり x は [150, 275] の範囲内、
-- y は [170, 315] の範囲内として確認をします。幅と高さの反転は不要です。
--]]

関連


そのほかの言語