Ключевые игровые события: событие или перегрузка метода? - PullRequest
2 голосов
/ 02 мая 2010

Если вы собирались разработать игру, скажем, 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

Пожалуйста, дайте ваши взгляды, которые, по вашему мнению, будут лучше в области разработки игр, и заранее спасибо, ell.

1 Ответ

3 голосов
/ 04 мая 2010

Я предпочитаю опрос. События (в любом случае на Windows) имеют неприятную привычку заблудиться. Я боролся долго и упорно с ключевыми и мышами релизов кнопки заблудиться, так что теперь я предпочитаю просто проверить состояние все каждый тик и сделать набор операций отметить, какие из них будут изменены.

Чтобы приблизиться к вашему вопросу, я склонен ожидать, что вы не захотите поместить обработку ввода в ваш класс окна. Вместо этого создайте другой класс, который выполняет обработку ввода (и передает ему события, если вы предпочитаете управление событиями), а затем просто дайте ему сделать свое дело. В этой настройке ваше окно получает события, но единственное, что он делает с ними, это передает их набору объектов, которые могут иметь с ними дело.

Проблема с обработкой событий в окне состоит в том, что вы затем еще один (или более) шаг удалены от того, что заботится о результатах обработки ввода. Я бы склонялся к тому, чтобы толкать процессор ввода и средство ввода данных ближе друг к другу в графе объектов, но, опять же, главное окно на самом деле не заботится о (большинстве) самих событиях, оно должно просто передавать эти вещи объектам, которые это делают.

...