Project1

标题: 如何使用METHODS 让角色在对话和战斗中显示半身像 [打印本页]

作者: 四代天殇    时间: 2012-8-19 00:44
标题: 如何使用METHODS 让角色在对话和战斗中显示半身像
本帖最后由 四代天殇 于 2012-8-19 02:33 编辑

今天早上一直在研究游戏脚本,一般来讲,对话的显示头像是用 游戏当中的draw_face 这methods 达成的。

def draw_face(face_name, face_index, x, y, size = 96)
    bitmap = Cache.face(face_name)
    rect = Rect.new(0, 0, 0, 0)
    rect.x = face_index % 4 * 96 + (96 - size) / 2
    rect.y = face_index / 4 * 96 + (96 - size) / 2
    rect.width = size
    rect.height = size
    self.contents.blt(x, y, bitmap, rect)
    bitmap.dispose
  end

所以我在想是否有什么办法在这个methods里面做些手脚,使之能够显示半身图?


但是这个methods 也只能处理这样的图片,且 face_name 必须是 Actor1 ,否则会出现error.



因为试过将 face_name 改成 character_name(譬如 ralf) 然后将新的图片名改成(ralf) 发在 face 文件夹里,结果提醒我 syntax error,所以目前请求脚本高手进行解决。



作者: 四代天殇    时间: 2012-8-19 02:34
回复A神,我还以为付费是大神解决问题后我付费给他们- -
作者: 怪蜀黍    时间: 2012-8-19 09:15
没有。(光回答这一句是要被扣分的,这里不宜效仿多啦
draw_face是在Window_Message类下被调用的,所以要更改Window_Message的大小方可显示完全,否则,即使你改draw_face也是无济于事的,因为小窗口无法显示大图片。你其实可以新建一个窗口类,这个窗口的Z要大于对话窗口的Z,在其下仿照draw_face写一个类似的定义,改大rect.width,rect.height,这样就可以了。

作者: 四代天殇    时间: 2012-8-19 16:12
protosssonny 发表于 2012-8-19 09:15
没有。(光回答这一句是要被扣分的,这里不宜效仿多啦)
draw_face是在Window_Message类下被调用 ...

ef new_page
    print $game_message.face_name
    contents.clear
    if $game_message.face_name.empty?
      @contents_x = 0
    else
      name = $game_message.face_name
      index = $game_message.face_index
      draw_face(name, index, 0, 0)
      @contents_x = 112
    end
    @contents_y = 0
    @line_count = 0
    @show_fast = false
    @line_show_fast = false
    @pause_skip = false
    contents.font.color = text_color(0)
  end


谢谢你的提醒,看来必须修改Window_Message 的大小才行。不过我刚才有了一个新的思路不知道可不可以。我在这个CLASS里面加了一个print ,这个print 显示的是 face_name ,所以我想能否通过修改face_name 的方式让bitmap 不调Actor1 这个图片而是其他 图片? 这样如果我换成大图片的话,那么 这个CLASS就直接可以显示半身像了吧?
作者: 铅笔描绘的思念    时间: 2012-8-19 16:24
就没人想到建个精灵么。。。src_rect 的height和width改一下 再调下精灵的z值不就完美解决么。。
作者: 四代天殇    时间: 2012-8-19 17:14
铅笔描绘的思念 发表于 2012-8-19 16:24
就没人想到建个精灵么。。。src_rect 的height和width改一下 再调下精灵的z值不就完美解决么。。 ...

表示 RGSS2新手, sprite 什么的完全不懂
作者: 四代天殇    时间: 2012-8-19 21:48
铅笔描绘的思念 发表于 2012-8-19 16:24
就没人想到建个精灵么。。。src_rect 的height和width改一下 再调下精灵的z值不就完美解决么。。 ...

那么您觉得这样可以吗?
在windows_message 的 def new_page 下把 draw face 的方程改成



     character_half=Sprite.new
     character_half.bitmap=Bitmap.new("Graphics/Half/@{character_name}")
rect=Rect.new(0,0,0,0)
rect.width=character_half.bitmap.width
rect.height=character_half.bitmap.height

  contents.blt(x,y,character_half.bitmap,rect)

作者: 铅笔描绘的思念    时间: 2012-8-20 10:08
本帖最后由 铅笔描绘的思念 于 2012-8-20 12:09 编辑
四代天殇 发表于 2012-8-19 21:48
那么您觉得这样可以吗?
在windows_message 的 def new_page 下把 draw face 的方程改成


没有去看过message的。。不过小错误就有几个。。@{character_name} 插入字符串的话应该是#{}
我想你应该是想吧@character_name套进去吧。。不过@character_name应该没有在Windows_message吧。。记得是Game_character和Sprite_character的变量 不过改draw_face的方法不如新建个方法。。。
仿照draw_face写一个
  1. def draw_half(half_name, x, y)
  2. #方法的参数也是有用的。。可以再加点什么。。。height啊。。。width啊
  3.      half=Sprite.new
  4.      half.bitmap=Bitmap.new("Graphics/Half/#{half_name}")
  5.      half.z = 101 #窗口的z是100
  6.      rect = Rect.new(0,0,0,0)
  7.      rect.width=character_half.bitmap.width  
  8.      rect.height=character_half.bitmap.height

  9.      half.bitmap.blt(x, y , half.bitmap, rect)
  10.    
  11. end
复制代码
还有调用的地方也要改一下。
#--------------------------------------------------------------------------
  # ● 新页处理
  #--------------------------------------------------------------------------
  def new_page
    contents.clear
    if $game_message.face_name.empty?
      @contents_x = 0
    else
      name = $game_message.face_name
      index = $game_message.face_index
      draw_half(name, 0, 0)
      @contents_x = 112
    end
    @contents_y = 0
    @line_count = 0
    @show_fast = false
    @line_show_fast = false
    @pause_skip = false
    contents.font.color = text_color(0)
  end

不过你不如在战上找个脚本吧。。貌似很多的。。半身像对话
作者: 四代天殇    时间: 2012-8-21 14:15
铅笔描绘的思念 发表于 2012-8-20 10:08
没有去看过message的。。不过小错误就有几个。。@{character_name} 插入字符串的话应该是#{}
我想你应该 ...

试过了这个代码,经过几轮测试之后发现一些问题:

1.这个代码 的坐标 X,Y(0,0) 是在画面左上角,并且在调过X,Y值之后发现图片是被半透明的对话框覆盖的。所以得出可能用SPRITE 不可行。

2.在之后我修改了代码,把draw_half 里面的sprite 取消,改成 cache 的读取形式,发现图片不会被覆盖,但是由于对话框大小的限制图片无法显示完整,所以想请教关于对话框内 图像头像框的设置代码的位置,然后我想准备朝那个地方下手。




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