Project1

标题: 这个脚本怎样写才不会卡? [打印本页]

作者: 缺牙de兔子    时间: 2009-1-22 01:49
标题: 这个脚本怎样写才不会卡?

  1. class Arpg_Actor
  2. #--------------------------------------------------------------------------
  3. # ● 定义实例变量
  4. #--------------------------------------------------------------------------
  5.   attr_accessor :Actor_id                 # 角色ID
  6.   attr_accessor :Actor_action             # 角色动作 0:什么都不做 1:移动 2:攻击 3:跳跃 4:中击 5:吟唱 6:死亡   
  7.   attr_accessor :Actor_look               # 角色的面向
  8.   attr_accessor :Actor_MapId              # 角色所在地图
  9.   attr_accessor :Actors_x                 # 角色的x坐标
  10.   attr_accessor :Actors_y                 # 角色的y坐标
  11. #--------------------------------------------------------------------------
  12. # ● 初始化对像
  13. #--------------------------------------------------------------------------
  14.   def initialize
  15.    
  16.     @Actor_id = $game_party.actors[0].id
  17.     @Actor_action=0
  18.     @Actor_look=8
  19.     @Actor_MapId=1
  20.     @Actors_x=0
  21.     @Actors_y=0
  22.   end  
  23.   def Actor_message
  24.     @actor_ms=Window_Selectable.new(0,0,0,0)
  25.     @actor_ms.update
  26.     @devil = Sprite.new
  27.     @devil.x = 0
  28.     @devil.y = 310
  29.     @devil.bitmap = RPG::Cache.picture("状态栏")
  30.     @[email protected]
  31.     message_refresh
  32.     RPG::Cache.clear
  33.     Graphics.update
  34.   end
  35.   #--------------------------------------------------------------------------
  36. # ● 获得状态栏信息
  37. #--------------------------------------------------------------------------
  38.   def message_refresh
  39.     @b = Sprite.new
  40.     @b.x = -30
  41.     @b.y = 380
  42.     @b.bitmap = Bitmap.new("Graphics/Battlers/"+$game_actors[@Actor_id].battler_name.to_s)
  43.     @actor_ms.windowskin.draw_text(1, 30, 120, 32,$game_actors[@Actor_id].name, 0)
  44.     @actor_ms.windowskin.draw_text(90, 120, 120, 32,"HP:", 0)
  45.     @actor_ms.windowskin.draw_text(90, 140, 120, 32,"SP:", 0)
  46.     @actor_ms.windowskin.draw_text(122, 120, 120, 32,getHP.to_s, 0)
  47.   end
  48. #--------------------------------------------------------------------------
  49. # ● 获得角色HP
  50. #--------------------------------------------------------------------------  
  51.   def getHP
  52.     return $game_actors[@Actor_id].maxhp
  53.   end

  54. end
复制代码

上面这段脚本我在Scene_Map里创建了一个实例
并且在下面这个地方调用

  1. # 不在主角移动中的情况下
  2.     unless $game_player.moving?
  3.       @arpg_actor.Actor_message
  4.       # 执行各种画面的调用
  5.       if $game_temp.battle_calling
  6.         call_battle
  7.       elsif $game_temp.shop_calling
  8.         call_shop
  9.       elsif $game_temp.name_calling
  10.         call_name
  11.       elsif $game_temp.menu_calling
  12.         call_menu
  13.       elsif $game_temp.save_calling
  14.         call_save
  15.       elsif $game_temp.debug_calling
  16.         call_debug
  17.       end
  18.     end
  19.   end
  20.   #--------------------------------------------------------------------------
  21.   # ● 调用战斗
  22.   #--------------------------------------------------------------------------
复制代码

不断刷新Actor_message里的数据
虽然放在这个位置刷新 但是还是有轻微的卡
请问高手们 这里还有更好的地图刷新方法吗?
@arpg_actor.Actor_message在地图显示的是角色的信息

这是范例让大家看看是不是稍微有点卡{/tp}
http://rpg.blue/upload_program/d ... ��息_112989329.rar
[LINE]1,#dddddd[/LINE]版务信息:本贴由楼主自主结贴~
作者: jasjun    时间: 2009-1-22 02:38
怎么我不卡
作者: 缺牙de兔子    时间: 2009-1-22 02:55
有一点点卡 我自己写的 我知道
你把@arpg_actor.Actor_message这段去掉就看出区别了
就是走4~5步就停顿那么0.1秒
作者: 亿万星辰    时间: 2009-1-23 21:22
话说大写开头的变量看着真是别扭的很啊…………

每次都要新建,每次都要refresh,自然会卡了哦,你应该先弄明白这个东西在什么情况下需要整个重新绘制,什么情况下需要部分重绘,当你搞明白这些以后,你再另写一个叫做update的方法就会不卡了。 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: hitlerson    时间: 2009-1-23 21:26
楼上写的太好了,学习了
作者: 禾西    时间: 2009-1-23 21:26
減少load_bitmap——bitmap.new()的次數。load_bitmap是十分耗費時間的語句,九成的腳本都卡在這里。 [LINE]1,#dddddd[/LINE]系统信息:本贴获得楼主认可,66RPG感谢您的热情解答~
作者: 缺牙de兔子    时间: 2009-1-23 22:19
我就是想了解下怎样才能在对象只创建一次的情况下可以
在原图追加新的图片
这个是我目前还无法参透的
所以我只能每次都只能做 x=Bitmap.new --
以下引用亿万星辰于2009-1-23 13:22:44的发言:
话说大写开头的变量看着真是别扭的很啊…………

话说RUBY有变量写法的规范么{/hx}
我只知道方法名大写开头会报错

作者: IamI    时间: 2009-1-23 22:22
以下引用缺牙de兔子于2009-1-23 14:19:35的发言:

我就是想了解下怎样才能在对象只创建一次的情况下可以
在原图追加新的图片
这个是我目前还无法参透的

blt
stretch_blt
尽量避免每帧进行refresh和load_bitmap
变量监控。if和赋值相对于refresh是相当便宜的。 [LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: 缺牙de兔子    时间: 2009-1-23 22:54

blt
stretch_blt
尽量避免每帧进行refresh和load_bitmap
变量监控。if和赋值相对于refresh是相当便宜的。

3Q此贴留给想学习Bitmap类的后人看




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1