Как исправить несоответствие типа объекта, возвращаемого в ruby? - PullRequest
1 голос
/ 29 марта 2019

Я занимаюсь разработкой и использованием приложения ruby2d.

У меня есть функция, которая должна возвращать объект, класс которого "Tile".

Объект, который будет возвращен, - "tileStone", и пока он находится внутри функции, его класс - "Tile" (я использовал некоторые "put" для печати этой информации). Но когда он возвращает основную функцию, он возвращается как объект "Ruby2D :: Window :: EventDescriptor". Почему?

 def player1turn(grid)
      tileStone  = stoneChose(1,grid)
      puts tileStone.class #here it prints "Ruby2D::Window::EventDescriptor", which is wrong
  end

  def stoneChose(nplayer,grid)
    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
            puts tileStone.class #here it prints "Tile"
            tileStone

          end 
        end 
      end
    end 
  end

1 Ответ

1 голос
/ 29 марта 2019

Я не знаком с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...