使用精灵图表在if语句中移动图像。

我有一个海狸,它的任务是跟随用户青蛙。它朝着青蛙的方向移动,但速度较慢。然而,我希望海狸能有一个左右移动的动画。因此,我已经实现了移动,但没有实现动画。

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

--设置文件的实际大小
bidoofSheet = graphics.newImageSheet ("BidoofSpriteSheet.png", BidoofSheetData)

--设置序列
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}
}

--青蛙掩码
local physicsData = (require "bidoofdefs").physicsData(1.0)

--将表数据与上一条语句连接起来
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函数中添加动画,但不起作用。

EDIT: 我尝试在不同的位置添加了beaver:setSequence("bleft");beaver:play(),如果您按照相应的方向移动,它将播放左边一个帧和右边一个帧。如果您向左或向右移动太远并停止,它将不断播放左右帧。

但它没有播放我想要的3帧动画。

点赞
用户828255
用户828255

首先,我注意到你的表格数据存在不一致性。

local BidoofSheetData =
{
    width = 32,
    height = 48,
    numFrames = 8,
    sheetContentWidth = 128,
    sheetcontentheight = 96 -- 这里不应该是 sheetContentHeight 吗?
}

我不确定 sheetContentHeight 的大小写是否重要,但我想提一下。我现在认为我知道你的动画问题出在哪里了。你设置了在海狸需要移动时播放动画,这会将它重置为动画的第一帧。

请尝试使用以下代码:

function updateAnim(who, seq)
    if who.sequence == seq then
        -- 我们已经按照需要进行了动画。
        return
    end

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

function moveBeaver()
    -- 获取海狸到青蛙位置的距离。
    local d = frog.x - beaver.x

    -- 这将允许海狸精确停在青蛙位置上,而不超过每次移动 +/- 0.5 的距离。
    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
2013-11-25 17:47:51