Project1

标题: 请教一个文字问题(有点深度) [打印本页]

作者: panpan8609    时间: 2011-1-8 15:52
标题: 请教一个文字问题(有点深度)
话说绘制文字用的draw_text很影响效率,所以在文字没有变化前都不会去重绘制它,但有时候,一些信息的快速变化,会导致整个游戏的速度明显降低。比如:物品栏中,鼠标移动到物品上需要显示物品的详细信息,当你在几个物品中快速移动的时候··速度就明显下降了。原因就是draw_text的问题。不知道各位大侠有什么高见,有没有哪位高手研究过draw_text的底层,有没有什么方法可以提高效率·或者用其他方法显示文字
作者: hitlerson    时间: 2011-1-8 16:22
本帖最后由 hitlerson 于 2011-1-8 16:29 编辑

不是draw_text的问题吧
我这个显示卡片信息的鼠标来回拖,显示一点都不卡
  1.   #---------------------------------------------------------------------------
  2.   # ● 描绘全卡片
  3.   #---------------------------------------------------------------------------
  4.   def a_draw_item(index,n=0)
  5.     return if @dataa[index] == nil
  6.     card_id = @dataa[index][0]
  7.     number  = @dataa[index][1]
  8.     index   -= @n
  9.     x = 554
  10.     y = index*44 + 76
  11.     return if index > 9
  12.     return if index < 0
  13.     @card_bitmap_a = [] if @card_bitmap_a == nil
  14.     @card_bitmap_b = [] if @card_bitmap_b == nil
  15.     @card_bitmap_a[index] = Sprite.new(@viewport5)
  16.     @card_bitmap_a[index].x, @card_bitmap_a[index].y = x, y
  17.     @card_bitmap_a[index].z = index + 1000
  18.     bitmap = RPG::Cache.picture("card/#{CARD::CARD[card_id][1][0]}")
  19.     @card_bitmap_a[index].bitmap = bitmap
  20.     @card_bitmap_b[index] = Sprite.new(@viewport5)
  21.     @card_bitmap_b[index].x, @card_bitmap_b[index].y = x, y
  22.     @card_bitmap_b[index].z = index + 10000
  23.     #@card_bitmap_b[index].bitmap = bitmap
  24.     @card_bitmap_b[index].bitmap = Bitmap.new(160,32)
  25.     @card_bitmap_b[index].bitmap.font.size = 12
  26.     #@card_bitmap_b[index].bitmap.font.color = Color.new(255,255,255,255)
  27.     @card_bitmap_b[index].bitmap.draw_text(26, -6 , 212, 32,  CARD::CARD[card_id][0].to_s, 0)
  28.     @card_bitmap_b[index].bitmap.draw_text(26, 8 , 16, 32, CARD::CARD[card_id][2][3].to_s, 1)
  29.     @card_bitmap_b[index].bitmap.draw_text(40, 8 , 24, 32, CARD::CARD[card_id][2][4].to_s, 2)
  30.     @card_bitmap_b[index].bitmap.draw_text(65, 8 , 24, 32, CARD::CARD[card_id][2][5].to_s, 2)
  31.     @card_bitmap_b[index].bitmap.draw_text(0 , 10, 24, 32, number.to_s, 2)
  32.     @card_bitmap_a[index].zoom_x, @card_bitmap_a[index].zoom_y = 0.1, 0.1
  33.   end
复制代码

作者: panpan8609    时间: 2011-1-8 16:39
回复 hitlerson 的帖子


如果只是文字移动··不会影响效率,如果大量文字刷新绘制的时候,肯定会影响效率
如果机子好,绘制少,可能看不出区别·但是把帧数率绘制上去·就可以看出了·
作者: enghao_lim    时间: 2011-1-8 17:35
的确是draw_text的问题,这东西很邪恶,唉...不说了。
我很想知道你为什么高速draw_text,基本上我一个图鉴信息是描绘满萤幕,鼠标来回切换fps顶多掉3,应该沒你说的那么严重才对。
别跟我说附带的文字显示,你试试在loop 里面显示一段文字,然后用for循环··少点··就20边··按F2,看看你的帧数率吧···draw_text对游戏性能有严重影响
还有这样的测试不管是什么显示执行都会沒剩fps,loop根本沒停……
作者: 亿万星辰    时间: 2011-1-8 17:49
1、预处理,提前把当前界面内需要的文字等内容预先draw好
2、鼠标指向后1秒再开始draw




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