Почему мы делаем отдельную функцию для обнаружения ввода для других классов - PullRequest
1 голос
/ 29 января 2020

Это из лекций CS50 по разработке игр. У нас уже есть таблица для определения ввода (т. Е. love.keyboard.keysPressed) в main.lua:

function love.keypressed(key)
    -- add to our table of keys pressed this frame
    love.keyboard.keysPressed[key] = true

    if key == 'escape' then
        love.event.quit()
    end
end

Но мы все еще создали другую функцию в main.lua для использования в других классах:

function love.keyboard.wasPressed(key)
    return love.keyboard.keysPressed[key]
end

Пример использования (Имя класса: bird.lua):

-- just sample code, ignore the functionality
if love.keyboard.wasPressed('space') or love.mouse.wasPressed(1) then
    self.dy = -5
    sounds['jump']:play()
end

Код для всей игры можно найти здесь

Я ценю, что вы, ребята, принимаете время, чтобы прочитать этот вопрос

Редактировать: Из того, что я понял,

Ответы [ 2 ]

1 голос
/ 24 апреля 2020

Ха, я только что наткнулся на этот вопрос в поиске. Я думаю, что это так, класс птицы обрабатывает свое собственное обнаружение / перемещение ключа.

Так как love.keyboard.keypressed - глобальная функция, она всегда будет выполняться, и вам придется проверять, в каком состоянии вы находитесь в / управляет перемещением птицы в main. lua - таким образом (передача была нажата как функция), класс bird сохраняет связанный с ним код, а main сохраняет неопределенный более высокий уровень c code

0 голосов
/ 26 февраля 2020

Функция love.keypressed(key) ничего не возвращает, и таблица love.keyboard.keysPressed[key] сбрасывается после main.lua обновлений, поэтому мы вызываем функцию для непосредственного выполнения проверки на , которая указывает c время для любого вход (т.е. love.keyboard.wasPressed)

...