Project1

标题: 一个脚本问题请教。 [打印本页]

作者: a516816333    时间: 2013-11-26 22:22
标题: 一个脚本问题请教。
在6R找了一个脚本,是在游戏里弄电子书的,因为比较适合新手,就拿来自己用了,现在有以下问题。
1、脚本中选择页面时,只能以1、3、5、2、4的顺序选择页面,此为问题一。
2、选择页面后,只能看到图片,再次按空格就是黑屏。1到5页的图片都能显示,音乐也没问题,黑屏我自己感觉是不是因为我没有编辑每一页的内容,但是我不知道在哪里编辑内容。希望有人帮我解决一下。
附原脚本地址:http://www.66rpg.com/articles/4905

我自己修改的脚本原文如下:
#-------------------------------------------------------------------------------
#                               《电子书脚本》
#其主要用途就是用来介绍怪物、我方、建设和地图,当然也可以做养成RPG的每月杂志!
#制作者;STUPID  ANT
#QQ;1660618519
###############################################################################
##########################《使用说明》#########################################
#本脚本由STUPID  PIG工作室自行研制,其制作权归本工作室所有,当然大家可以尽情的
#使用,但是所有的备注都不能删除,呵呵~~就算你加密,我们也不怕,很轻松就能看到!
#在使用过程中如果有什么漏洞或新的想法,可以联系我们,QQ;1660618519
#当然,我不经常在线,所以你们还可以打我手机;13977375101
#祝你们做游戏愉快!~~~~
#########################《使用方法》##########################################
#在地图中建立一个事件,在事件编辑中,添加脚本,写上$scene = Scene_Book.new,就可以打开
#如果想添加更多的页码,请在30行、31行、98行进行编辑!
#-------------------------------------------------------------------------------
class Scene_Book
  ############################################################################
  ####################《第一部分的总处理》####################################
  ############################################################################
  def main #主要的处理
    #---------《封面处理》-------------------------------------
    @sprite = Sprite.new #生成新的图片
    @sprite.bitmap = RPG::Cache.title("背景一" )  #这里你可以更改。
    #-----------《页码选择处理;中级》--------------------------
    s1 = "第一页:简介"#这里你可以改名称
    s2 = "第二页:物品相关"#这里你可以改名称
    s3 = "第三页:技能相关"#这里你可以改名称
    s4 = "第四页:怪物相关"#这里你可以改名称
    s5 = "第五页:任务相关"#这里你可以改名称
    #你可以再加S5、S6、S7等,不过下面的也有两处要跟着改
    @command_window = Window_Command.new(192, [s1, s2, s3, s4, s5])
    #上面的 @command_window当你加了S5、S6等时,要改的第一处,加[s1, s2, s3, s4,s5,s6],写多少加多少!!
    @command_window.back_opacity = 255#透明度
    @command_window.x = 320 - @command_window.width / 2#x坐标
    @command_window.y = 288#y坐标
    @command_window.visible = false #一开始页码状态为关闭状态
    @command_window.active = false #一开始页码状态为关闭状态

    #----------《音乐处理》-------------------------------------
    Audio.se_play("Audio/BGM/命运之夜.mp3")  #这里是处理音乐的,可以更改!
    #----------《显示的图片位置处理》---------------------------
     @sprite.x = (640 - @sprite.bitmap.width) / 2  #这是X坐标
     @sprite.y = (480 - @sprite.bitmap.height) / 2 #这是Y坐标
    #----------《图片的主处理》---------------------------------
    @sprite.opacity = 255  #透明度,255为不透明,0是完全透明。
    #----------《必要的场景处理》-------------------------------
    Graphics.transition   # 执行过渡
    loop do   # 主循环
    Graphics.update      # 刷新游戏画面
    Input.update      # 刷新输入信息
    update      # 刷新画面
    if $scene != self     # 如果画面被切换就中断循环
        break
      end
    end
    #-------------《过渡及图片释放的必要处理》------------------
     Graphics.freeze   # 准备过渡
    @sprite.bitmap.dispose    #释放图形
    @sprite.dispose   #释放图形处理
    @command_window.dispose #释放窗口
    end  
  ############################################################################
  ####################《第二部分;刷新》######################################
  ############################################################################
  def update #刷新
  #------------------《页码窗口的终极处理》--------------------
      if Input.trigger?(Input::A) #当按下Shift键时发生以下事件
        @update_phase = 2
        Audio.se_play("Audio/SE/001-System01") #播放SE
        @command_window.visible = true #页码窗口打开
        @command_window.active = true  #正式打开
      end  
      @command_window.update #窗口刷新
      @command_window.update #窗口刷新
    if Input.trigger?(Input::B) #当按下ESC键时发生以下事件
      $game_system.se_play($data_system.cancel_se) #播放系统SE
      @command_window.visible = false #窗口关闭
      @command_window.active = false #窗口关闭
      @update_phase = 1
      @command_window.index = 0 #窗口的计数回到0
    end
    if Input.trigger?(Input::C) #当按下ESC键时发生以下事件
      case @command_window.index #这个我也说不清~~
      when 0 #选择S1
      $game_system.se_play($data_system.cancel_se)#播放选择系统SE
      @sprite.bitmap.clear #清除所有图片
      @sprite = Sprite.new #显示新的图片
      @sprite.bitmap = RPG::Cache.title("1" ) #图片名称
        @command_window.visible = false #窗口关闭
        @command_window.active = false #窗口关闭
        @update_phase = 3
      when 1 #选择S2
      $game_system.se_play($data_system.cancel_se)#播放选择系统SE
      @sprite.bitmap.clear #清除所有图片
      @sprite = Sprite.new #显示新的图片
      @sprite.bitmap = RPG::Cache.title("2" ) #图片名称
        @command_window.visible = false #窗口关闭
        @command_window.active = false #窗口关闭
        @update_phase = 3
      when 2 #选择S3
      $game_system.se_play($data_system.cancel_se)#播放选择系统SE
      @sprite.bitmap.clear #清除所有图片
      @sprite = Sprite.new #显示新的图片
      @sprite.bitmap = RPG::Cache.title("3" ) #图片名称
        @command_window.visible = false #窗口关闭
        @command_window.active = false #窗口关闭
        @update_phase = 3
      when 3 #选择S4
      $game_system.se_play($data_system.cancel_se)#播放选择系统SE
      @sprite.bitmap.clear #清除所有图片
      @sprite = Sprite.new #显示新的图片
      @sprite.bitmap = RPG::Cache.title("4" ) #图片名称
        @command_window.visible = false #窗口关闭
        @command_window.active = false #窗口关闭
        @update_phase = 3
         
      when 4 #选择S5
      $game_system.se_play($data_system.cancel_se)#播放选择系统SE
      @sprite.bitmap.clear #清除所有图片
      @sprite = Sprite.new #显示新的图片
      @sprite.bitmap = RPG::Cache.title("5" ) #图片名称
        @command_window.visible = false #窗口关闭
        @command_window.active = false #窗口关闭
        @update_phase = 3
      #when   
      #当你改了S1、S2那些东西时,这里就是要改的第二处,看到when了吗?
      #你加了的话就再加一个when,减就减一个when!~~
      end
     
    end     
#-----------------------《退出电子书的处理》------------------------
    if Input.trigger?(Input::L) #当按下Q键时就发生以下事件
      Graphics.freeze  #图片过渡
      Graphics.transition(20)  #过渡时间
      Audio.se_stop  #所有音乐停止
      $scene = Scene_Map.new  #返回地图
    end
  end
end
##############################################################################
#STUPID PIG工作室,里面的人不是笨猪,而是一群充满梦想的年轻人!~~~~
##############################################################################

Project1.rar

189.54 KB, 下载次数: 41


作者: 凝望·流年    时间: 2013-11-27 06:36
真是受不了这种脚本,内容没多少,自己加了一个类,就写这么多没用的注释…
作者: RyanBern    时间: 2013-11-27 09:47
本帖最后由 RyanBern 于 2013-11-29 15:38 编辑

我喜欢最后一句话:STUPID PIG工作室,里面的人不是笨猪,而是一群充满梦想的年轻人!~~~~
新手脚本应该鼓励,这样的脚本虽然简单,但是实现的功能却比较人性化。而且LZ让我记起了4年前我上初中时候写出的第一个RMXP脚本就是这个,利用显示图片来制作游戏帮助,不过那时候的脚本写得比这个麻烦多了……

原来的脚本有很多问题,语言不简洁这倒不说,关键是,有些关键更新的步骤没有了。建议你参考这个脚本,会好一些。
  1. class Scene_Book
  2.   def main
  3.     # 生成显示图片的精灵
  4.     @sprite = Sprite.new
  5.     @sprite.bitmap = RPG::Cache.title("封面") # 这里是封面的图形
  6.     s1 = "第一页:简介"
  7.     s2 = "第二页:物品相关"
  8.     s3 = "第三页:技能相关"
  9.     s4 = "第四页:怪物相关"
  10.     s5 = "第五页:任务相关"
  11.     # 生成命令窗口,注意它的两个参数,192表示宽,后面那个表示命令的数组,作用是决定窗口的高和命令的内容
  12.     @command_window = Window_Command(192, [s1, s2, s3, s4, s5])
  13.     # 设置命令窗口的位置,默认原点在窗口的左上角,实际设置的是原点的位置,现在设置的位置是画面中下方
  14.     @command_window.x = 320 - @command_window.width / 2
  15.     @command_window.y = 288
  16.     # 设置活跃状态:不活动,只有在该窗口活动的情况下才能调用更新方法
  17.     @command_window.active = false
  18.     # 设置可见状态:不可见,如果一个窗口不可见,那么你在屏幕上看不到它
  19.     @command_window.visible = false
  20.     # 利用音频模块Audio演奏背景音乐
  21.      Audio.se_play("Audio/BGM/命运之夜.mp3")
  22.     # 准备过渡
  23.     Graphics.transition
  24.     # 主循环
  25.     loop do
  26.       # 刷新画面信息,这里包括所有可见的对象
  27.       Graphics.update
  28.       # 刷新输入信息,这里是为了接受玩家的输入
  29.       Input.update
  30.       # 刷新画面,这里是进行该场景的私有刷新,重要
  31.       update
  32.       # 如果画面中断就切断循环
  33.       if $scene != self
  34.         break
  35.       end
  36.     end
  37.     # 准备过渡
  38.     Graphics.freeze
  39.     # 释放,窗口和精灵用过之后一定要释放
  40.     @sprite.bitmap.dispose
  41.     @sprite.dispose
  42.     @command_window.dispose
  43.   end
  44.   # 刷新画面
  45.   def update
  46.     # 如果命令窗口激活的情况下,就调用update_command
  47.     if @command_window.active
  48.       update_command
  49.       # 结束update方法,注意,这个执行时必须的,因为防止方法进入到后面去
  50.       return
  51.     end
  52.     # 如果命令窗口没被激活,才能进行到这里
  53.     if Input.trigger?(Input::B) # 按下ESC
  54.       $game_system.se_play($data_system.cancel_se)
  55.       $scene = Scene_Map.new
  56.       return
  57.     end
  58.     if Input.trigger?(Input::A) # 按下Z
  59.       $game_system.se_play($data_system.decision_se)
  60.       @command_window.active = true
  61.       @command_window.visible = true
  62.       return
  63.   end
  64.   # 刷新输入窗口
  65.   def update_command
  66.     # 输入窗口的刷新,这一步是执行光标的闪烁和移动,必须执行
  67.     @command_window.update
  68.     if Input.trigger?(Input::B)
  69.       $game_system.se_play($data_system.cancel_se)
  70.       @sprite.bitmap.dispose
  71.       @sprite.bitmap = RPG::Cache.title("封面")
  72.       @command_window.active = false
  73.       @command_window.visible = false
  74.       return
  75.     end
  76.     if Input.trigger?(Input::C) # 按下空格
  77.       $game_system.se_play($data_system.decision_se)
  78.       # 释放当前精灵的位图
  79.       @sprite.bitmap.dispose
  80.       # 设置新位图,在这里用了内嵌表达式的结构,具体内容请打开RMXP帮助,搜索“内嵌表达式”,来明白它的意思
  81.       @sprite.bitmap = RPG::Cache.title("#{@command_window.index + 1}")
  82.       return
  83.     end
  84.   end
  85. end
复制代码

作者: a516816333    时间: 2013-11-27 12:20
额。都是来吐槽的吗?没人解决问题吗?
作者: a516816333    时间: 2013-11-27 12:24
凝望·流年 发表于 2013-11-27 06:36
真是受不了这种脚本,内容没多少,自己加了一个类,就写这么多没用的注释… ...

求指教,吐完嘈也帮忙解释下呀!在RM界,我们就像幼儿园的学生,而你已经大学毕业,不知道这么比喻恰当不,虽然问题幼稚,但是请亲帮忙用幼儿园小朋友可以理解的语言帮忙解答一下,万分感激。
作者: a516816333    时间: 2013-11-27 12:27
RyanBern 发表于 2013-11-27 09:47
我喜欢最后一句话:STUPID PIG工作室,里面的人不是笨猪,而是一群充满梦想的年轻人!~~~~
新手脚本应该鼓 ...

求指教问题呀!吐槽很贴切,问题未解决,亲,指导下。
因为只有从最简单的脚本改起,才能慢慢摸索出脚本的含义。
如果每一个脚本只是借用别人的,不经过自己修饰,何时才能做自己的脚本啊,
授人以鱼不如授人以渔。谢谢,
作者: RyanBern    时间: 2013-11-27 12:53
a516816333 发表于 2013-11-27 12:27
求指教问题呀!吐槽很贴切,问题未解决,亲,指导下。
因为只有从最简单的脚本改起,才能慢慢摸索出脚本 ...

不好意思,我刚才以为是一个技术发布帖,相关内容已经放在3L
作者: a516816333    时间: 2013-11-27 13:17
RyanBern 发表于 2013-11-27 09:47
我喜欢最后一句话:STUPID PIG工作室,里面的人不是笨猪,而是一群充满梦想的年轻人!~~~~
新手脚本应该鼓 ...

恩,是简单了,如果我要编辑每一条的:
比如第二条:物品相关,我选择第二条,之后会有一大段我自己加的描述,我要在脚本中的那个地方自己编辑文字呢?
作者: a516816333    时间: 2013-11-28 16:46
a516816333 发表于 2013-11-27 13:17
恩,是简单了,如果我要编辑每一条的:
比如第二条:物品相关,我选择第二条,之后会有一大段我自己加的 ...

没解决,光复制一段代码给我,和我复制别人的代码有何区别。
高手解决问题就喜欢复制代码,素不知,给我们新手代码,不就是相当于让我没从问一个问题的解决方案到去寻找一个新的问题的解决方案吗?自己问的问题没解决,有给我们出个新问题。越问越迷茫。然后要不就给一堆教程,头都大了。
所有能不能这样呢?你就用我给你的代码?帮我做一个最简单的范例。就是在第二条中,帮我加点物品介绍,随便乱写几个字,让我知道那几个字,是在脚本中那个地方编辑的,然后我就可以照着学了,给我一段代码完全是没有用的。
作者: 艾拉梅德    时间: 2013-11-28 20:54
a516816333 发表于 2013-11-28 09:46
没解决,光复制一段代码给我,和我复制别人的代码有何区别。
高手解决问题就喜欢复制代码,素不知,给我 ...

222200mlxl4nznnclmig9r.zip (199.62 KB, 下载次数: 27)

脚本中是让你在titles文件夹里放上对应的1-5图片来显示内容……
也就是说,titles里有一个1.jpg的图片,那么选择第一选项就会出现1这个图片,你把你想表达的在图片上弄好就行了……
作者: RyanBern    时间: 2013-11-28 21:56
听了LZ的一番话,感觉还是略微不爽。首先声明一点,代码是我自己写的,不是复制过来的,而且结构跟你给的没有任何差别。其次,LZ问问题的方式有问题,我算是明白了,LZ问的问题无异于“大家教我怎么写脚本吧”,你说这样大的问题叫我们怎么回答?所以我只好把问题问得再详细点,问问你需要什么,你想怎么改,结果你也没个回复。后来我没办法了,只好给你引导教程那里去,不过我觉得你应该不屑于看别人写的教程吧。新手有学脚本的欲望,这很好,但是,总不能想到哪里就学到哪里,这样根本解决不了实际问题,因此还要从头学起。你想要分析脚本,这很好,想要拆分别人写的脚本,这也不错,但是,总要先学会拆分的方法吧?如果两眼一抹黑,胡乱猜测脚本原理,那只会为你脚本的研究带来阻碍。

废话扯了一堆,你看了可能会不爽,但是这就是我想跟你说的。现在开始说正题。

编写任何一个脚本,都要明白你想要拿它做什么,如果这个都搞不清,那还不如老老实实用事件做。
就这个脚本而言,你要做的是用图片显示各种游戏的帮助,说明,内容都显示在图片上。而查看哪种帮助(例如“物品相关”),是根据一个命令窗口控制。结构就是这么简单。
因此,场景分为两个阶段,一是没有打开封面的阶段,一个是打开封面查看内容的阶段。
当然,进行这两个阶段之前,要进行准备工作,就是我给的脚本第20行之前的内容,生成你要显示的内容,细节方面,你的脚本注释给得很详细,我就不说了。
第一阶段非常简单,只需要按下Z键打开命令窗口即可,感觉这个阶段多余,不知道做脚本的人怎么想的。
第二阶段,根据命令窗口的索引选择要显示的图片,对@sprite这个精灵的bitmap属性重新设置就好。
不过,我觉得LZ应该不是在意这些,而是在意内容的描绘,很不幸的是,有意义的内容描绘全在图片上了,因此这个就不是个脚本问题,而是一个Photoshop的问题了,制作图片是是自己的事情,脚本帮不了你。

最后一点我不明白,为什么LZ看不下去教程呢?我承认6R中很多人写教程纯属娱乐,但是毕竟有很多讲解很细致的教程啊,LZ完全可以自行查找,或者直接找个内行来帮助你,何必自己走那么多弯路呢?

一点小回复,希望楼主能和我交流。
作者: a516816333    时间: 2013-11-29 10:53
RyanBern 发表于 2013-11-28 21:56
听了LZ的一番话,感觉还是略微不爽。首先声明一点,代码是我自己写的,不是复制过来的,而且结构跟你给的没 ...

看了你的回复,我完全没有不爽的感觉。反而对你的热心感到感激。
其实你能如此详细的解说,已经很清楚了。
但是我还是要说一下,即使是rm看起来比较简单的游戏制作工具,对于新手来说也是有些难度的。
让一个新手热爱脚本,最重要的是可以让他在脚本中体会脚本带来的乐趣,我暂且称之为一种成就感吧!
并不是说,你的方法有任何问题,你叫新手从基本的教程开始学起,是无可厚非的,甚至是很标准的做法,但是像我这样的新手,让我对一个哪怕看上去很简单,但是表述很复杂的脚本,我能够用它将自己的东西融合进去,从而达到自己想要的效果,这便是一份收获。而这种收获也许不会让我在脚本学习上有多大的收获,但是却会进一步的鼓舞自己对脚本的热爱,而这种热爱,我觉得它本身比学会脚本带给我的快乐更多。因此,学习RM制作游戏,我更把它当成是一种乐趣,而不是为了脚本而学脚本,不知道我这样表述,是不是有点矛盾。
但是还是非常谢谢你的解答,当然我开始的语气可能有点会让你不爽,像你道歉。

作者: RyanBern    时间: 2013-11-29 12:22
a516816333 发表于 2013-11-29 10:53
看了你的回复,我完全没有不爽的感觉。反而对你的热心感到感激。
其实你能如此详细的解说,已经很清楚了 ...

其实你说的很对,和别人交流一定要注意方法,这点我没有注意,在这里先检讨下。还有就是你有可贵的学习脚本的热情,这个很好,但是学习脚本的过程不是这样的。必须要先对脚本有正确的理解才能真正写出自己的脚本,虽说模仿是脚本学习的一种方式,但我不建议你这样,因为这样就相当于跳过理解它的原理。这样,如果你不嫌弃,我可以给你最细致地拆解我写的那个脚本的具体内容,并且你有什么问题也可以在我账号留言版上留下,你看如何?
作者: a516816333    时间: 2013-11-29 13:35
RyanBern 发表于 2013-11-29 12:22
其实你说的很对,和别人交流一定要注意方法,这点我没有注意,在这里先检讨下。还有就是你有可贵的学习脚 ...

可以看出你是一个很热心的人,或者说咱们说话比较投机吧!有些理念有共通之处,光凭这一点,我就觉得至少对我来说,你是一个意气相投的人,我从一开始便没给自己定位说要将脚本学习到什么程度,达到什么水平,但是你能说出这样的话,我感到很荣幸。换而言之,我得目的不是学脚本,而是通过学脚本,认识一些朋友,获得一些自我的满足,那样的收获,我觉得远远比学习到脚本的知识更珍贵。




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