Tutorial:Object Follows Another Object (日本語)

概要

この教本では、オブジェクトに別のオブジェクトを追従させる方法を学習します。

第一部: オブジェクトの作成
第二部: 移動の実装
第三部: コード全体

第一部: オブジェクトの作成

これを開始するために、自作の main.lua を用意する必要があります。さて、最初に二つのオブジェクトである赤色の円と緑色の長方形の作成と表示を行います。これらは当教本で使用されるオブジェクトです。

function love.load()
    circle = {}
    circle.x = 150			-- これは x 軸に沿って右側に 150 ピクセルの円形を描画します。
    circle.y = 150			-- これは y 軸に沿って下側に 150 ピクセルの円形を描画します。

    rect = {}
    rect.x = 300			-- これは x 軸に沿って右側に 300 ピクセルの長方形を描画します。
    rect.y = 150			-- これは y 軸に沿って右側に 150 ピクセルの長方形を描画します。
    rect.w = 100			-- これは 100 ピクセルの幅で長方形を描画します。
    rect.h = 100			-- これは 100 ピクセルの高さで長方形を描画します。
end

function love.update(dt)

end

function love.draw()
    -- これは赤色の円形を描画します。
    love.graphics.setColor(255, 0, 0)
    love.graphics.circle("fill", circle.x, circle.y, 50)

    -- これは緑色の長方形を描画します。
    love.graphics.setColor(0, 255, 0)
    love.graphics.rectangle("fill", rect.x, rect.y, rect.w, rect.h)
end

さて、このようになります:

Part 1. Creating the Objects.png

第二部: 移動の実装

次に二つのオブジェクトを移動できるようにします。それらのうち一つは遊戯者により操作可能にします。別のほうは遊戯者により操作されたオブジェクトの後に追従します。この教本の目的は、遊戯者は赤色の円形を操作します。これを行うには、円形に速度の値を指定してから love.update(dt) 関数に love.keyboard.isDown を追加します。

function love.load()
    ...
    -- 円形の軸に対して下記を追加します。
    circle.speed = 500		-- これは円形の移動速度を 500 にします。
end

function love.update(dt)
    -- これらの条件文に対してキーボード入力を追加します。
    if love.keyboard.isDown("d") then 				-- 遊戯者が 'D' を押したままならば、
	circle.x = circle.x + (circle.speed * dt)		-- 円形を右側へ移動。
    end

    if love.keyboard.isDown("a") then 				-- 遊戯者が 'A' を押したままならば、
	circle.x = circle.x - (circle.speed * dt)		-- 円形を左側へ移動。
    end

    if love.keyboard.isDown("w") then 				-- 遊戯者が 'W' を押したままならば、
	circle.y = circle.y - (circle.speed * dt)		-- 円形を上側へ移動。
    end

    if love.keyboard.isDown("s") then 				-- 遊戯者が 'S' を押したままならば、
	circle.y = circle.y + (circle.speed * dt)		-- 円形を下側へ移動。
    end
end

function love.draw()
	...
end

さて、このようになります:

Part 2.1 Giving Movement.gif

しかし、まだ未完成です。赤色の円形のみ少し移動できるようにしました。次に緑色の長方形を移動できるようにしてから、赤色の円形の後に追従させる必要があります。それを行うには、緑色の長方形に速度の値を指定します。そして赤色の円形との比較により緑色の長方形の位置を確認します。適切な条件を満たすならば、緑色の長方形は赤色の円形に向かって移動します。

function love.load()
    ...
    -- 長方形に対して下記の値を追加します。
    rect.speed = 100		-- これは長方形の移動速度を 100 にします。
end

function love.update(dt)
    ...
    -- 円形の移動処理コードに下記を追加します。

    -- これらは赤色の正方形との比較により長方形の位置を確認します。

    if rect.x < circle.x then 						-- 長方形が円形よりも左寄りならば:
	rect.x = rect.x + (rect.speed * 2.5 * dt)			-- 右側に向かって長方形を移動します。
    end
 
    if rect.x > circle.x then 						-- 長方形が円形よりも右寄りならば:
	rect.x = rect.x - (rect.speed * 2.5 * dt) 			-- 左側に向かって長方形を移動します。
    end
 
    if rect.y < circle.y then 						-- 長方形が円形よりも上寄りならば:
	rect.y = rect.y + (rect.speed * 2.5 * dt)			-- 上側に向かって長方形を移動します。
    end
 
    if rect.y > circle.y then 						-- 長方形が円形よりも下寄りならば:
	rect.y = rect.y - (rect.speed * 2.5 * dt)			-- 下側に向かって長方形を移動します。
    end
end

function love.draw()
    ...
end

さて、このようになります:

Part 2.2 Object Follows.gif

おめでとうございます! これで教本は完了です!

第三部: コード全体

function love.load()
    circle = {}
    circle.x = 150			-- これは x 軸に沿って右側に 150 ピクセルの円形を描画します。
    circle.y = 150			-- これは y 軸に沿って下側に 150 ピクセルの円形を描画します。
    circle.speed = 500		-- これは円形の移動速度を 500 にします。

    rect = {}
    rect.x = 300			-- これは x 軸に沿って右側に 300 ピクセルの長方形を描画します。
    rect.y = 150			-- これは y 軸に沿って右側に 150 ピクセルの長方形を描画します。
    rect.w = 100			-- これは 100 ピクセルの幅で長方形を描画します。
    rect.h = 100			-- これは 100 ピクセルの高さで長方形を描画します。
    rect.speed = 100		-- これは長方形の移動速度を 100 にします。
end

function love.update(dt)
    if love.keyboard.isDown("d") then 				-- 遊戯者が 'D' を押したままならば、
	circle.x = circle.x + (circle.speed * dt)		-- 円形を右側へ移動。
    end

    if love.keyboard.isDown("a") then 				-- 遊戯者が 'A' を押したままならば、
	circle.x = circle.x - (circle.speed * dt)		-- 円形を左側へ移動。
    end

    if love.keyboard.isDown("w") then 				-- 遊戯者が 'W' を押したままならば、
	circle.y = circle.y - (circle.speed * dt)		-- 円形を上側へ移動。
    end

    if love.keyboard.isDown("s") then 				-- 遊戯者が 'S' を押したままならば、
	circle.y = circle.y + (circle.speed * dt)		-- 円形を下側へ移動。
    end
	
    if rect.x < circle.x then 					-- 長方形が円形よりも左寄りならば:
	rect.x = rect.x + (rect.speed * 2.5 * dt)		-- 右側に向かって長方形を移動します。
    end
 
    if rect.x > circle.x then 					-- 長方形が円形よりも右寄りならば:
	rect.x = rect.x - (rect.speed * 2.5 * dt) 		-- 左側に向かって長方形を移動します。
    end
 
    if rect.y < circle.y then 					-- 長方形が円形よりも上寄りならば:
	rect.y = rect.y + (rect.speed * 2.5 * dt)		-- 上側に向かって長方形を移動します。
    end
 
    if rect.y > circle.y then 					-- 長方形が円形よりも下寄りならば:
	rect.y = rect.y - (rect.speed * 2.5 * dt)		-- 下側に向かって長方形を移動します。
    end
end

function love.draw()
    love.graphics.setColor(255, 0, 0)
    love.graphics.circle("fill", circle.x, circle.y, 50)

    love.graphics.setColor(0, 255, 0)
    love.graphics.rectangle("fill", rect.x, rect.y, rect.w, rect.h)
end

そのほかの言語