Shy07 发表于 2013-7-5 00:07
举个例子:
@command_window.set_handler(:new_game, method(:command_new_game))
@command_window.s ...
于是乎对于这些问题我也有我的一些无聊的见解。。。。
首先第一个想到的是yield self方法,在对象initialize的时候yield self if block_given? 貌似可以比较省事的说
@sprite=Sprite.new do |s| s.x=1 s.y=1 s.z=1 s.bitmap=xxx end
@sprite=Sprite.new do |s|
s.x=1
s.y=1
s.z=1
s.bitmap=xxx
end
之后呢自己以前也写了一个比较无聊的东西,让这件事情能稍微解决一下
class Plane alias lbq_init_plane initialize def initialize(vp=nil) lbq_init_plane(vp) if block_given? hash=yield hash.each do |index,value| if index==:belongs_to value << self else eval("self.#{index.to_s}=value") end end end end end
class Plane
alias lbq_init_plane initialize
def initialize(vp=nil)
lbq_init_plane(vp)
if block_given?
hash=yield
hash.each do |index,value|
if index==:belongs_to
value << self
else
eval("self.#{index.to_s}=value")
end
end
end
end
end
这样的话貌似新建一个plane的时候就可以。。。
@bg_sprites=[] Plane.new do { opacity: 200, bitmap: Cache.system("Menu_Fog1"), belongs_to: @bg_sprites } end
@bg_sprites=[]
Plane.new do
{
opacity: 200, bitmap: Cache.system("Menu_Fog1"),
belongs_to: @bg_sprites
}
end
当然这是个个人的见解,大触们一定能想到更好的方法的OTL |