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

Project1

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

[已经解决] 关于天圣的AVG范例CG系统脚本

[复制链接]

Lv4.逐梦者

梦石
0
星屑
5896
在线时间
492 小时
注册时间
2010-8-27
帖子
254
跳转到指定楼层
1
 楼主| 发表于 2013-2-15 16:52:30 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 zxlxp2006 于 2013-2-15 18:28 编辑
  1. #--------------------------------------------------------------------------
  2. # ● 刷新画面
  3. #--------------------------------------------------------------------------
  4.   def update
  5.   $mouse_x, $mouse_y = Mouse.get_mouse_pos #获得鼠标的即时坐标
  6.     # 按下 B 键的情况下
  7.     if Input.trigger?(Input::B)
  8.       # 演奏取消 SE
  9.       $game_system.se_play($data_system.cancel_se)
  10.       # 切换到菜单画面
  11.       $scene = Scene_Title.new
  12.       return
  13.     end
  14.   #
  15.    
  16.     #【重点注意】关于鼠标的刷新。其实原理就是判断鼠标是否落在缩略图上。
  17.      
  18.     #如果落在上面了,则给变量赋值表示选中了某CG。否则将变量清零。
  19.      
  20.     #以CG1为例,上面设置过X坐标100,Y坐标40(左上角原点坐标)。
  21.     #宽高分别是120和90(按你自己做的缩略图大小)。
  22.      
  23.     #所以,CG左上角在(100,40)处,右上角在(220,40)处,左下角在(100,130)处,
  24.      
  25.     #右下角在(220,130)处。(还搞不清的自己画个长方形就知道怎么回事了)
  26.    
  27.     #所以鼠标的X坐标如果在100~220之间同时Y坐标在40~130之间,
  28.    
  29.     #即表示鼠标移动到了这张缩略图上。

  30.    
  31.   if $mouse_x <= 220 and $mouse_x >= 100 and $mouse_y <= 130 and $mouse_y >= 40
  32.      if $game_party.item_number(1) > 0 #CG已经获得时才进行判定
  33.    if $game_variables[3] != 1 #如果现在还没选中该CG的话
  34.     $game_system.se_play($data_system.cursor_se)
  35.     $game_variables[3] = 1    #当前选定CG1
  36.     @cg_window.refresh #刷新一下CG窗口,让原本半透明的CG正回来
  37.     end
  38.     end
  39.    
  40.   elsif $mouse_x <= 370 and $mouse_x >= 250 and $mouse_y <= 130 and $mouse_y >= 40
  41.     if $game_party.item_number(2) > 0 #CG2已经获得时才进行判定
  42.     if $game_variables[3] != 2 #如果现在还没选中该CG的话
  43.     $game_system.se_play($data_system.cursor_se)
  44.     $game_variables[3] = 2   #当前选定CG2
  45.     @cg_window.refresh
  46.     end
  47.     end #这是第二张CG的判定范例。需要更多请用elsif继续接下去。
  48.    
  49.   elsif $mouse_x <= 520 and $mouse_x >= 400 and $mouse_y <= 130 and $mouse_y >= 40
  50.     if $game_party.item_number(3) > 0 #CG2已经获得时才进行判定
  51.     if $game_variables[3] != 3 #如果现在还没选中该CG的话
  52.     $game_system.se_play($data_system.cursor_se)
  53.     $game_variables[3] = 3   #当前选定CG2
  54.     @cg_window.refresh
  55.     end
  56.     end
  57.   
  58.   else
  59.     $game_variables[3] = 0
  60.     @cg_window.refresh
  61.   end

  62.    if Input.trigger?(Input::C)
  63.     if $game_variables[3] != 0 #有CG被选中的时候
  64.     $game_system.se_play($data_system.decision_se)
  65.     $game_map.setup(2) #移动到2号地图。(地图ID在新建地图可看到)编号自己能改。
  66.     $game_player.moveto(0,0)
  67.     $game_player.refresh
  68.     $game_map.autoplay
  69.     $game_map.update
  70.     $scene = Scene_Map.new
  71.     #接下来显示出CG或者制作回想之类的内容就都是那张地图上的事情了。
  72.     #因为3号变量已经被赋值,所以直接利用条件分歧显示不同图片即可。
  73.   end
  74. end   

  75. end
  76. end
复制代码
  1. =begin

  2. ★修改方面的罗嗦★

  3. 素材替换和排版参见Scene_Menu,这个就不说了。

  4. 这系统其实用起来原理很简单,自定义的部分也多,当然最麻烦的也在于此。
  5. 脚本里你需要修改的大部分只是数字,我会尽可能详细地解释,也欢迎repo使用中
  6. 出现的问题。

  7. =end

  8. class Window_CG < Window_Base
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化窗口
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     super(-16, -16, 656, 496) #去掉因为边框而导致的坐标误差
  14.     self.contents = Bitmap.new(width - 32, height - 32)
  15.     self.opacity = 0
  16.     refresh
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 刷新
  20.   #--------------------------------------------------------------------------
  21.   def refresh
  22.     self.contents.clear
  23. #从这里开始进入缩略图出现与否的判定。做好教程里提到的『三步骤』之后,
  24. #系统已经记录了你继承的物品数据。接下来就是直接用其判定。
  25. #注意3号变量被用来记录当前选定CG的编号。
  26. #请看下面的例子。
  27. #=========================================================
  28. if $game_party.item_number(1) > 0 #1号物品(CG1)如果已经获得的话
  29.     bitmap=Bitmap.new("Graphics/pictures/CG1_s")  #显示CG1的缩略图
  30.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)  
  31.     if $game_variables[3] == 1
  32.     self.contents.blt(100, 40, bitmap, src_rect,255)
  33.     #前两个数字是坐标可自定义。最后一个数字是判定当该CG被选中时透明度是正常的。
  34.     else        #否则透明度降低表示尚未被选中。
  35.       self.contents.blt(100, 40, bitmap, src_rect,155)
  36.       end
  37.   end
  38. #=========================================================
  39. #这是CG2的设置,改几个小地方即可
  40.   if $game_party.item_number(2) > 0 #这里是对应的2号物品
  41.     bitmap=Bitmap.new("Graphics/pictures/CG2_s")  #显示CG2的缩略图
  42.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)  
  43.     if $game_variables[3] == 2 #选中CG变量改为2
  44.     self.contents.blt(250, 40, bitmap, src_rect,255) #坐标……
  45.     else                    
  46.       self.contents.blt(250, 40, bitmap, src_rect,155)  
  47.       end
  48. #=========================================================
  49. #这是CG2的设置,改几个小地方即可
  50.   if $game_party.item_number(3) > 0 #这里是对应的2号物品
  51.     bitmap=Bitmap.new("Graphics/pictures/CG3_s")  #显示CG2的缩略图
  52.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)  
  53.     if $game_variables[3] == 3 #选中CG变量改为2
  54.     self.contents.blt(400, 40, bitmap, src_rect,255) #坐标……
  55.     else                    
  56.       self.contents.blt(400, 40, bitmap, src_rect,155)  
  57.       end
  58. #=========================================================
  59.     #以此类推,做好你的CG3、CG4……这样基础排版就已经完成了。
  60.    #没有得到的CG,因为物品数为0,所以不会显示出来。底图上可以画个空框啥的……
  61.    
  62.   end
  63. end
  64. end
复制代码
我是一个真·脚本白痴……
我照着注释改的还是改错了……系统提示“Ocorreu um erro em SyntaxError, durante operação de script(在脚本运行中出现了错误的语法)”。
完全两眼一抹黑……求教……
感激不尽,呃,可以的话请尽量说得通俗易懂些?、

另外有涉及的一段脚本,CG系统是采用把CG做成物品的形式,增加一个“CG1”以后输入一段脚本
“file = File.open("Save/CG.rxdata", "wb")
Marshal.dump($game_party,file)
file.close”

范例本体已传百度网盘,请戳

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

2
发表于 2013-2-15 17:03:45 | 只看该作者
楼主能提供一下那个范例吗?
我不知道再哪下手改呢。

点评

我已经把范例本体上传了,如果需要具体的脚本部分请跟我说!脚本白痴实在是拙计解决无能……  发表于 2013-2-15 17:44
大致上就是前面的都是范例里自带的,我试着改出了第三个,就提示有错误了,把我自己改的部分删掉就啥事儿没有了。另涉及的一段脚本我写在主楼  发表于 2013-2-15 17:35
大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

Lv5.捕梦者 (版主)

梦石
20
星屑
1840
在线时间
6925 小时
注册时间
2012-12-14
帖子
11485

短篇十战斗者组别冠军开拓者贵宾短篇九勇士组亚军

3
发表于 2013-2-15 18:07:09 | 只看该作者
本帖最后由 美丽晨露 于 2013-2-15 18:08 编辑

修改好了
可以显示第3张CG
没有问题


附上脚本:
  1. =begin

  2. ★修改方面的罗嗦★

  3. 素材替换和排版参见Scene_Menu,这个就不说了。

  4. 这系统其实用起来原理很简单,自定义的部分也多,当然最麻烦的也在于此。
  5. 脚本里你需要修改的大部分只是数字,我会尽可能详细地解释,也欢迎repo使用中
  6. 出现的问题。

  7. =end

  8. class Window_CG < Window_Base
  9.   #--------------------------------------------------------------------------
  10.   # ● 初始化窗口
  11.   #--------------------------------------------------------------------------
  12.   def initialize
  13.     super(-16, -16, 656, 496) #去掉因为边框而导致的坐标误差
  14.     self.contents = Bitmap.new(width - 32, height - 32)
  15.     self.opacity = 0
  16.     refresh
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 刷新
  20.   #--------------------------------------------------------------------------
  21.   def refresh
  22.     self.contents.clear
  23. #从这里开始进入缩略图出现与否的判定。做好教程里提到的『三步骤』之后,
  24. #系统已经记录了你继承的物品数据。接下来就是直接用其判定。
  25. #注意3号变量被用来记录当前选定CG的编号。
  26. #请看下面的例子。
  27. #=========================================================
  28. if $game_party.item_number(1) > 0 #1号物品(CG1)如果已经获得的话
  29.     bitmap=Bitmap.new("Graphics/pictures/CG_s")  #显示CG1的缩略图
  30.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)  
  31.     if $game_variables[3] == 1
  32.     self.contents.blt(100, 40, bitmap, src_rect,255)
  33.     #前两个数字是坐标可自定义。最后一个数字是判定当该CG被选中时透明度是正常的。
  34.     else        #否则透明度降低表示尚未被选中。
  35.       self.contents.blt(100, 40, bitmap, src_rect,155)
  36.       end
  37.   end
  38. #=========================================================
  39. #这是CG2的设置,改几个小地方即可
  40.   if $game_party.item_number(2) > 0 #这里是对应的2号物品
  41.     bitmap=Bitmap.new("Graphics/pictures/CG2_s")  #显示CG2的缩略图
  42.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)  
  43.     if $game_variables[3] == 2 #选中CG变量改为2
  44.     self.contents.blt(300, 40, bitmap, src_rect,255) #坐标……
  45.     else                    
  46.       self.contents.blt(300, 40, bitmap, src_rect,155)  
  47.     end
  48.     end
  49. #=========================================================
  50.     #以此类推,做好你的CG3、CG4……这样基础排版就已经完成了。
  51.    #没有得到的CG,因为物品数为0,所以不会显示出来。底图上可以画个空框啥的……
  52.    ####3号
  53.    if $game_party.item_number(3) > 0 #这里是对应的3号物品
  54.     bitmap=Bitmap.new("Graphics/pictures/CG3_s")  #显示CG2的缩略图
  55.     src_rect = Rect.new(0, 0, bitmap.width, bitmap.height)  
  56.     if $game_variables[3] == 3 #选中CG变量改为3
  57.     self.contents.blt(500, 40, bitmap, src_rect,255) #坐标……
  58.     else                    
  59.       self.contents.blt(500, 40, bitmap, src_rect,155)
  60.     end
  61.     end
  62.     ##########
  63. end
  64. end

  65. #==============================================================================
  66. # ■ Scene_CG
  67. #------------------------------------------------------------------------------
  68. #  处理CG鉴赏画面的类。
  69. #==============================================================================

  70. class Scene_CG
  71. #--------------------------------------------------------------------------
  72. # ● 主处理
  73. #--------------------------------------------------------------------------
  74.   def main
  75.     $game_variables[3] = 0 #初始化变量
  76.     @cg_window = Window_CG.new
  77.     @back = Sprite.new
  78.     @back.bitmap = RPG::Cache.picture("ui_log")
  79.     # 执行过渡
  80.     Graphics.transition
  81.     # 主循环
  82.     loop do
  83.       # 刷新游戏画面
  84.       Graphics.update
  85.       # 刷新输入信息
  86.       Input.update
  87.       # 刷新画面
  88.       update
  89.       # 如果画面被切换的话就中断循环
  90.       if $scene != self
  91.         break
  92.       end
  93.     end
  94.     # 准备过渡
  95.     Graphics.freeze
  96.     # 释放窗口
  97. #    @command_window.dispose
  98.     @cg_window.dispose
  99.     @back.dispose
  100.   end
  101. #--------------------------------------------------------------------------
  102. # ● 刷新画面
  103. #--------------------------------------------------------------------------
  104.   def update
  105.   $mouse_x, $mouse_y = Mouse.get_mouse_pos #获得鼠标的即时坐标
  106.     # 按下 B 键的情况下
  107.     if Input.trigger?(Input::B)
  108.       # 演奏取消 SE
  109.       $game_system.se_play($data_system.cancel_se)
  110.       # 切换到菜单画面
  111.       $scene = Scene_Title.new
  112.       return
  113.     end
  114.   #
  115.    
  116.     #【重点注意】关于鼠标的刷新。其实原理就是判断鼠标是否落在缩略图上。
  117.      
  118.     #如果落在上面了,则给变量赋值表示选中了某CG。否则将变量清零。
  119.      
  120.     #以CG1为例,上面设置过X坐标100,Y坐标40(左上角原点坐标)。
  121.     #宽高分别是120和90(按你自己做的缩略图大小)。
  122.      
  123.     #所以,CG左上角在(100,40)处,右上角在(220,40)处,左下角在(100,130)处,
  124.      
  125.     #右下角在(220,130)处。(还搞不清的自己画个长方形就知道怎么回事了)
  126.    
  127.     #所以鼠标的X坐标如果在100~220之间同时Y坐标在40~130之间,
  128.    
  129.     #即表示鼠标移动到了这张缩略图上。

  130.    
  131.   if $mouse_x <= 220 and $mouse_x >= 100 and $mouse_y <= 130 and $mouse_y >= 40
  132.      if $game_party.item_number(1) > 0 #CG已经获得时才进行判定
  133.    if $game_variables[3] != 1 #如果现在还没选中该CG的话
  134.     $game_system.se_play($data_system.cursor_se)
  135.     $game_variables[3] = 1    #当前选定CG1
  136.     @cg_window.refresh #刷新一下CG窗口,让原本半透明的CG正回来
  137.     end
  138.     end
  139.    
  140.   elsif $mouse_x <= 420 and $mouse_x >= 300 and $mouse_y <= 130 and $mouse_y >= 40
  141.     if $game_party.item_number(2) > 0 #CG2已经获得时才进行判定
  142.     if $game_variables[3] != 2 #如果现在还没选中该CG的话
  143.     $game_system.se_play($data_system.cursor_se)
  144.     $game_variables[3] = 2   #当前选定CG2
  145.     @cg_window.refresh
  146.     end
  147.   end #这是第二张CG的判定范例。需要更多请用elsif继续接下去。
  148.   #
  149.   elsif $mouse_x <= 620 and $mouse_x >= 500 and $mouse_y <= 130 and $mouse_y >= 40
  150.     if $game_party.item_number(3) > 0 #CG3已经获得时才进行判定
  151.     if $game_variables[3] != 3 #如果现在还没选中该CG的话
  152.     $game_system.se_play($data_system.cursor_se)
  153.     $game_variables[3] = 3   #当前选定CG3
  154.     @cg_window.refresh
  155.     end
  156.     end #这是第二张CG的判定范例。需要更多请用elsif继续接下去。
  157. #   
  158.   else
  159.     $game_variables[3] = 0
  160.     @cg_window.refresh
  161.   end

  162.    if Input.trigger?(Input::C)
  163.     if $game_variables[3] != 0 #有CG被选中的时候
  164.     $game_system.se_play($data_system.decision_se)
  165.     $game_map.setup(2) #移动到2号地图。(地图ID在新建地图可看到)编号自己能改。
  166.     $game_player.moveto(0,0)
  167.     $game_player.refresh
  168.     $game_map.autoplay
  169.     $game_map.update
  170.     $scene = Scene_Map.new
  171.     #接下来显示出CG或者制作回想之类的内容就都是那张地图上的事情了。
  172.     #因为3号变量已经被赋值,所以直接利用条件分歧显示不同图片即可。
  173.   end
  174. end   

  175. end
  176. end
复制代码
楼主看看跟你之前设置的地方,是哪里你弄错了?

点评

咦,怎么认定回答来着……?  发表于 2013-2-15 18:21
谢谢亲!我慢慢看……  发表于 2013-2-15 18:20

评分

参与人数 3星屑 +262 梦石 +1 收起 理由
hys111111 + 100 + 1 认可答案
明特·布兰马修 + 150 认可答案
zxlxp2006 + 12 认可答案

查看全部评分

大家好,这里是晨露的说。请多多指教。
刚入门RM软件制作,请大家多多帮助我哦。
落雪君的欢乐像素教程,欢迎查阅。

回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-4-29 19:03

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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