游戏关键事件:事件或方法重载?

时间:2010-05-02 12:24:00

标签: ruby events key overloading

如果您打算开发游戏,比如Ruby,并且您获得了游戏框架,您是否愿意通过在主窗口上重载方法来执行键上/下事件,如下所示:

class MyGameWindow < Framework::GameWindow
    def button_down(id)
        case id
            when UpArrow
                do_something
            when DownArrow
                do_something
        end
    end
end

或者有一个事件类,您可以使用该类创建方法并为其指定句柄,如下所示:

class MyGameWindow < Framework::GameWindow
    def initialize
        key_down.add_handler(method(:do_something))
    end
    def do_something
        puts "blah blah"
    end
end

请提供您的观点,您认为在游戏开发领域会更好,并提前感谢,

1 个答案:

答案 0 :(得分:3)

我更喜欢投票。事件(在Windows上,无论如何)有一个讨厌的迷路习惯。我已经用键和鼠标按钮发布了很长时间的努力,所以现在我的偏好只是检查每个滴答的所有状态并设置操作以记录哪些被更改。

为了更接近您的问题,我倾向于期望您想要将您的输入处理放在窗口类中。相反,创建另一个进行输入处理的类(如果你喜欢事件驱动的话,将事件提供给它)然后让它做它的事情。在此设置中,您的窗口会接收事件,但它对它们所做的唯一事情是将它们传递给可能能够处理它们的对象集。

在窗口中执行事件处理的问题在于,您将从关注输入处理结果的事物中删除另一步(或更多)。我倾向于在对象图中将输入处理器和输入需求器更紧密地连接在一起,但是再次 - 主窗口并不真正关心(大多数)事件本身,它应该将这些事物传递给那些做的对象。