Я не знаком с ruby2d
, но кажется, что Window.on
только помещает прослушиватель / обработчик событий и возвращает EventDescriptor
. Затем, когда событие происходит, код внутри on
будет выполнен. Таким образом, ваша функция stoneChose
просто устанавливает прослушиватель этого события и возвращает этот экземпляр класса дескриптора.
Вы можете проверить общую архитектуру ruby2d
проекта в этой игре в понг . Одним словом:
1) Сначала вы должны настроить всех слушателей событий
def setup
Window.on :mouse do |event|
case event.button
when :left
grid.movableStone(grid.getPlayer(nplayer)).each do |tileStone|
if tileStone.contains? event.x, event.y
doSmthWithTileStone(tileStone)
end
end
end
end
2) Определите функцию, которая выполняет какое-то действие с найденным объектом для каждого события
def doSmthWithTileStone(tileStone)
puts tileStone
end
3) И сделать основной цикл приложения
def main
setup
update do
...
end
end
main