2013-11-25 45 views
1

我有一個海狸是爲了跟隨用戶frog。它以更慢的速度向青蛙的方向移動。不過,我希望海狸擁有左右動畫。所以我有運動的工作,而不是動畫。在if語句中使用spritesheet移動圖像

local BidoofSheetData = 
{ 
    width = 32, 
    height = 48, 
    numFrames = 8, 
    sheetContentWidth = 128, 
    sheetcontentheight = 96 
} 

--Set File Actual size 
bidoofSheet = graphics.newImageSheet ("BidoofSpriteSheet.png", BidoofSheetData) 

--Set the sequences 
local bidoofsequenceData = { 
    {name = "bstop", start = 1, count = 1, time = 300}, 
    {name = "bleft", start = 2, count = 3, time = 300}, 
    {name = "bright", start = 5, count = 3, time = 300} 
} 

--frog mask 
local physicsData = (require "bidoofdefs").physicsData(1.0) 

--Link sheet data to previous settings 
beaver = display.newSprite(bidoofSheet, bidoofsequenceData) 
beaver.x = display.contentWidth/2 
beaver.y = 284 
physics.addBody(beaver, "static") 
beaver.isFixedRotation = true 

-- 
function moveBeaver() 
    if frog.x > beaver.x then 
     beaver.x = beaver.x + 0.5 
    elseif frog.x < beaver.x then 
     beaver.x = beaver.x - 0.5 
    elseif frog.x == beaver.x then 
     beaver.x = beaver.x 
    end 
end 
Runtime:addEventListener("enterFrame", moveBeaver) 

我試着將它添加在moveBeaver功能,但它不能正常工作。

編輯: 我試着將beaver:setSequence("bleft");beaver:play()添加到不同的區域。如果你在相應的方向移動,它會左轉一幀,右轉一幀。如果你向左或向右移動並停止,它會不斷地播放左右幀。

但它沒有播放我想要的3幀動畫。

+0

你說你試着將它添加到'moveBeaver'功能,並沒有奏效。你究竟嘗試了什麼? –

回答

1

首先,我注意到您的工作表數據不一致。

local BidoofSheetData = 
{ 
    width = 32, 
    height = 48, 
    numFrames = 8, 
    sheetContentWidth = 128, 
    sheetcontentheight = 96 -- Shouldn't this be sheetContentHeight ? 
} 

我不知道是否具有sheetContentHeight事項的適當的資本,但我想我把它。我想我現在知道你的動畫是什麼問題。您將它設置爲在海狸需要移動時隨時播放,這會將其重置爲動畫的第一幀。

試試這個:

function updateAnim(who, seq) 
    if who.sequence == seq then 
     -- We're already animating the way we need to be. 
     return 
    end 

    who:setSequence(seq) 
    who:play() 
end 

function moveBeaver() 
    -- Get the distance from beaver to frog's position. 
    local d = frog.x - beaver.x 

    -- This will allow the beaver to stop precisely on the frog's position, 
    -- without exceeding a distance of +/- 0.5 per move. 
    if d == 0 then 
     updateAnim(beaver, "bstop") 
    elseif d > 0 then 
     beaver.x = beaver.x + math.min(d, 0.5) 
     updateAnim(beaver, "bright") 
    else 
     beaver.x = beaver.x + math.max(d, -0.5) 
     updateAnim(beaver, "bleft") 
    end 
end 
+0

謝謝你的作品!但是,如果我移動到左邊(或右邊)並停止。一旦海狸達到與青蛙一樣的x座標。它同時播放左右兩個序列。 – Ross

+0

對不起,我對這一切仍然很陌生。我不明白你的意思。編輯:如果我向右或向左移動一點點,它將播放停止序列,但在移動多於〜100個像素時,則不會播放停止序列,但會左右移動。 – Ross

+0

對不起,我沒有改變spritesheet到正確的大小。我認爲這是做if語句和事實,如果一個接一個地運行第一個ifs。但我不知道我會修復它。編輯:它像frog.x不能等於beaver.x如果你移動得太遠 – Ross