很多人都试写过Window类,不过很多地方没考虑到
F1中说Window类内部由大量精灵构成,所以试写如下,不过经过本人"鉴定", 是错的,因为这样太耗内存了...
好像有bug...[code]#==============================================================================# ■ Window#------------------------------------------------------------------------------# 游戏中全部窗口的超级类。 伪.源代码#==============================================================================class Window #-------------------------------------------------------------------------- # ● 定义实例变量 #-------------------------------------------------------------------------- attr_reader :stretch attr_reader :windowskin attr_reader :width attr_reader :height attr_reader :contents attr_reader :active attr_reader :pause attr_reader :visible attr_reader :opacity attr_reader :back_opacity attr_reader :contents_opacity attr_reader :cursor_rect attr_reader :x attr_reader :y attr_reader :ox attr_reader :oy attr_reader :z #-------------------------------------------------------------------------- # ● 初始化对像 #-------------------------------------------------------------------------- def initialize(viewport=Viewport.new(0,0,640,480)) @disposed = false @width = 64 @height = 64 @x = 0 @y = 0 @ox = 0 @oy = 0 @z = 0 @viewport1 = viewport @_frame = Sprite.new(@viewport1) @_back = Sprite.new(@viewport1) @_cursor = Sprite.new(@viewport1) @_pause = Sprite.new(@viewport1) @viewport2 = Viewport.new(self.x+16,self.y+16,self.width-32,self.height-32) @_content = Sprite.new(@viewport2) @cursor_rect= Rect.new(0,0,0,0) @active = true self.stretch= true @pause = false @up_bitmap = Bitmap.new(16,16) @dn_bitmap = Bitmap.new(16,16) @lt_bitmap = Bitmap.new(16,16) @rt_bitmap = Bitmap.new(16,16) @_up = Sprite.new(@viewport1) @_dn = Sprite.new(@viewport1) @_lt = Sprite.new(@viewport1) @_rt = Sprite.new(@viewport1) @_up.bitmap = @up_bitmap @_dn.bitmap = @dn_bitmap @_lt.bitmap = @lt_bitmap @_rt.bitmap = @rt_bitmap @_up.visible= @_dn.visible = @_lt.visible = @_rt.visible = false @_up.ox = @_dn.ox = @_lt.ox = @_rt.ox = 8 @_up.oy = @_dn.oy = @_lt.oy = @_rt.oy = 8 @opacity = 255 @back_opacity = 255 @contents_opacity = 255 # @cursor_bitmap = Bitmap.new(32,32) @pause_bitmap = (0..3).inject([]){|a,i|a rect.width end #-------------------------------------------------------------------------- # ● 壁纸显示方法 #-------------------------------------------------------------------------- def stretch=(stretch) if @disposed raise(RGSSError,"disposed window") else @stretch = stretch show_back end end #-------------------------------------------------------------------------- # ● 壁纸显示方法 更换 # 为了严谨,窗口周围缩小了 2 像素大小。这是为了能自然地看见圆角形窗口。 #-------------------------------------------------------------------------- def show_back skin_explain return if self.height |