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

Project1

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

[已经解决] 尝试写个日记脚本,但是出现了一个简单但是奇怪的问题

[复制链接]

Lv1.梦旅人

梦石
0
星屑
196
在线时间
835 小时
注册时间
2012-9-16
帖子
1811
跳转到指定楼层
1
发表于 2013-8-28 20:39:59 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 yangjunyin2002 于 2013-9-15 20:31 编辑

@Password @小小刀886 @丿梁丶小柒 @八宝粥先生 @protosssonny
本来呢,我看到了小柒的无尽之旅III-花落有时,然后里面有个“日志”,于是,我也想仿照这个写。
我已经有了思路了,先是借鉴叶子的任务系统,但是有些问题,现在借鉴了下VA的菜单显示任务脚本,虽然是VA的,但是给了我点启示吧。。。
日记这个场景我是仿照menu和end画面的。目前背景图已经OK了,窗口待我改下坐标和宽度、高度。

但是现在遇到了个问题,似乎很普通,但是为什么似乎解决不了?毕竟我是个脚本新手吧,再加上都是自己钻研的...求教下。。。
       我把脚本贴上来。问题是:这个“日记”场景明明有个判定了的,可是按下esc无法返回。

注:此脚本还是半成品。。。“日记”内容的显示需要修改Window_Bsae,背景图我是仿照update_menu_background修改了Scene_Base等,然后File这儿是为了存档和读档时
    能保存和读取这个信息。window_diary就是显示的那个窗口。主要还是找到Scene_diary部分,我前面写的应该也对啊,而且我也有:
  1.   def return_scene
  2.     $scene = Scene_Menu.new(5)
  3.   end
复制代码
  1.   def update_diary
  2.     if Input.trigger?(Input::B)
  3.       Sound.play_cancel
  4.       return_scene
  5.     end
  6.   end
复制代码
应该不会错啊。。。

脚本贴上(说过了是半成品):
  1. class Scene_Base
  2.   def create_diary_background
  3.     @diaryback_sprite = Sprite.new
  4.     @diaryback_sprite.bitmap = Cache.system("日记背景")
  5.     @diaryback_sprite.color.set(16, 16, 16, 128)
  6.     update_diary_background
  7.   end
  8.   def dispose_diary_background
  9.     @diaryback_sprite.dispose
  10.   end
  11.   def update_diary_background
  12.   end
  13. end
  14. class Scene_Diary < Scene_Base
  15.   def start
  16.     super
  17.     create_diary_background
  18.     @diary_window = Window_Diary.new
  19.   end
  20.   def terminate
  21.     super
  22.     dispose_diary_background
  23.     @diary_window.dispose
  24.   end
  25.   def update
  26.     super
  27.     update_diary_background
  28.     @diary_window.update
  29.   end
  30.   def return_scene
  31.     $scene = Scene_Menu.new(5)
  32.   end
  33.   def update_diary
  34.     if Input.trigger?(Input::B)
  35.       Sound.play_cancel
  36.       return_scene
  37.     end
  38.   end
  39. end
  40. class Window_Diary < Window_Base
  41.   def initialize
  42.     addheight = 24
  43.     tb = Bitmap.new(544,416)
  44.     if $diary_information.is_a?(String) and $diary_information!=""
  45.       @temptext = $diary_information.gsub(/(\r\n)|\n/,"")
  46.       i = 1
  47.       p = 0
  48.       insert_list = []
  49.       while p+i<= @temptext.size
  50.         w = tb.text_size(@temptext[p,i]).width
  51.         if w > window_width
  52.           insert_list << p+i-2
  53.           p = p+i-2
  54.           i = 1
  55.         end
  56.         i+=1
  57.       end
  58.       insert_list.reverse!
  59.       insert_list.each{|k| @temptext.insert(k,"\n")}
  60.       tb.dispose
  61.       addheight = (insert_list.size+2) * 24
  62.     end
  63.     super(380,50, window_width, 48 + addheight)
  64.     refresh
  65.   end
  66.   def window_width
  67.     return 160
  68.   end
  69.   def refresh
  70.     contents.clear
  71.     if $diary.nil? or $diary==""
  72.       $diary="●  "
  73.       $diary_information="●  "
  74.     end
  75.     draw_text_ex(0,0,"")
  76.     draw_text_ex(0,24,"\\C[1]#{$diary}")
  77.     text_color(2)
  78.     draw_text_ex(0,48,@temptext)
  79.   end
  80.   def diary
  81.     $diary
  82.   end
  83.   def open
  84.     refresh
  85.     super
  86.   end
  87. end
  88. class Scene_File < Scene_Base
  89.   def write_save_data(file)
  90.     characters = []
  91.     for actor in $game_party.members
  92.       characters.push([actor.character_name, actor.character_index])
  93.     end
  94.     $game_system.save_count += 1
  95.     $game_system.version_id = $data_system.version_id
  96.     @last_bgm = RPG::BGM::last
  97.     @last_bgs = RPG::BGS::last
  98.     Marshal.dump(characters,           file)
  99.     Marshal.dump(Graphics.frame_count, file)
  100.     Marshal.dump(@last_bgm,            file)
  101.     Marshal.dump(@last_bgs,            file)
  102.     Marshal.dump($game_system,         file)
  103.     Marshal.dump($game_message,        file)
  104.     Marshal.dump($game_switches,       file)
  105.     Marshal.dump($game_variables,      file)
  106.     Marshal.dump($game_self_switches,  file)
  107.     Marshal.dump($game_actors,         file)
  108.     Marshal.dump($game_party,          file)
  109.     Marshal.dump($game_troop,          file)
  110.     Marshal.dump($game_map,            file)
  111.     Marshal.dump($game_player,         file)
  112.     Marshal.dump($diary,               file)
  113.   end
  114.   def read_save_data(file)
  115.     characters           = Marshal.load(file)
  116.     Graphics.frame_count = Marshal.load(file)
  117.     @last_bgm            = Marshal.load(file)
  118.     @last_bgs            = Marshal.load(file)
  119.     $game_system         = Marshal.load(file)
  120.     $game_message        = Marshal.load(file)
  121.     $game_switches       = Marshal.load(file)
  122.     $game_variables      = Marshal.load(file)
  123.     $game_self_switches  = Marshal.load(file)
  124.     $game_actors         = Marshal.load(file)
  125.     $game_party          = Marshal.load(file)
  126.     $game_troop          = Marshal.load(file)
  127.     $game_map            = Marshal.load(file)
  128.     $diary               = Marshal.load(file)
  129.     if $game_system.version_id != $data_system.version_id
  130.       $game_map.setup($game_map.map_id)
  131.       $game_player.center($game_player.x, $game_player.y)
  132.     end
  133.   end
  134. end
  135. class Window_Base < Window
  136.   def text_size(str)
  137.     contents.text_size(str)
  138.   end
  139.   def draw_text_ex(x, y, text)
  140.     reset_font_settings
  141.     text = convert_escape_characters(text)
  142.     pos = {:x => x, :y => y, :new_x => x, :height => calc_line_height(text)}
  143.     process_character(text.slice!(0, 1), text, pos) until text.empty?
  144.   end
  145.   def reset_font_settings
  146.     contents.font.size = Font.default_size
  147.     contents.font.bold = false
  148.     contents.font.italic = false
  149.   end
  150.   def draw_text(*args)
  151.     contents.draw_text(*args)
  152.   end
  153.   def text_size(str)
  154.     contents.text_size(str)
  155.   end
  156.   def make_font_bigger
  157.     contents.font.size += 8 if contents.font.size <= 64
  158.   end
  159.   def make_font_smaller
  160.     contents.font.size -= 8 if contents.font.size >= 16
  161.   end
  162.   def calc_line_height(text, restore_font_size = true)
  163.     result = [line_height, contents.font.size].max
  164.     last_font_size = contents.font.size
  165.     text.slice(/^.*$/).scan(/\e[\{\}]/).each do |esc|
  166.       make_font_bigger  if esc == "\e{"
  167.       make_font_smaller if esc == "\e}"
  168.       result = [result, contents.font.size].max
  169.     end
  170.     contents.font.size = last_font_size if restore_font_size
  171.     result
  172.   end
  173.   def convert_escape_characters(text)
  174.     result = text.to_s.clone
  175.     result.gsub!(/\r\n/)          { "\n" }
  176.     result.gsub!(/\\/)            { "\e" }
  177.     result.gsub!(/\e\e/)          { "\\" }
  178.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  179.     result.gsub!(/\eV\[(\d+)\]/i) { $game_variables[$1.to_i] }
  180.     result.gsub!(/\eN\[(\d+)\]/i) { actor_name($1.to_i) }
  181.     result.gsub!(/\eP\[(\d+)\]/i) { party_member_name($1.to_i) }
  182.     result.gsub!(/\eG/i)          { Vocab::currency_unit }
  183.     result
  184.   end
  185.   def line_height
  186.     return 24
  187.   end
  188.   def standard_padding
  189.     return 12
  190.   end
  191.   def process_character(c, text, pos)
  192.     case c
  193.     when "\n"   # 换行
  194.       process_new_line(text, pos)
  195.     when "\f"   # 翻页
  196.       process_new_page(text, pos)
  197.     when "\e"   # 控制符
  198.       process_escape_character(obtain_escape_code(text), text, pos)
  199.     else        # 普通文字
  200.       process_normal_character(c, pos)
  201.     end
  202.   end
  203.   def obtain_escape_code(text)
  204.     text.slice!(/^[\$\.\|\^!><\{\}\\]|^[A-Z]+/i)
  205.   end
  206.   def process_escape_character(code, text, pos)
  207.     case code.upcase
  208.     when 'I'
  209.       process_draw_icon(obtain_escape_param(text), pos)
  210.     when '{'
  211.       make_font_bigger
  212.     when '}'
  213.       make_font_smaller
  214.     end
  215.   end
  216.   def process_normal_character(c, pos)
  217.     text_width = text_size(c).width
  218.     draw_text(pos[:x], pos[:y], text_width * 2, pos[:height], c)
  219.     pos[:x] += text_width
  220.   end
  221.   def obtain_escape_param(text)
  222.     text.slice!(/^\[\d+\]/)[/\d+/].to_i rescue 0
  223.   end
  224. end
复制代码

——旧坑欢迎戳

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
来自 5楼
发表于 2013-8-29 12:21:37 | 只看该作者
你没有在update里调用update_diary。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

彭格列I世

梦石
0
星屑
168
在线时间
566 小时
注册时间
2012-8-17
帖子
1614
4
发表于 2013-8-29 11:50:24 | 只看该作者
脚本渣路过=-=
回复 支持 反对

使用道具 举报

Lv4.逐梦者

送快递的水表员

梦石
10
星屑
4867
在线时间
3303 小时
注册时间
2012-6-27
帖子
7160

开拓者贵宾

3
发表于 2013-8-28 21:54:05 | 只看该作者
本帖最后由 Password 于 2013-8-28 21:57 编辑

也许是没有刷新?或者刷新的东西不对?两个定义是否写到一个Class里?

表示脚本好长好挤,看不懂
回复 支持 反对

使用道具 举报

Lv2.观梦者

永无止境的旅程

梦石
0
星屑
503
在线时间
1552 小时
注册时间
2012-6-19
帖子
1226

开拓者贵宾

2
发表于 2013-8-28 21:07:18 | 只看该作者
最近一直在看VA,然后已经把VX忘记了。脚本表示看不懂

点评

额。。。话说小柒还是继续用VX别转VA了把、、、  发表于 2013-8-29 15:05
[url=https://rpg.blue/thread-389697-1-1.html]https://rpg.blue/https://rpg.blue/data/attachment/forum/201602/26/220128cfbxxs47xth4xkz4.jpg[/url]
&lt;font size=&quot;5&quot;&gt;[color=Green][url=https://rpg.blue/forum.php?mod=viewthread&amp;tid=396208&amp;extra=page%3D1][color=DeepSkyBlue]全新配套ACT系统,每周末一大更新,尽请期待。[/color][/url][/color]
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-12-25 01:12

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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