有人可以帮助我了解lua中的2D动画代码吗?

时间:2018-08-14 21:28:22

标签: animation lua 2d defold

我是一个初学者,正如您所看到的,我一直在跟踪关于lua的视频教程,内容涉及2D动画,然后我一直在问我有关此代码的一些问题,为什么局部变量currentAnimation等于0然后在代码上将其设为1,然后关于self.currentAnimation,据我所知currentAnimation是一种方法,因为是通过self调用的动作,因此对象可以向右移动?

 if let buttonItemView = self.navigationItem.leftBarButtonItem?.value(forKey: "view") as? UIView{
        let buttonItemsize = buttonItemView.frame.size
        //your code
    }

结束

我应该遵循什么步骤,以便我可以以某种方式更改代码,因此当我按关键字中的向右箭头时,“ hero”移动,而当我停止按“ hero”时,则停止移动,因为使用此代码,它不会不要停止移动,直到我再次按下相同的按钮,第二段代码在第一段代码之后才执行。

现在我还有另一个问题,我想让它在按下指定按钮时跳转:

local currentAnimation = 0

function init(self)
    msg.post(".", "acquire_input_focus")
end

function final(self)
end

function update(self, dt)

end

function on_message(self, message_id, message, sender)
end

function on_input(self, action_id, action)

if action_id == hash("right") and action.pressed == true then
    if self.currentAnimation == 1 then
        msg.post("#sprite", "play_animation", {id = hash("runRight")})
        self.currentAnimation = 0
    else 
        msg.post("#sprite", "play_animation", {id = hash("idle")})
        self.currentAnimation = 1
    end
end

if action_id == hash("left") and action.pressed == true then
    if self.currentAnimation == 1 then
        msg.post("#sprite", "play_animation", {id = hash("runLeft")})
        self.currentAnimation = 0
    else
        msg.post("sprite", "play_animation", {id = hash("idle")})
        self.currentAnimation = 1
    end
end

使用此代码不会跳转,我尝试了其他代码,但是就像一个循环,使动画跳过一个循环,我只希望每次按下指定按钮时都跳转。

1 个答案:

答案 0 :(得分:2)

currentAnimation当然不是方法,它是表的一个字段,恰好被命名为self

有人猜测local currentAnimation = 0行能达到什么目的,此后再也不会使用。

显然,您提供的代码似乎用于描述对象的行为(实际上是lua表)。根据{{​​3}},在折叠框架中,您可以通过在不同对象之间传递消息并向侦听器订阅与您的对象相关的事件来实现行为。 initfinalupdateon_message,更重要的是,on_input是您为特定事件定义的所有事件处理程序。然后,游戏引擎会在需要时调用它们。

在按下按钮的处理事件中,您的对象使用该行

msg.post("#sprite", "play_animation", {id = hash("runRight")})

向引擎发送消息,指示它应该绘制内容并可能执行其他地方定义的行为。

以上代码将字符实现为简单的manualcurrentAnimation是指示当前状态的变量,1用于保持静止,0用于运行。 if运算符中的代码处理状态之间的转换。您目前的操作方式是,只需按下两次按键即可更改运行方向。

您的on_input事件处理程序将收到action表,该表描述了该事件,然后它仅过滤按下if action_id == hash("right") and action.pressed == true then的右键(并检查左键)来处理事件。根据{{​​3}},您还可以通过检查字段action.released来检查按钮是否被释放。如果要停止字符,则应在事件处理程序中添加相应的分支。他们那里有一堆finite state automata。您可以将它们结合起来以实现所需的行为。