我正在使用ruby2d开发和应用。
我有一个函数,应该返回一个类为“ Tile”的对象。
将返回的对象是“ tileStone”,而在函数内部时,其类是“ Tile”(我已经使用一些“ puts”来打印此信息)。但是,当返回主函数时,它将作为“ 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
答案 0 :(得分:1)
我对ruby2d
不熟悉,但是似乎Window.on
仅放置了一个事件侦听器/处理程序,并返回了EventDescriptor
。接下来,触发事件时,将执行on
中的代码。因此,您的函数stoneChose
只需设置此事件侦听器并返回此描述符类实例。
您可以在此Pong game中检查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