2012-02-20 2 views
7

私は押されたキー/押されているキーに応じて作成した文字のイメージを変更する方法を知りましたか?LOVE 2Dでウォーキングアニメーションを作成する方法

"d"(またはwasdキー)が押されたときにウォーキングアニメーションが発生するのは最終的に究極ですが、 "d"キーが押されたばかりのときにはまだ静止しています。既に。

私はこれを試してみたが、それはうまくいかなかった:

function love.load() 

    if love.keyboard.isDown("a") then 
     hero = love.graphics.newImage("/hero/11.png") 
    elseif love.keyboard.isDown("d") then 
     hero = love.graphics.newImage("/hero/5.png") 
    elseif love.keyboard.isDown("s") then 
     hero = love.graphics.newImage("/hero/fstand.png") 
    elseif love.keyboard.isDown("w") then 
     hero = love.graphics.newImage("/hero/1.png") 
    end 

function love.draw() 

    love.graphics.draw(background) 
    love.graphics.draw(hero, x, y) 

end 

答えて

20

あなたは愛がどのように機能するかを理解する必要があります。 - それはThe Game Loopと呼ばれています

love.load()  -- invoke love.load just once, at the beginning 
while true do  -- loop that repeats the following "forever" (until game ends) 
    love.update(dt) -- call love.update() 
    love.draw()  -- call love.draw() 
end 

このスキーマは、ループ自体が名前を持っているように頻繁にある:それは(非常に基本的には)これを行います。

love.load()をゲームループの一部であるかのように使用しているため、コードは機能しませんが、そうではありません。これは最初から、プログラムの最初の1ミリ秒間に呼び出されています。

あなたが画像を読み込むんlove.loadを使いたい、とlove.updateはそれらを変更するには:

function love.load() 
    heroLeft = love.graphics.newImage("/hero/11.png") 
    heroRight = love.graphics.newImage("/hero/5.png") 
    heroDown = love.graphics.newImage("/hero/fstand.png") 
    heroUp = love.graphics.newImage("/hero/1.png") 

    hero = heroLeft -- the player starts looking to the left 
end 

function love.update(dt) 
    if  love.keyboard.isDown("a") then 
    hero = heroLeft 
    elseif love.keyboard.isDown("d") then 
    hero = heroRight 
    elseif love.keyboard.isDown("s") then 
    hero = heroDown 
    elseif love.keyboard.isDown("w") then 
    hero = heroUp 
    end 
end 

function love.draw() 
    love.graphics.draw(background) 
    love.graphics.draw(hero, x, y) 
end 

コードは、上記の表を用いて因数分解することができる一定の反復性を持っていますが、私はわざとそれをシンプルに残してきました。

love.update機能には、dtパラメータが含まれています。これは重要です。なぜなら、すべてのコンピュータでアニメーションが同じになるようにする必要があるからです(love.updateが呼び出される速度は各コンピュータによって異なります)。

それにもかかわらず、アニメーションを行いたい場合は、おそらくこのAnimation Libまたはmy ownを使用します。

+0

ありがとうございました! – Switchkick