赞 | 451 |
VIP | 56 |
好人卡 | 75 |
积分 | 427 |
经验 | 124650 |
最后登录 | 2024-12-26 |
在线时间 | 7618 小时 |
Lv5.捕梦者 (管理员) 老黄鸡
- 梦石
- 0
- 星屑
- 42696
- 在线时间
- 7618 小时
- 注册时间
- 2009-7-6
- 帖子
- 13506
|
本帖最后由 fux2 于 2014-4-14 08:19 编辑
如果刷新放在事件里面过了地图这个窗口不是泄露了么,win7下停止工作什么的。
另外每帧refresh你在差点的机器上就能发现很明显的卡顿,正确做法是记录需要描绘的数值,发生变动才描绘。
当然你这里的refresh相当于把update和refresh写到一起了,
refresh的作用如字面一样是刷新,重新描绘,update是用于检查更新。
以下给出一个范例。
地图血条.rar
(187.65 KB, 下载次数: 59)
- # 加入刷新部分,可以自己换位置
- class Scene_Map
- alias _fux_main main
- def main
- @state_window = Window_MapState.new
- _fux_main
- @state_window.dispose
- end
- alias _fux_update update
- def update
- @state_window.update
- _fux_update
- end
- end
- #渐变描绘
- class Bitmap
- def gradient_fill_rect(x,y,w,h,color_pack)
- color1,color2 = *color_pack
- tempcolor = [ color2.red-color1.red,
- color2.green-color1.green,
- color2.blue-color1.blue,
- color2.alpha-color1.alpha ]
- h.times do |i|
- this_color = Color.new(color1.red+tempcolor[0]*i/(h-1),
- color1.green+tempcolor[1]*i/(h-1),
- color1.blue+tempcolor[2]*i/(h-1),
- color1.alpha+tempcolor[3]*i/(h-1))
- self.fill_rect(x,y+i,w,1,this_color)
- end
- end
- end
- # 正片
- class Window_MapState < Window_Base
- # 初始化
- def initialize
- super(0,0,224,72)
- self.contents = Bitmap.new(self.width-32,self.height-32)
- self.contents.font.size = 14
- self.opacity = 180
- @remmer_symbol = [:hp,:maxhp,:sp,:maxsp]
- @remmer_value = [-1]*@remmer_symbol.size
- @color_list = [ [[Color.new(0xff,0x33,0x33),Color.new(0x66,0,0)],
- Color.new(0,0,0),Color.new(255,255,255)],
- [[Color.new(0x33,0x99,0xff),Color.new(0x00,0x00,0x33)],
- Color.new(0,0,0),Color.new(255,255,255)] ]
- update
- end
- def refresh(hp,maxhp,sp,maxsp)
- self.contents.clear
- x,y,w,h = 0,1,40,14
- self.contents.draw_text(x,y,w,h,"HP:")
- w,h = 142,14
- self.contents.fill_rect(x+39,y-1,w+2,h+2,@color_list[0][2])
- self.contents.fill_rect(x+40,y,w,h,@color_list[0][1])
- rw = (w-2)*hp/maxhp
- self.contents.gradient_fill_rect(x+41,y+1,rw,h-2,@color_list[0][0])
- y,w,h = 25,40,14
- self.contents.draw_text(x,y,w,h,"SP:")
- w,h = 142,14
- self.contents.fill_rect(x+39,y-1,w+2,h+2,@color_list[1][2])
- self.contents.fill_rect(x+40,y,w,h,@color_list[1][1])
- rw = maxsp > 0 ? (w-2)*sp/maxsp : 0
- self.contents.gradient_fill_rect(x+41,y+1,rw,h-2,@color_list[1][0])
- end
- def update
- pointer = $game_party.actors[0]
- return unless pointer
- need_refresh = false
- @remmer_symbol.each_with_index do |s,i|
- now_value = pointer.method(s).call
- if now_value != @remmer_value[i]
- @remmer_value[i] = now_value
- need_refresh = true
- end
- end
- refresh(*@remmer_value) if need_refresh
- end
- def dispose
- @color_list = nil
- @remmer_symbol = nil
- @remmer_value = nil
- super
- end
- end
复制代码 |
|