Project1
标题:
为什么显示数值会卡??
[打印本页]
作者:
pudding
时间:
2010-7-24 08:17
标题:
为什么显示数值会卡??
我很郁闷...怎么别人写的脚本显示的数值都不卡?
但是我写的脚本会卡的呢?
不过在新的工程里的确不卡.
但在我的游戏里卡的不得了~
class Hp_Window < Window_Base
def initialize
super(-15, -16, 740, 580)
self.contents = Bitmap.new(width - 32, height - 32)
self.opacity = 0
self.z = 998
self.visible = true
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def update
value_x = -188
actor = $game_party.actors[0] #主角
draw_2hp(actor, 209 + value_x, 8) #生命条
system_picture(0,0)
draw_hp_background(0 + value_x,0) # HP底图
draw_mp_background(312 + value_x,8) # MP底图
draw_hp(actor, 209 + value_x, 8) #生命条
draw_mp(actor, 312 + value_x, 8) #能量条
draw_map_exp(actor, 246 + value_x, 29) #经验条
end
#----------------------------------------------------------------------------
# ● 显示文字
#----------------------------------------------------------------------------
def draw_2hp(actor,x,y)
self.contents.clear
self.contents.font.size = 11 # 文字的字号
self.contents.draw_text(x+10, y, 410, 904, $game_party.item_number(1).to_s, 1)
self.contents.draw_text(x+10, y, 488, 904, $game_party.item_number(2).to_s, 1)
self.contents.draw_text(x+10, y, 566, 904, $game_party.item_number(3).to_s, 1)
self.contents.draw_text(x+10, y, 644, 904, $game_party.item_number(4).to_s, 1)
end
#----------------------------------------------------------------------------
# ● 底图
#----------------------------------------------------------------------------
def draw_hp_background(x,y)
hp_background = RPG::Cache.picture("HPdi")
hp_back = Rect.new(0, 0, hp_background.width, hp_background.height)
self.contents.blt(x, y, hp_background, hp_back)
end
def system_picture(x,y)
sy_picture = RPG::Cache.picture("system_picture")
s_picture = Rect.new(0, 0, sy_picture.width, sy_picture.height)
self.contents.blt(x, y, sy_picture, s_picture)
end
def draw_mp_background(x,y)
hp_background = RPG::Cache.picture("MP")
hp_back = Rect.new(0, 0, hp_background.width, hp_background.height)
self.contents.blt(x, y, hp_background, hp_back)
end
#----------------------------------------------------------------------------
# ● 生命条
#----------------------------------------------------------------------------
def draw_hp(actor,x,y)
hp = RPG::Cache.picture("HP条")
hp_w = hp.width * actor.hp / [actor.maxhp,1].max
rect2 = Rect.new(0,0,hp_w,hp.height)
self.contents.blt(x,y,hp,rect2)
end #def HP
#----------------------------------------------------------------------------
# ● 能量条
#----------------------------------------------------------------------------
def draw_mp(actor,x,y)
mp = RPG::Cache.picture("MP条")
mp_w = mp.width * (actor.maxsp-actor.sp) / [actor.maxsp,1].max
rect3 = Rect.new(0,0,mp_w,mp.height)
self.contents.blt(x,y,mp,rect3)
end #def MP
#----------------------------------------------------------------------------
# ● 描绘地图界面经验条
#----------------------------------------------------------------------------
def draw_map_exp(actor, x, y)
bitmap = RPG::Cache.picture("EXP条")
actor = $game_party.actors[0]
if actor.nextexp != 0
jisuan = actor.nowexp.to_f / actor.nextexp
else
jisuan = 1
end
if actor.level < 99 # 最大等级
nw = bitmap.width * jisuan
else
nw = bitmap.width
end
src_rect = Rect.new(0, 0, nw, bitmap.height)
self.contents.blt( x, y, bitmap, src_rect)
end
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor
#--------------------------------------------------------------------------
# ● 获取目前经验
#--------------------------------------------------------------------------
def nowexp
return @exp - @exp_list[@level]
end
#--------------------------------------------------------------------------
# ● 下一等级还需的经验
#--------------------------------------------------------------------------
def nextexp
return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
end
end
复制代码
作者:
IamI
时间:
2010-7-24 08:19
囧……我把你那贴结了你就新开了么……
每帧都进行描绘操作是肯定都卡的,你可以添加一个监视,当数值发生改变时进行重绘。
作者:
普林
时间:
2010-7-24 08:22
新建工程,把原来所用的东西复制到新工程里试试。
作者:
pudding
时间:
2010-7-24 08:25
我以为是你让我开新贴,才这么快就了结帖子..开帖子我也觉得很麻烦
我觉得很深奥...不明白...也不会弄
作者:
普林
时间:
2010-7-24 09:21
本帖最后由 普林 于 2010-7-24 09:25 编辑
01.JPG
(100.48 KB, 下载次数: 13)
下载附件
保存到相册
2010-7-24 09:20 上传
1.地图复制进去
2.脚本复制进去
3.素材复制进去
--------------------
以前我遇到过类似卡脚本的问题,通过以上方式解决。
作者:
小角色
时间:
2010-7-24 09:33
即时刷新血槽是肯定要卡的。。。不是数值的问题
def update
value_x = -188
actor = $game_party.actors[0] #主角
draw_2hp(actor, 209 + value_x, 8) #生命条
system_picture(0,0)
draw_hp_background(0 + value_x,0) # HP底图
draw_mp_background(312 + value_x,8) # MP底图
draw_hp(actor, 209 + value_x, 8) #生命条
draw_mp(actor, 312 + value_x, 8) #能量条
draw_map_exp(actor, 246 + value_x, 29) #经验条
end
这一段能加个条件句判断数值发生变化了再刷新就好了
作者:
pudding
时间:
2010-7-24 10:43
怎么判断数值发生变化了? {:4_83:}
作者:
春日结乃
时间:
2010-7-24 10:50
例如要描绘$game_variables[1](变量1号)
def update
#——如果变量1号和记录变量不相同 也就是说变量1号发生了改变
if @spring_variable != $game_variables[1]
@spring_variable = $game_variables[1] #——记录
refresh #——描绘
end
end
复制代码
大概写法就是这样。
作者:
春日结乃
时间:
2010-7-24 11:04
def update
if @spring_hp != $game_party.actors[0].hp or @spring_sp != $game_party.actors[0].sp or @spring_exp != $game_party.actors[0].exp
value_x = -188
actor = $game_party.actors[0] #主角
draw_2hp(actor, 209 + value_x, 8) #生命条
system_picture(0,0)
draw_hp_background(0 + value_x,0) # HP底图
draw_mp_background(312 + value_x,8) # MP底图
draw_hp(actor, 209 + value_x, 8) #生命条
draw_mp(actor, 312 + value_x, 8) #能量条
draw_map_exp(actor, 246 + value_x, 29) #经验条
@spring_hp = $game_party.actors[0].hp
@spring_sp = $game_party.actors[0].sp
@spring_exp = $game_party.actors[0].exp
end
end
复制代码
这样应该就不会卡了~~
卡的原因主要是因为每一帧都描绘。所以通过判断和记录,等到数值改变的时候才描绘,那么内存的压力就会减少很多。一般数值需要随时改变的,都需要用这个方式。
作者:
pudding
时间:
2010-7-24 11:14
本帖最后由 pudding 于 2010-7-24 11:15 编辑
我参考了一些范例.... 自己改了改
class Scene_Map
#--------------------------------------------------------------------------
# ● 主处理
#--------------------------------------------------------------------------
alias fox_text_window_main main
def main
@HP_window = Hp_Window.new
@item_1_new = $game_party.item_number(1).to_s
@item_2_new = $game_party.item_number(2).to_s
@item_3_new = $game_party.item_number(3).to_s
@item_4_new = $game_party.item_number(4).to_s
fox_text_window_main
# 释放
@HP_window.dispose
if $scene.is_a?(Scene_Title)
# 淡入淡出画面
Graphics.transition
Graphics.freeze
end
end
#--------------------------------------------------------------------------
# ● 更新
#--------------------------------------------------------------------------
alias fox_text_window_update update
def update
# 刷新地图状态窗口
if @item_1_new != $game_party.item_number(1).to_s
@HP_window.refresh
@item_1_new = $game_party.item_number(1).to_s
end
if @item_2_new != $game_party.item_number(2).to_s
@HP_window.refresh
@item_2_new = $game_party.item_number(2).to_s
end
if @item_3_new != $game_party.item_number(3).to_s
@HP_window.refresh
@item_3_new = $game_party.item_number(3).to_s
end
if @item_4_new != $game_party.item_number(4).to_s
@HP_window.refresh
@item_4_new = $game_party.item_number(4).to_s
end
fox_text_window_update
if @HP_window.visible
@HP_window.update
end
end
end
复制代码
加入后 问题就解决了..
真佩服自己!
噢 这里也改了改
def update
value_x = -188
actor = $game_party.actors[0] #主角
system_picture(0,0)
draw_hp_background(0 + value_x,0) # HP底图
draw_mp_background(312 + value_x,8) # MP底图
draw_hp(actor, 209 + value_x, 8) #生命条
draw_mp(actor, 312 + value_x, 8) #能量条
draw_map_exp(actor, 246 + value_x, 29) #经验条
end
#--------------------------------------------------------------------------
# ● 刷新画面
#--------------------------------------------------------------------------
def refresh
self.contents.clear
value_x = -188
actor = $game_party.actors[0] #主角
draw_2hp(actor, 209 + value_x, 8) #显示文字
end
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1