我正在编写一个基于 html 画布的简单游戏。我现在正在从咖啡脚本移植到蛋白石。
我想以一种有效的方式包装 CanvasRenderingContext2D 对象。
我目前的解决方案是一个包装器,但我真的很想让这个免费桥接。
应用程序.rb:
class Game
def initialize
@canvas = Element.find('#canvas').get(0)
js_ctx = `this.canvas.getContext('2d')` # this is a javascript object
@ctx = CanvasRenderingContext2D.new(js_ctx) # create the proxy
@ctx.fillStyle='red'
@ctx.fillRect(10,10,50,50)
end
end
# the opal proxy class (named $CanvasRenderingContext2D in javascript space)
class CanvasRenderingContext2D
# I currently model the proxy as a has_a while I'd prefer it to be is_a
attr_reader :js # the native javascript object
def initialize(js)
@js = js
end
# getter
def fillStyle
`this.js.fillStyle`
end
# setter
def fillStyle= value
`this.js.fillStyle= value`
end
# method invocation
def fillRect x,y,width,height
`this.js.fillRect(x,y,width,height)`
end
end
欢迎任何提示。