如何修复ruby中返回的不匹配对象类型?

问题描述 投票:1回答:1

我正在使用ruby2d进行开发和应用。

我有一个函数应该返回一个类为“Tile”的对象。

将返回的对象是“tileStone”,当它在函数内部时,它的类是“Tile”(我使用了一些“puts”来打印这些信息)。但是,当它返回main函数时,它将返回“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
ruby
1个回答
1
投票

我不熟悉ruby2d,但似乎Window.on只放置一个事件监听器/处理程序,并返回EventDescriptor。接下来,当事件被触发时,将执行on中的代码。因此,您的函数stoneChose只是设置此事件侦听器并返回此描述符类实例。

您可以在这个ruby2d查看Pong game项目的一般架构。简而言之:

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)并做主app循环

def main
    setup

    update do
        ...
    end
end

main
© www.soinside.com 2019 - 2024. All rights reserved.