设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 15186|回复: 69
打印 上一主题 下一主题

AVG华丽丽效果报告研究AVG·3.继-小完美版CG系统

 关闭 [复制链接]

Lv1.梦旅人

最BT美攻!

梦石
0
星屑
50
在线时间
3 小时
注册时间
2007-3-7
帖子
1407
跳转到指定楼层
1
发表于 2007-8-6 11:05:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
AVG华丽丽效果报告研究
AVG·3·继
目录
AVG·3.8 用图片做对话框
AVG·3.9 回忆系统(未完美版)
AVG·3.10 小完美版的华丽丽CG系统
AVG·3.11 关于前几个研究的一些小更正
AVG·3.12 让图片也可以直接用上画面变色和画面震动功能
AVG·3.13  按CTRL键跳对话……

##############
AVG·3.8 用图片做对话框

RMXP默认的对话框象素实在太低了
为了AVG华丽丽的效果
这个一定要改
先做一个漂亮的图片对话框
图1


这是我正在做的AVG游戏
《骑士之圣堂》的图片对话框
边框可以是不透明的
中间用PS调一下诱明度
我是60%左右
你做的时候可以自已看一下效果
一定在调用在游戏里看一下效果
因为有背景图和在PS里只看灰白格背景的效果
差别可是很大啊
俺这个调了N次才决定现在的样子
俺做的尺寸为
580X180


打开脚本
Window_Message
在def initialize下面
打上
    #AVG对话框图片背景
     $Mbg = Sprite.new
      $Mbg.bitmap = Bitmap.new("Graphics/Pictures/AVG研究-对话框")
      $Mbg.opacity = 0
      $Mbg.x = 40
      $Mbg.y = 280
      $Mbg.z = 400

然后在def update下面
    找到这行
    if @now_text != nil and @mid_stop == false
     打上
      $Mbg.opacity = 200
随着对话的出现而出现对话框图片
我这里设的值是200
你对话框边框不要透明的就设255

PS:
如果照我研究里
对话时随时跳出菜单的方法改过的话
if Input.trigger?(Input::B)
下面
$scene = Scene_Menu.new
这行的上面
这行上面加上
        $Mbg.opacity = 0
调用菜单的话对话框图片消失


最后在

Scene_Map脚本里

if $game_temp.message_window_showing
这行下面在end前加上


   if $game_temp.message_window_showing
    else
     $Mbg.opacity = 0
     return
   end


这样对话框会等到对话都结束再消失
因为要改两个脚本
所以用了全局变量$Mbg做为对话框图片显示

原有的默认对话框要去掉
可以用事件去
也可以直接把原窗口图片改成空白透明
改脚本也行
不过俺这里就不细写了

#############################
AVG·3.9 回忆系统

回忆系统
Benavii大和莉莉雅姐都写了一个给我
太太太太太感谢了~~~~
世上还是好人多啊~~~~~~!!
大抱两只~~~~
因为这个系统对我来说复杂了一点
俺回去研究了半天
稍稍看懂了一点
才敢写在俺的研究报告里面

以下是Benavii大的教学时间~~

Benavii:

backlog对话倒没什么复杂的,在Window_Message那里打劫到$game_temp.message_text的内容,然后push到一个数组里去就行了。选项上色那里稍微有点麻烦,因为要把$game_temp.choice_proc = Proc.new { |n| @branch[current_indent] = n }变成
     $game_temp.choice_proc = Proc.new do |n|
     @branch[current_indent] = n # 默认的处理
才好单独处理……其实之前我想了另种方法,都没这个直接。

以下是我的做法:

1、在Game_System22行以下加入
attr_accessor :backlog                  # 回想模式
attr_accessor :backlog_line             # 回想行数
创建两个可读可写,可以理解为创建两个对象$game_system.backlog $game_system.backlog_line。然后在Game_System39行以下加入
   @backlog = []
   @backlog_line = 0
初始化两个对象。从这里可以看到@backlog是数组,@backlog_line是行数。

2、在Window_Message78行text = $game_temp.message_text以下加入
     backlog = text.clone ——把显示的文字clone下来,不然$game_temp.message_text一清backlog就跟着没了= =
     $game_system.backlog_line += backlog.split(/\n/).size ——数数要显示的文字里有多少个分行符号,有一个符号就有一行,然后把它加到总行数里面
     $game_system.backlog.push(backlog) ——把对话内容push到backlog中
以上劫持工作完毕- -。原本打算在interpreter 3里劫的,后来发现这里更方便……

3、就可以开始写脚本了……比Status界面那一套还简单的脚本,由1个窗口与不超过50行的scene构成 囧


class Window_Backlog < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化目标
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 480, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
    self.active = false
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
#——以下直接搬WindowMessage里的来就行……把显示金钱窗口功能去掉了而已 囧
    x = y = 0
    @item_max = $game_system.backlog_line #——这里就看出行数的有用了……
   self.contents = Bitmap.new(width - 32, row_max * 32)
   for i in 0...$game_system.backlog.size #——逐个单元描绘这个数组的内容
    text = $game_system.backlog.clone
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      # 为了方便、将 "\\\\" 变换为 "\000"
      text.gsub!(/\\\\/) { "\000" }
      # "\\C" 变为 "\001" に、"\\G" 变为 "\002"
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "" }
      # c 获取 1 个字 (如果不能取得文字就循环)
      while ((c = text.slice!(/./m)) != nil)
        # \\ 的情况下
        if c == "\000"
          # 还原为本来的文字
          c = "\\"
        end
        # \C[n] 的情况下
        if c == "\001"
          # 更改文字色
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          # 下面的文字
          next
        end
        # 另起一行文字的情况下
        if c == "\n"
          # 刷新选择项及光标的高
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          # y 加 1
          y += 1
          x = 0
          # 移动到选择项的下一行
          if y >= $game_temp.choice_start
            x = 8
          end
          # 下面的文字
          next
        end
        # 描绘文字
        self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
        # x 为要描绘文字的加法运算
        x += self.contents.text_size(c).width
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新光标矩形
  #--------------------------------------------------------------------------
#  def update_cursor_rect
#    if @index < 0
#      self.cursor_rect.empty
#    else
#      self.cursor_rect.set(0, @index * 116, self.width - 32, 96)
#    end
#  end
end
class Scene_Backlog
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 获取角色
    # 生成状态窗口
    @backlog_window = Window_Backlog.new
    @backlog_window.active = true
    @spriteset = Spriteset_Map.new
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面被切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @backlog_window.dispose
    @spriteset.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    @backlog_window.update
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Map.new
      return
    end
  end
end


以上,一个简单的Backlog系统就做好了。要给被选项加些特效就到第四步……

4、找到Interpreter 1里的setup_choices方法,把$game_temp.choice_proc = Proc.new { |n| @branch[current_indent] = n }变成以下内容:

     $game_temp.choice_proc = Proc.new do |n|
     @branch[current_indent] = n # 默认的处理,一句拆成两句
     # 添加选择项文字
     str = "" #——初始化一下选择项文字的局部变量
     choice = $game_system.backlog[$game_system.backlog.size - 1].split(/\n/) #——取得$game_system.backlog这数组的最后一项。因为新的文字还没有传进来,所以最后一项一定是刚才的选择项。这个choice是形如["是","否"]的一个数组。
     for i in 0...parameters[0].size #——按照选择项的个数循环
       if i == n #——当i选项就是刚才的选项时
         str += "\\c[2]" + choice + "\\c[0]" + "\n" #——组成选项内容字符串,是颜色+被选择的选项内容+颜色变回去+换行符,要加星星的话像加换色符号加在两边就好。
       else
         str += choice + "\n" #——如果不符合,则只是选项内容+换行符
       end
     end
     #——这样循环了一圈下来,str就成为了重组后的最后一项,用它替换掉原本的最后一项
     $game_system.backlog[$game_system.backlog.size - 1] = str


这样就完成了。附范例一个
http://rpg.blue/UP_PIC/200707/backlog2.rar

(唯一一点小BUG就是每次会多显示下面一面的对话
和如果用了随时跳出菜单~对话会多记录一次)

B:
我是直接在默认工程里改的,如果跳出菜单的话会多写一次。
可以跳出的时候打开一个开关,在往backlog里写数据那里加个判定,开关打开的时候就不push,然后把开关关闭。

PS 这个是用默认工程改的,因为考虑到,如果照LZ的想法做AVG的话,不必用66加强对话框,自带的功能完全够用;除了\p功能之外,其他基本上是想要什么移植进去就可以了……



###################################

以下为莉莉雅姐做的系统
大抱一下莉莉雅姐~~~~姐姐工作这么忙还帮俺写东东....

莉莉雅:
11:10才從公司的加班中脫身(姐姐~~~俺对不起你....)
這是做完的附件
主要改了Game_Map和Window_Message和Game_System
改的地方有用#lilia mark起來
回憶系統和對話隨時存檔已經寫在一起了......修了一點bug(之前的腳本可能有bug....不過不是很容易發現就是)

P.S. 一定要記得自行美化啊~~這版面實在醜到人神共"泣"......
P.P.S. 忘記說用法:
在對話的時候按page up就會進入回憶模式
在回憶模式可以用page up和page down翻頁
按Esc跳出回憶模式回到對話中

另外選項的地方我沒有特別加美化,只有簡單把選項標示出來而已....這看要怎麼標,方法有很多 ~_~
http://rpg.blue/UP_PIC/200707/莉莉雅版的回忆系统Data.rar



###
修改的地方莉莉雅姐用#lilia标出了
不过...如果直接用在66整合系统里的话
....会出现不明冲突
原因未明....
俺脚本不是很好
不知哪冲了
不过姐姐写的...比B大的深奥(因为B大的口才好吗...6)
俺很多都看不明白...-_-|||
可以做为参考借鉴一下
莉莉雅姐的这版倒是解决了对话向后的问题
用了菜单跳出也可以很完美的显示回忆系统
.....泪~~~为啥有冲突啊~~~~
大家可以一起来看一下
两个系统可以加在一起变成完美版


我现在照着这两个高人的系统改一下
以B大的为主体莉莉雅姐的为参考
修改好再公布
还有就是...上了鼠标脚本感觉会很怪
这个...俺改不了


这篇回忆系统未完待续···请等待完美版




##########################


AVG·3.10 小完美版的华丽丽CG系统


用物品类做的华丽丽CG系统
更正了原来不能用物品的毛病
只用了前几栏物品栏
存CG名和一些CG数据
完全不影响其它的物品显示与使用
新加了可以横向和竖向移动长型CG的功能
适用所有原创美工的华丽丽游戏
功能:
只要你游戏里打通看到过的CG
加入CG系统后重新启动游戏还会显示


详细用法
把你的CG都保存在游戏目录下的
\Graphics\Pictures\CG下面
CG的名称按显示顺序
打在物品栏
例如1号CG(物品)文件为沉湖
就在物品栏1号位的名称上打上沉湖
请不要打错字...
有连套图片的话
就是例如表情小变化变色调之类的一套显示图
在价格上打上这一套图总数
这一套图片的名字也按CG后面加数字就行了
例如:\Graphics\Pictures\CG\沉湖2
没有的话...请不要动价格这栏


新加了可以横向和竖向移动长型CG的功能
物品的HP和SP栏用来放CG的横向宽度和竖向长度
如果是正常版CG就请不要动这两个地方了
横向移动
在HP回复量打上横向移动CG的总宽度(相素为单位...)
默认为左至右
如果要右至左的话
请在HP回复率打上数字1(其实只要不为0就可以了)

竖向移动
在SP回复量打上横向移动CG的总长度(相素为单位...)
默认为上至下
如果要下至上的话
请在SP回复率打上数字1(其实只要不为0就可以了)


设置好所有CG名字和CG数据
在游戏过程中加CG的方法
在事件里写一行脚本
$CGn = (CG物品ID)
如果是1号CG就打
$CGn = 1
再调用29号公共事件就行了
因为不是自动存CG...
所以在游戏中显示好了CG
要记得手动存到CG系统里

现在的系统为
共三面 X 6张 = 可显示18张CG
要加减CG面总数
可以照着事件自已改

加到自已的游戏系统的话
一定要记的
因为地图号的不同
请修改一下30~32公共事件
只要改一下CG1~3页的地图号就行了
改成你现有的地图号
在把脚本里面的CG系统这个小脚本贴到你的系统中

因为现在写了一个CG系统专门类
(其实只是改了下个开关类脚本做的新类)
用这个CG类再调过物品栏的CG名和数据
所以和其它物品的显示使用保存没有一点关系
大家可以放心用

关于背景
要记得如图做两个版的




为啥要这么做呢
是因为原图缩小显示略缩图
如果有横向或竖向的CG
会和旁边的CG的大小一致
加个框就不会有难看的边露出来了


还有发布游戏的话
请将Data下面的CG.rxdata这个文件删了再发布
这个文件就是记录CG的文件
没这个文件的话CG就是空白的~~从头开始记录CG

详细原理自已打开事件和公共事件看吧...


这个小完美版是在俺原有物品CG系统的基础上加工的
用了物品类是为了很方便的编辑CG数据
全是为了方便懒人和脚本小白(也包括俺自已...)
谢谢B大的CG系统和A的MOMOCG系统参考
....不过那脚本看的俺
太晕了~~~
和俺不是一个等级的....OTL
可能等俺啥时进级了
再把俺自已这个物品类CG系统全写成脚本吧



新上传了小完美版CG系统
先加了1~6号CG
这次不会再有人说看不到CG了吧....
演示的第一张CG为正常版
第二张连套CG共2张
第三张竖向上至下
第四张竖向下至上
第五张横向左至右
第六张横向右至左


###

新更新追加缩小图
因为有人说原图缩小速度会慢
缩图请用原CG名加上s保存在同一个CG目录里
默认是用缩图的
如果不用缩图而是用原图缩小的话
在CG第一面第一个事件29号开关关了就行了
更新了的小完美版CG系统下载地址
http://rpg.blue/upload_program/f ... �图CG系统new.rar


强烈推荐有原创美工的游戏
如果是用商业素材的...就不用多此一举了~~


另...用了俺的游戏骑士の圣堂的CG背景和
未完成品CG...(...有点小趴的半成品)
只是为了演示需要
俺的游戏还是以俺的完成品为准-_-
如果要用的话请自已改背景
俺的游戏还没公布
小趴的CG也请不要外传......

#############

AVG·3.11 关于前几个研究的一些小更正


######天气问题新好办法######
阁中人找到了更好的解决办法

阁中人:
Spriteset_Map中
  @weather = RPG::Weather.new(@viewport1)
改成
  @weather = RPG::Weather.new(@viewport2)
这样天气就可以和图片一起显示了- -
有什么副作用不清楚ING
MO2你玩过吧,经常在人物说话的时候下雨……
所以不可能跑到另一个地图去下雨- -
这样大概可以解决吧。


恩这个办法大好~~
这样就可以同时用地图类和图片了
按我原来的办法的话...地图会遮住图片

另还有雾形文件的显示也是在@viewport1的
如果要AVG里用到雾形文件
同样在这个脚本里的找到

# 生成雾平面
    @fog = Plane.new(@viewport1)
改成
  @fog = Plane.new(@viewport2)
就可以了
现在连雾显示也没问题了

##########
####
关于3.4跳出菜单完美版莉莉雅姐的小改版
原来那节
我這邊是改成:
Window_Message裡頭同一個地方

      if Input.trigger?(Input::B)
        if $game_temp.choice_max > 0 && $game_temp.choice_start > 0
          $game_temp.choice_max = 0
          $game_temp.choice_start = 99
          $game_system.map_interpreter.index=$game_system.map_interpreter.index - 2
          while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
            $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
          end
        else
          $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
          while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
            $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
          end
        end
        $scene = Scene_Menu.new
      end

现在改为~~:

if Input.trigger?(Input::B)
if $game_temp.choice_max > 0
  $game_system.map_interpreter.index=$game_system.map_interpreter.index - $game_temp.choice_max
  if $game_temp.choice_start > 0
    while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
      $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
    end
  end
  $game_temp.choice_max = 0
  $game_temp.choice_start = 99
else
$game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
  while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
    $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
  end
end
$scene = Scene_Menu.new
   
end

按莉莉雅姐的原话:
之前的腳本可能有bug....不過不是很容易發現就是

(.....这个俺也不知原来那版哪有BUG
反正以新的为正确就对了....)
################


AVG.3.12 让图片也可以直接用上画面变色和画面震动功能

俺终于找到地方改了~~~
只要改两行
就完全可以不用很麻烦的手动改图片的变色和震动了
整个画面都通用

在Spriteset_Map脚本
最下面一节
# 设置画面的色调与震动位置
    @viewport1.tone = $game_screen.tone
    @viewport1.ox = $game_screen.shake
这个地方设置了地图的变色与震动
把这两行复制一下再只要改两个数字
@viewport2.tone = $game_screen.tone
    @viewport2.ox = $game_screen.shake

OK!!!现在去看看你的游戏吧~~
用图片画面也可以直接整个画面变色和震荡啦


特别推荐一个亿万大做的震动脚本
这是他的论坛地址
有兴趣可以去看一下
http://1012stars.uu1001.com/read.php?tid=37


觉的自已是一边研究一边推翻以前的研究....
这不知算不算进步的一种...|||

#################################

AVG·3.13  按CTRL键跳对话……


现在经过俺自已的测试证明……
俺3.1说的用并行事件做的快进开关
非常的…………会卡住
………………果然是什么都用脚本解决好啊
用事件的话很容易就出错了死机啥的
所以还是把快进开关改写在脚本里了
小真...果然你是正确的

……俺明明只会做事件的家伙
现在被逼着狂改脚本……
人果然还是要被逼着才会进步……


也是很简单的
只要在Window_Message脚本
#--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    super

下面打上几行

    # 按下CTRL可跳过对话
    if  @input_number_window == nil and $game_temp.choice_max == 0
      terminate_message if Input.repeat?(Input::CTRL)
    end


就可以了
@input_number_window == nil
是不在输入数值时
$game_temp.choice_max == 0
和不是选项时
快进开关才可以用



用CTRL键是因为………………
一般AVG游戏都是用CTRL键快进的
所以隐藏对话框俺现在改用SHIFT了

###########################

其它相关研究地址

目录

AVG·1  基础理论与地震
AVG·1.5把太阳换成自已游戏的图标
AVG·2 模糊与光
http://rpg.blue/viewthread.php?tid=60158


AVG·3  AVG必要原素

目录

AVG·3.1  AVG必要原素之快进篇
AVG·3.2  AVG必要原素之去除对话框
AVG·3.3  对话中随时跳出菜单1
AVG·3.4  对话中随时跳出菜单2完美版
AVG·3.5  关于图片遮住天气
AVG·3.6  跳过标题画面用自制事件标题
AVG·3.7  ...自动全屏游戏脚本

http://rpg.blue/viewthread.php?tid=62616
本贴由论坛斑竹影北山人结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
骑士の圣堂最终版华丽丽登场~~

http://rpg.blue/viewthread.php?tid=116851
AVG原创自制游戏  
神の大陆出品
神之大陆游戏制作小组唯美为主BT为终(偏BL向)
欢迎来搅合BLOG:http://hi.baidu.com/tranpol
官网:http://tierradesagrado.uueasy.com/

Lv1.梦旅人

最BT美攻!

梦石
0
星屑
50
在线时间
3 小时
注册时间
2007-3-7
帖子
1407
2
 楼主| 发表于 2007-8-6 11:05:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

x
AVG华丽丽效果报告研究
AVG·3·继
目录
AVG·3.8 用图片做对话框
AVG·3.9 回忆系统(未完美版)
AVG·3.10 小完美版的华丽丽CG系统
AVG·3.11 关于前几个研究的一些小更正
AVG·3.12 让图片也可以直接用上画面变色和画面震动功能
AVG·3.13  按CTRL键跳对话……

##############
AVG·3.8 用图片做对话框

RMXP默认的对话框象素实在太低了
为了AVG华丽丽的效果
这个一定要改
先做一个漂亮的图片对话框
图1


这是我正在做的AVG游戏
《骑士之圣堂》的图片对话框
边框可以是不透明的
中间用PS调一下诱明度
我是60%左右
你做的时候可以自已看一下效果
一定在调用在游戏里看一下效果
因为有背景图和在PS里只看灰白格背景的效果
差别可是很大啊
俺这个调了N次才决定现在的样子
俺做的尺寸为
580X180


打开脚本
Window_Message
在def initialize下面
打上
    #AVG对话框图片背景
     $Mbg = Sprite.new
      $Mbg.bitmap = Bitmap.new("Graphics/Pictures/AVG研究-对话框")
      $Mbg.opacity = 0
      $Mbg.x = 40
      $Mbg.y = 280
      $Mbg.z = 400

然后在def update下面
    找到这行
    if @now_text != nil and @mid_stop == false
     打上
      $Mbg.opacity = 200
随着对话的出现而出现对话框图片
我这里设的值是200
你对话框边框不要透明的就设255

PS:
如果照我研究里
对话时随时跳出菜单的方法改过的话
if Input.trigger?(Input::B)
下面
$scene = Scene_Menu.new
这行的上面
这行上面加上
        $Mbg.opacity = 0
调用菜单的话对话框图片消失


最后在

Scene_Map脚本里

if $game_temp.message_window_showing
这行下面在end前加上


   if $game_temp.message_window_showing
    else
     $Mbg.opacity = 0
     return
   end


这样对话框会等到对话都结束再消失
因为要改两个脚本
所以用了全局变量$Mbg做为对话框图片显示

原有的默认对话框要去掉
可以用事件去
也可以直接把原窗口图片改成空白透明
改脚本也行
不过俺这里就不细写了

#############################
AVG·3.9 回忆系统

回忆系统
Benavii大和莉莉雅姐都写了一个给我
太太太太太感谢了~~~~
世上还是好人多啊~~~~~~!!
大抱两只~~~~
因为这个系统对我来说复杂了一点
俺回去研究了半天
稍稍看懂了一点
才敢写在俺的研究报告里面

以下是Benavii大的教学时间~~

Benavii:

backlog对话倒没什么复杂的,在Window_Message那里打劫到$game_temp.message_text的内容,然后push到一个数组里去就行了。选项上色那里稍微有点麻烦,因为要把$game_temp.choice_proc = Proc.new { |n| @branch[current_indent] = n }变成
     $game_temp.choice_proc = Proc.new do |n|
     @branch[current_indent] = n # 默认的处理
才好单独处理……其实之前我想了另种方法,都没这个直接。

以下是我的做法:

1、在Game_System22行以下加入
attr_accessor :backlog                  # 回想模式
attr_accessor :backlog_line             # 回想行数
创建两个可读可写,可以理解为创建两个对象$game_system.backlog $game_system.backlog_line。然后在Game_System39行以下加入
   @backlog = []
   @backlog_line = 0
初始化两个对象。从这里可以看到@backlog是数组,@backlog_line是行数。

2、在Window_Message78行text = $game_temp.message_text以下加入
     backlog = text.clone ——把显示的文字clone下来,不然$game_temp.message_text一清backlog就跟着没了= =
     $game_system.backlog_line += backlog.split(/\n/).size ——数数要显示的文字里有多少个分行符号,有一个符号就有一行,然后把它加到总行数里面
     $game_system.backlog.push(backlog) ——把对话内容push到backlog中
以上劫持工作完毕- -。原本打算在interpreter 3里劫的,后来发现这里更方便……

3、就可以开始写脚本了……比Status界面那一套还简单的脚本,由1个窗口与不超过50行的scene构成 囧


class Window_Backlog < Window_Selectable
  #--------------------------------------------------------------------------
  # ● 初始化目标
  #--------------------------------------------------------------------------
  def initialize
    super(0, 0, 480, 480)
    self.contents = Bitmap.new(width - 32, height - 32)
    refresh
    self.active = false
    self.index = 0
  end
  #--------------------------------------------------------------------------
  # ● 刷新
  #--------------------------------------------------------------------------
  def refresh
    self.contents.clear
    self.contents.font.color = normal_color
#——以下直接搬WindowMessage里的来就行……把显示金钱窗口功能去掉了而已 囧
    x = y = 0
    @item_max = $game_system.backlog_line #——这里就看出行数的有用了……
   self.contents = Bitmap.new(width - 32, row_max * 32)
   for i in 0...$game_system.backlog.size #——逐个单元描绘这个数组的内容
    text = $game_system.backlog.clone
      begin
        last_text = text.clone
        text.gsub!(/\\[Vv]\[([0-9]+)\]/) { $game_variables[$1.to_i] }
      end until text == last_text
      text.gsub!(/\\[Nn]\[([0-9]+)\]/) do
        $game_actors[$1.to_i] != nil ? $game_actors[$1.to_i].name : ""
      end
      # 为了方便、将 "\\\\" 变换为 "\000"
      text.gsub!(/\\\\/) { "\000" }
      # "\\C" 变为 "\001" に、"\\G" 变为 "\002"
      text.gsub!(/\\[Cc]\[([0-9]+)\]/) { "\001[#{$1}]" }
      text.gsub!(/\\[Gg]/) { "" }
      # c 获取 1 个字 (如果不能取得文字就循环)
      while ((c = text.slice!(/./m)) != nil)
        # \\ 的情况下
        if c == "\000"
          # 还原为本来的文字
          c = "\\"
        end
        # \C[n] 的情况下
        if c == "\001"
          # 更改文字色
          text.sub!(/\[([0-9]+)\]/, "")
          color = $1.to_i
          if color >= 0 and color <= 7
            self.contents.font.color = text_color(color)
          end
          # 下面的文字
          next
        end
        # 另起一行文字的情况下
        if c == "\n"
          # 刷新选择项及光标的高
          if y >= $game_temp.choice_start
            @cursor_width = [@cursor_width, x].max
          end
          # y 加 1
          y += 1
          x = 0
          # 移动到选择项的下一行
          if y >= $game_temp.choice_start
            x = 8
          end
          # 下面的文字
          next
        end
        # 描绘文字
        self.contents.draw_text(4 + x, 32 * y, 40, 32, c)
        # x 为要描绘文字的加法运算
        x += self.contents.text_size(c).width
      end
    end
  end
  #--------------------------------------------------------------------------
  # ● 刷新光标矩形
  #--------------------------------------------------------------------------
#  def update_cursor_rect
#    if @index < 0
#      self.cursor_rect.empty
#    else
#      self.cursor_rect.set(0, @index * 116, self.width - 32, 96)
#    end
#  end
end
class Scene_Backlog
  #--------------------------------------------------------------------------
  # ● 主处理
  #--------------------------------------------------------------------------
  def main
    # 获取角色
    # 生成状态窗口
    @backlog_window = Window_Backlog.new
    @backlog_window.active = true
    @spriteset = Spriteset_Map.new
    # 执行过渡
    Graphics.transition
    # 主循环
    loop do
      # 刷新游戏画面
      Graphics.update
      # 刷新输入信息
      Input.update
      # 刷新画面
      update
      # 如果画面被切换的话就中断循环
      if $scene != self
        break
      end
    end
    # 准备过渡
    Graphics.freeze
    # 释放窗口
    @backlog_window.dispose
    @spriteset.dispose
  end
  #--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    @backlog_window.update
    # 按下 B 键的情况下
    if Input.trigger?(Input::B)
      # 演奏取消 SE
      $game_system.se_play($data_system.cancel_se)
      # 切换到菜单画面
      $scene = Scene_Map.new
      return
    end
  end
end


以上,一个简单的Backlog系统就做好了。要给被选项加些特效就到第四步……

4、找到Interpreter 1里的setup_choices方法,把$game_temp.choice_proc = Proc.new { |n| @branch[current_indent] = n }变成以下内容:

     $game_temp.choice_proc = Proc.new do |n|
     @branch[current_indent] = n # 默认的处理,一句拆成两句
     # 添加选择项文字
     str = "" #——初始化一下选择项文字的局部变量
     choice = $game_system.backlog[$game_system.backlog.size - 1].split(/\n/) #——取得$game_system.backlog这数组的最后一项。因为新的文字还没有传进来,所以最后一项一定是刚才的选择项。这个choice是形如["是","否"]的一个数组。
     for i in 0...parameters[0].size #——按照选择项的个数循环
       if i == n #——当i选项就是刚才的选项时
         str += "\\c[2]" + choice + "\\c[0]" + "\n" #——组成选项内容字符串,是颜色+被选择的选项内容+颜色变回去+换行符,要加星星的话像加换色符号加在两边就好。
       else
         str += choice + "\n" #——如果不符合,则只是选项内容+换行符
       end
     end
     #——这样循环了一圈下来,str就成为了重组后的最后一项,用它替换掉原本的最后一项
     $game_system.backlog[$game_system.backlog.size - 1] = str


这样就完成了。附范例一个
http://rpg.blue/UP_PIC/200707/backlog2.rar

(唯一一点小BUG就是每次会多显示下面一面的对话
和如果用了随时跳出菜单~对话会多记录一次)

B:
我是直接在默认工程里改的,如果跳出菜单的话会多写一次。
可以跳出的时候打开一个开关,在往backlog里写数据那里加个判定,开关打开的时候就不push,然后把开关关闭。

PS 这个是用默认工程改的,因为考虑到,如果照LZ的想法做AVG的话,不必用66加强对话框,自带的功能完全够用;除了\p功能之外,其他基本上是想要什么移植进去就可以了……



###################################

以下为莉莉雅姐做的系统
大抱一下莉莉雅姐~~~~姐姐工作这么忙还帮俺写东东....

莉莉雅:
11:10才從公司的加班中脫身(姐姐~~~俺对不起你....)
這是做完的附件
主要改了Game_Map和Window_Message和Game_System
改的地方有用#lilia mark起來
回憶系統和對話隨時存檔已經寫在一起了......修了一點bug(之前的腳本可能有bug....不過不是很容易發現就是)

P.S. 一定要記得自行美化啊~~這版面實在醜到人神共"泣"......
P.P.S. 忘記說用法:
在對話的時候按page up就會進入回憶模式
在回憶模式可以用page up和page down翻頁
按Esc跳出回憶模式回到對話中

另外選項的地方我沒有特別加美化,只有簡單把選項標示出來而已....這看要怎麼標,方法有很多 ~_~
http://rpg.blue/UP_PIC/200707/莉莉雅版的回忆系统Data.rar



###
修改的地方莉莉雅姐用#lilia标出了
不过...如果直接用在66整合系统里的话
....会出现不明冲突
原因未明....
俺脚本不是很好
不知哪冲了
不过姐姐写的...比B大的深奥(因为B大的口才好吗...6)
俺很多都看不明白...-_-|||
可以做为参考借鉴一下
莉莉雅姐的这版倒是解决了对话向后的问题
用了菜单跳出也可以很完美的显示回忆系统
.....泪~~~为啥有冲突啊~~~~
大家可以一起来看一下
两个系统可以加在一起变成完美版


我现在照着这两个高人的系统改一下
以B大的为主体莉莉雅姐的为参考
修改好再公布
还有就是...上了鼠标脚本感觉会很怪
这个...俺改不了


这篇回忆系统未完待续···请等待完美版




##########################


AVG·3.10 小完美版的华丽丽CG系统


用物品类做的华丽丽CG系统
更正了原来不能用物品的毛病
只用了前几栏物品栏
存CG名和一些CG数据
完全不影响其它的物品显示与使用
新加了可以横向和竖向移动长型CG的功能
适用所有原创美工的华丽丽游戏
功能:
只要你游戏里打通看到过的CG
加入CG系统后重新启动游戏还会显示


详细用法
把你的CG都保存在游戏目录下的
\Graphics\Pictures\CG下面
CG的名称按显示顺序
打在物品栏
例如1号CG(物品)文件为沉湖
就在物品栏1号位的名称上打上沉湖
请不要打错字...
有连套图片的话
就是例如表情小变化变色调之类的一套显示图
在价格上打上这一套图总数
这一套图片的名字也按CG后面加数字就行了
例如:\Graphics\Pictures\CG\沉湖2
没有的话...请不要动价格这栏


新加了可以横向和竖向移动长型CG的功能
物品的HP和SP栏用来放CG的横向宽度和竖向长度
如果是正常版CG就请不要动这两个地方了
横向移动
在HP回复量打上横向移动CG的总宽度(相素为单位...)
默认为左至右
如果要右至左的话
请在HP回复率打上数字1(其实只要不为0就可以了)

竖向移动
在SP回复量打上横向移动CG的总长度(相素为单位...)
默认为上至下
如果要下至上的话
请在SP回复率打上数字1(其实只要不为0就可以了)


设置好所有CG名字和CG数据
在游戏过程中加CG的方法
在事件里写一行脚本
$CGn = (CG物品ID)
如果是1号CG就打
$CGn = 1
再调用29号公共事件就行了
因为不是自动存CG...
所以在游戏中显示好了CG
要记得手动存到CG系统里

现在的系统为
共三面 X 6张 = 可显示18张CG
要加减CG面总数
可以照着事件自已改

加到自已的游戏系统的话
一定要记的
因为地图号的不同
请修改一下30~32公共事件
只要改一下CG1~3页的地图号就行了
改成你现有的地图号
在把脚本里面的CG系统这个小脚本贴到你的系统中

因为现在写了一个CG系统专门类
(其实只是改了下个开关类脚本做的新类)
用这个CG类再调过物品栏的CG名和数据
所以和其它物品的显示使用保存没有一点关系
大家可以放心用

关于背景
要记得如图做两个版的




为啥要这么做呢
是因为原图缩小显示略缩图
如果有横向或竖向的CG
会和旁边的CG的大小一致
加个框就不会有难看的边露出来了


还有发布游戏的话
请将Data下面的CG.rxdata这个文件删了再发布
这个文件就是记录CG的文件
没这个文件的话CG就是空白的~~从头开始记录CG

详细原理自已打开事件和公共事件看吧...


这个小完美版是在俺原有物品CG系统的基础上加工的
用了物品类是为了很方便的编辑CG数据
全是为了方便懒人和脚本小白(也包括俺自已...)
谢谢B大的CG系统和A的MOMOCG系统参考
....不过那脚本看的俺
太晕了~~~
和俺不是一个等级的....OTL
可能等俺啥时进级了
再把俺自已这个物品类CG系统全写成脚本吧



新上传了小完美版CG系统
先加了1~6号CG
这次不会再有人说看不到CG了吧....
演示的第一张CG为正常版
第二张连套CG共2张
第三张竖向上至下
第四张竖向下至上
第五张横向左至右
第六张横向右至左


###

新更新追加缩小图
因为有人说原图缩小速度会慢
缩图请用原CG名加上s保存在同一个CG目录里
默认是用缩图的
如果不用缩图而是用原图缩小的话
在CG第一面第一个事件29号开关关了就行了
更新了的小完美版CG系统下载地址
http://rpg.blue/upload_program/f ... �图CG系统new.rar


强烈推荐有原创美工的游戏
如果是用商业素材的...就不用多此一举了~~


另...用了俺的游戏骑士の圣堂的CG背景和
未完成品CG...(...有点小趴的半成品)
只是为了演示需要
俺的游戏还是以俺的完成品为准-_-
如果要用的话请自已改背景
俺的游戏还没公布
小趴的CG也请不要外传......

#############

AVG·3.11 关于前几个研究的一些小更正


######天气问题新好办法######
阁中人找到了更好的解决办法

阁中人:
Spriteset_Map中
  @weather = RPG::Weather.new(@viewport1)
改成
  @weather = RPG::Weather.new(@viewport2)
这样天气就可以和图片一起显示了- -
有什么副作用不清楚ING
MO2你玩过吧,经常在人物说话的时候下雨……
所以不可能跑到另一个地图去下雨- -
这样大概可以解决吧。


恩这个办法大好~~
这样就可以同时用地图类和图片了
按我原来的办法的话...地图会遮住图片

另还有雾形文件的显示也是在@viewport1的
如果要AVG里用到雾形文件
同样在这个脚本里的找到

# 生成雾平面
    @fog = Plane.new(@viewport1)
改成
  @fog = Plane.new(@viewport2)
就可以了
现在连雾显示也没问题了

##########
####
关于3.4跳出菜单完美版莉莉雅姐的小改版
原来那节
我這邊是改成:
Window_Message裡頭同一個地方

      if Input.trigger?(Input::B)
        if $game_temp.choice_max > 0 && $game_temp.choice_start > 0
          $game_temp.choice_max = 0
          $game_temp.choice_start = 99
          $game_system.map_interpreter.index=$game_system.map_interpreter.index - 2
          while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
            $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
          end
        else
          $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
          while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
            $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
          end
        end
        $scene = Scene_Menu.new
      end

现在改为~~:

if Input.trigger?(Input::B)
if $game_temp.choice_max > 0
  $game_system.map_interpreter.index=$game_system.map_interpreter.index - $game_temp.choice_max
  if $game_temp.choice_start > 0
    while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
      $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
    end
  end
  $game_temp.choice_max = 0
  $game_temp.choice_start = 99
else
$game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
  while($game_system.map_interpreter.list[$game_system.map_interpreter.index].code == 401)
    $game_system.map_interpreter.index=$game_system.map_interpreter.index - 1
  end
end
$scene = Scene_Menu.new
   
end

按莉莉雅姐的原话:
之前的腳本可能有bug....不過不是很容易發現就是

(.....这个俺也不知原来那版哪有BUG
反正以新的为正确就对了....)
################


AVG.3.12 让图片也可以直接用上画面变色和画面震动功能

俺终于找到地方改了~~~
只要改两行
就完全可以不用很麻烦的手动改图片的变色和震动了
整个画面都通用

在Spriteset_Map脚本
最下面一节
# 设置画面的色调与震动位置
    @viewport1.tone = $game_screen.tone
    @viewport1.ox = $game_screen.shake
这个地方设置了地图的变色与震动
把这两行复制一下再只要改两个数字
@viewport2.tone = $game_screen.tone
    @viewport2.ox = $game_screen.shake

OK!!!现在去看看你的游戏吧~~
用图片画面也可以直接整个画面变色和震荡啦


特别推荐一个亿万大做的震动脚本
这是他的论坛地址
有兴趣可以去看一下
http://1012stars.uu1001.com/read.php?tid=37


觉的自已是一边研究一边推翻以前的研究....
这不知算不算进步的一种...|||

#################################

AVG·3.13  按CTRL键跳对话……


现在经过俺自已的测试证明……
俺3.1说的用并行事件做的快进开关
非常的…………会卡住
………………果然是什么都用脚本解决好啊
用事件的话很容易就出错了死机啥的
所以还是把快进开关改写在脚本里了
小真...果然你是正确的

……俺明明只会做事件的家伙
现在被逼着狂改脚本……
人果然还是要被逼着才会进步……


也是很简单的
只要在Window_Message脚本
#--------------------------------------------------------------------------
  # ● 刷新画面
  #--------------------------------------------------------------------------
  def update
    super

下面打上几行

    # 按下CTRL可跳过对话
    if  @input_number_window == nil and $game_temp.choice_max == 0
      terminate_message if Input.repeat?(Input::CTRL)
    end


就可以了
@input_number_window == nil
是不在输入数值时
$game_temp.choice_max == 0
和不是选项时
快进开关才可以用



用CTRL键是因为………………
一般AVG游戏都是用CTRL键快进的
所以隐藏对话框俺现在改用SHIFT了

###########################

其它相关研究地址

目录

AVG·1  基础理论与地震
AVG·1.5把太阳换成自已游戏的图标
AVG·2 模糊与光
http://rpg.blue/viewthread.php?tid=60158


AVG·3  AVG必要原素

目录

AVG·3.1  AVG必要原素之快进篇
AVG·3.2  AVG必要原素之去除对话框
AVG·3.3  对话中随时跳出菜单1
AVG·3.4  对话中随时跳出菜单2完美版
AVG·3.5  关于图片遮住天气
AVG·3.6  跳过标题画面用自制事件标题
AVG·3.7  ...自动全屏游戏脚本

http://rpg.blue/viewthread.php?tid=62616
本贴由论坛斑竹影北山人结贴,如楼主认为问题未解决,请重新将此贴编辑为“有事请教”,并回帖叙述疑点即可~ ^-^
骑士の圣堂最终版华丽丽登场~~

http://rpg.blue/viewthread.php?tid=116851
AVG原创自制游戏  
神の大陆出品
神之大陆游戏制作小组唯美为主BT为终(偏BL向)
欢迎来搅合BLOG:http://hi.baidu.com/tranpol
官网:http://tierradesagrado.uueasy.com/

Lv1.梦旅人

梦石
0
星屑
50
在线时间
82 小时
注册时间
2006-1-28
帖子
996
3
发表于 2007-8-6 15:06:14 | 只看该作者
tranpol的研究贴出得好快啊,支持!!!
偶现在是在事件里用图片式插入菜单{/gg}
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2005-10-24
帖子
170
4
发表于 2007-8-6 16:30:49 | 只看该作者
额,难道你昨天一天就是在研究吗- -
……看来CG还是要自己写个类……
要是用图片的话,加入鼠标图片响应之后会闪得很厉害……
额,不过我用不到CG系统。
引擎做完的话,有剧本一天基本就可以完工- -难道你还没有剧本……?
额,说鼠标用上很怪的话,最好把鼠标寻路那方面的脚本全去掉。
我加了鼠标脚本,没有发现什么卡/难受的地方。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
2 小时
注册时间
2006-11-10
帖子
931
5
发表于 2007-8-6 19:21:38 | 只看该作者
口才{/gg}
我那个backlog论坛附件貌似当掉了,换这个吧
http://rpg.blue/upload_program/files/backlog2.rar

另一版我也下载下来学习了一下……顺道膜拜一下莉莉雅大人orz
其实这个改的比我那个还简洁OTL 我是碰着啥都要写个Scene出来……> <

总之LZ是需要 66加强对话框 + 跳出菜单 + backlog 这些对吧?正好闲着没事我来合合看……
……………………啊咧?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
28 小时
注册时间
2005-10-24
帖子
170
6
发表于 2007-8-6 21:00:25 | 只看该作者
Benavii大
能不能考虑一下把窗口的文字排到全屏那么大,好套MO的底?
还有,能不能和存档读档的窗口合一下,大概留4行的位置做BACKLOG?
嗯,要是不想做的话,只告诉我思路也好,谢谢
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
2 小时
注册时间
2006-11-10
帖子
931
7
发表于 2007-8-6 23:09:17 | 只看该作者
以下引用阁中人于2007-8-6 13:00:25的发言:
Benavii大
能不能考虑一下把窗口的文字排到全屏那么大,好套MO的底?
还有,能不能和存档读档的窗口合一下,大概留4行的位置做BACKLOG?
嗯,要是不想做的话,只告诉我思路也好,谢谢

可以啊,不过window_message一共就能显示那么长,对话框效果还是不好。
window_message一共就能显示那么长的原因是,事件的对话框就能显示那么长……
是否需要把Message窗口也改成MO2一行的长度?(MO2一行多少个字啊?)

存档读档窗口合……这个是什么样的效果{/fd}详细说明希望……

顺便放上个整合版的截图,还是生成个command_window简单啊。
……………………啊咧?
回复 支持 反对

使用道具 举报

Lv1.梦旅人

Dancer-

梦石
0
星屑
105
在线时间
78 小时
注册时间
2006-5-15
帖子
3306
8
发表于 2007-8-6 23:11:54 | 只看该作者
完了,和我的版式雷同的。
等我游戏出来以后肯定有人说是根据这个教程写的了{/gg}
一个机缘巧合后,被改变了人生的第八年。
养着两只猫,可是我对猫过敏。
为了那终将到来的一天。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

吟游诗人

梦石
0
星屑
50
在线时间
82 小时
注册时间
2006-6-20
帖子
1086
9
发表于 2007-8-6 23:15:17 | 只看该作者
一样就一样被...小T说的效果我一个没用.还不是在做AVG?
嘎嘎....有什么.
要低调。。。低调。。。点我进入小天的作坊近期关注http://www.lothings.com/
回复 支持 反对

使用道具 举报

Lv1.梦旅人

Dancer-

梦石
0
星屑
105
在线时间
78 小时
注册时间
2006-5-15
帖子
3306
10
发表于 2007-8-6 23:16:12 | 只看该作者
因为追求标新立异啊.....我最讨厌和别人有雷同的地方。
一个机缘巧合后,被改变了人生的第八年。
养着两只猫,可是我对猫过敏。
为了那终将到来的一天。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-23 04:40

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表