Project1

标题: window_base下面text_size(str)函数调用出错。。求指点 [打印本页]

作者: psychopiz    时间: 2012-2-15 13:55
标题: window_base下面text_size(str)函数调用出错。。求指点
本帖最后由 psychopiz 于 2012-2-15 14:32 编辑

window_base下面 有个text_size(str)函数用来测量字符串宽度尺寸,我用这个调用这个函数后出现了下面这个错误:

我是这么添加的:
  1. #==============================================================================
  2. # ■ Window_Location
  3. #------------------------------------------------------------------------------
  4. #  显示所在地图的窗口
  5. #==============================================================================

  6. class Window_Location < Window_Base
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对象
  9.   #--------------------------------------------------------------------------
  10.   def initialize
  11.     super(0, 0, window_width, fitting_height(1))
  12.     @map_name = $game_map.display_name
  13.     refresh
  14.   end
  15.   #--------------------------------------------------------------------------
  16.   # ● 获取窗口的宽度
  17.   #--------------------------------------------------------------------------
  18.   def window_width
  19.     return mpaname_width + 24
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 获取窗口的宽度
  23.   #--------------------------------------------------------------------------
  24.   def mpaname_width
  25.     text_size(@map_name).width
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 刷新
  29.   #--------------------------------------------------------------------------
  30.   def refresh
  31.     draw_text(contents.rect, @map_name)
  32.   end
  33. end
复制代码
为什么出的错啊{:1_11:}@ 跪求指点{:1_17:}@
作者: iisnow    时间: 2012-2-15 14:11
本帖最后由 iisnow 于 2012-2-15 14:13 编辑

注意看Window_Base中text_size的定义:
  1.   def text_size(str)
  2.     contents.text_size(str)
  3.   end
复制代码
在contents存在的基础上(也就是没有dispose的基础上),上述函数才能正常运行……

也就是在create_contents的方法后面添加才有效
可是initialize方法的重定义毕竟麻烦了
于是可以这么改:
  1.   def mpaname_width
  2.     Bitmap.new(1,1).text_size(@map_name).width
  3.   end
复制代码
这样就可以了


还有一个错误就是;
  1. @map_name = $game_map.display_name
复制代码
这句必须在super前面,不然@map_name在mpaname_width方法里面还未定义

  1. class Window_Location < Window_Base
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对象
  4.   #--------------------------------------------------------------------------
  5.   def initialize
  6.     @map_name = $game_map.display_name
  7.     super(0, 0, window_width, fitting_height(1))
  8.     refresh
  9.   end
  10.   #--------------------------------------------------------------------------
  11.   # ● 获取窗口的宽度
  12.   #--------------------------------------------------------------------------
  13.   def window_width
  14.     return mpaname_width + 24
  15.   end
  16.   #--------------------------------------------------------------------------
  17.   # ● 获取窗口的宽度
  18.   #--------------------------------------------------------------------------
  19.   def mpaname_width
  20.     Bitmap.new(1,1).text_size(@map_name).width
  21.   end
  22.   #--------------------------------------------------------------------------
  23.   # ● 刷新
  24.   #--------------------------------------------------------------------------
  25.   def refresh
  26.     draw_text(contents.rect, @map_name)
  27.   end
  28. end
复制代码

作者: psychopiz    时间: 2012-2-15 14:31
果然是这样,万分感谢!




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