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

Project1

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

[通用发布] [ISA][华丽丽地更新]子选项Final

[复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
跳转到指定楼层
1
发表于 2012-11-23 22:52:17 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

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

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

x
之前在ISA发的子选项的升级版,不兼容上个版本.
先上预览图...




这次做了视频说明.....

网盘下载:
sub

脚本分为2部分:主体,库。之后可能会对库进行更新(可能性趋近与0)。我估计也没什么人用这个"半成品",
所以之后以本脚本为基础,做一些漂亮有实用的东西出来
xp,vx,va全支持,详见附件的范例下载(3个版本的都在里面),不过,范例只是个半成品,仅仅是来说明这个脚本是怎么使用的.

本体脚本:
RUBY 代码复制
  1. #==============================================================================
  2. #  中文名称: 子选项Final
  3. #  英文名称: ZiXuanXiangFinal
  4. #------------------------------------------------------------------------------
  5. #  协议: Ideal Script Association(ISA)
  6. #------------------------------------------------------------------------------
  7. #  作者: 沙漠点灰
  8. #  版本: 0.9.5
  9. #  更新日期:
  10. #==============================================================================
  11.  
  12. module ISA
  13.   # 字体选中显示修正
  14.   SubTitleUpdate = true
  15.   # 子选项字体阴影
  16.   SubTitleShadow = true
  17.   # 一页最大选项数,不建议修改,会出现bug
  18.   SubTitleMAX    = 5
  19.   # 间距,不建议修改
  20.   SubTitleSpan   = 20
  21.   # 移动层数  当层数达到该值,左移一格
  22.   SubTitleDeep   = 3
  23.   @@_reg ||= {}
  24.   @@_reg["子选项Final"] = "0.9.5"
  25. end
  26. ISA::Edition = self ? (RUBY_VERSION == '1.9.2' ? :va : :vx) : :xp
  27.  
  28. #==============================================================================
  29. # ■ 临时缓存
  30. #==============================================================================
  31. module ISACache
  32.   # 注: "0xFF" => 窗体     "0xFE" => 窗体(选中) "0xFD" => 右箭头
  33.   #     "0xFC" => 数字选择 "0xFB" => 数字
  34.  
  35.   def self.load(name)
  36.     @@_cache[name]
  37.   end
  38.   def self.save(obj,name)
  39.     @@_cache[name] = obj
  40.   end
  41.   def self.clear
  42.     @@_cache = {}
  43.     GC.start
  44.     bg = Bitmap.new(22*6,32)
  45.     bg.fill_rect(0,2,bg.width,bg.height-4, Color.new(220,150,0,255))
  46.     self.save(bg, "0xFE")
  47.     bg = Bitmap.new(14,32)
  48.     bg.height.times{|i|bg.fill_rect(i,i-2,1,28-i*2, Color.new(255,255,255,200)) if i > 1}
  49.     self.save(bg, "0xFD")
  50.     bg = Bitmap.new(11,22)
  51.     bg.fill_rect(bg.rect, Color.new(220,150,0))
  52.     self.save(bg, "0xFC")
  53.     rect = bg.text_size("0123456789")
  54.     bg = Bitmap.new(rect.width, rect.height)
  55.     bg.font.color =  Color.new(0,0,0)
  56.     bg.draw_text(rect, "0123456789")
  57.     self.save(bg, "0xFB")
  58.     #self.save(Bitmap.new("font.png"), "0xFB")
  59.   end
  60. end
  61.  
  62. # 绘制位图数据
  63. ISACache.clear
  64. #==============================================================================
  65. # ■ Wnd_SubTitle_Main
  66. #------------------------------------------------------------------------------
  67. #  子选项 主窗体
  68. #==============================================================================
  69.  
  70. class Wnd_SubTitle_Main
  71.   include ISA
  72.   attr_reader :_id
  73.   attr_reader :_sub
  74.   attr_reader :index
  75.   #--------------------------------------------------------------------------
  76.   #  初始化对象
  77.   #--------------------------------------------------------------------------
  78.   def initialize(x, y, title,index=0)
  79.     #!!!!!Sub的initialize也要修改!!
  80.     @_backing = nil # 返回中
  81.     @_num_input = false # 数字输入标志
  82.     @_num_op = 255 # 数值不透明度
  83.     @_num_de = -1 # 滚动方向
  84.     @_num_ipt = 0 # 数值
  85.     @_num_max = 0 # 最大数值
  86.     @_num_index = 0 # 数值标志
  87.     @_num_frt = 0 # 数值输入x坐标
  88.     @_num_dig = 1 # 数值位数
  89.     @_window_x = 0  # 窗体x
  90.     @_window_x_old = 0 # 窗体旧x
  91.     @_window_count = 0 # 窗体移动帧数
  92.     @_window_move = [] # 窗体移动路径
  93.     @title = title!(title)
  94.     @index = index
  95.     @_id = []
  96.     @_view = Rect.new(x, y, 22*6+4, 32*SubTitleMAX)
  97.     @_self = Sprite.new
  98.     @_self.bitmap = Bitmap.new(@_view.width+SubTitleSpan, @_view.height)
  99.     @_bitmap = @_self.bitmap.dup
  100.     @_bitmap_data = [] # 临时位图储存
  101.     @_title_count = [] # 移动剩余帧数
  102.     @_title_move  = [] # 移动速度
  103.     @_title_now_y = [] # 各index的y坐标
  104.     @_title_str_x = [] # 显示项目的x坐标
  105.     @_title_direc = [] # 项目滚动方向
  106.     @_head_op = 128;@_head_dr = 1;@_head_move = 25;@_head_move_d = -1
  107.     @size = 0
  108.     @title.keys.each{|i|make_new(i[@_id.size],@title[i]) if be2self?(i)
  109.     @size+=1 if be2self?(i)}
  110.     j = 0
  111.     @title.keys.each{|i|
  112.     if be2self?(i)
  113.       @_title_str_x << 0
  114.       @_title_count << 0
  115.       @_title_move << []
  116.       @_title_direc[j] = 1 unless @_title_direc[j]
  117.       @_title_now_y << j*32 + SubTitleMAX*32
  118.       get_to(j, @_title_now_y[j])
  119.       move_to(j,j*32+64,30,1.5)
  120.       add_pause(j, [j*10,50].min)
  121.       j+=1
  122.     end
  123.     }
  124.     @_update_step = 0
  125.     @_sub = nil
  126.     @_visible = true
  127.     @_active = true
  128.     self.x = x;self.y = y;@_z = 0
  129.     @_exit = false
  130.   end
  131.   #--------------------------------------------------------------------------
  132.   #  光标位置
  133.   #--------------------------------------------------------------------------
  134.   def _index
  135.     index = [@index]
  136.     obj = self
  137.     while obj._sub
  138.       index += [obj._sub.index]
  139.       obj = obj._sub
  140.     end
  141.     index
  142.   end
  143.   #--------------------------------------------------------------------------
  144.   #  回到x层数
  145.   #--------------------------------------------------------------------------
  146.   def back2(x)
  147.     @_backing = x
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   #  缓存清除
  151.   #--------------------------------------------------------------------------
  152.   def cache_clear
  153.     @_bitmap_data = []
  154.     @size = 0
  155.     @title.keys.each{|i|make_new(i[@_id.size],@title[i]) if be2self?(i)
  156.     @size+=1 if be2self?(i)}
  157.     move_nor
  158.     @_sub.cache_clear if @_sub
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   #  选择
  162.   #--------------------------------------------------------------------------
  163.   def set_index(index=@index)
  164.     @index = index
  165.     return if moving?
  166.     @_title_move[index] = [0]
  167.     @_title_count[index] = 1
  168.   end
  169.   #--------------------------------------------------------------------------
  170.   #  存在子选项?
  171.   #--------------------------------------------------------------------------
  172.   def exist_sub?(index=@index)
  173.     @title[@_id+[index,0]]
  174.   end
  175.   #--------------------------------------------------------------------------
  176.   #  退出
  177.   #--------------------------------------------------------------------------
  178.   def exit!
  179.     @_exit = true
  180.     @size.times{|i|
  181.     move_to(i,160,30,1.5)
  182.     add_pause(i, [50, @size*10].min-[i*10,50].min)
  183.     }
  184.   end
  185.   #--------------------------------------------------------------------------
  186.   #  返回
  187.   #--------------------------------------------------------------------------
  188.   def back!
  189.     return if @_exit
  190.     return exit! unless @_sub
  191.     @_sub.back! if !@_sub.exit?
  192.   end
  193.   #--------------------------------------------------------------------------
  194.   #  显示数字
  195.   #--------------------------------------------------------------------------
  196.   def show_num(num)
  197.     var = sprintf("%.#{@_num_dig}d", num)
  198.     bmp = ISACache.load("0xFB");wd = bmp.width/10
  199.     rect = bmp.text_size(var)
  200.     new_b = Bitmap.new(@_view.width,32)
  201.     x = (new_b.width-rect.width)/2;y = (new_b.height-rect.height)/2
  202.     @_num_frt = x
  203.     var.split("").each{|i|new_b.blt(x, y, bmp, Rect.new(i.to_i*wd,0,wd,bmp.height));x += wd}
  204.     new_b
  205.   end
  206.   #--------------------------------------------------------------------------
  207.   #  退出
  208.   #--------------------------------------------------------------------------
  209.   def exit?
  210.     @_exit and !moving?
  211.   end
  212.   #--------------------------------------------------------------------------
  213.   #  自己的??
  214.   #--------------------------------------------------------------------------
  215.   def be2self?(ary)
  216.     ary.size == @_id.size+1 and @_id == ary[0,@_id.size]
  217.   end
  218.   #--------------------------------------------------------------------------
  219.   #  加入暂停 缓停
  220.   #--------------------------------------------------------------------------
  221.   def add_pause(index, count)
  222.     @_title_move[index] += [0]*count
  223.     @_title_count[index] += count
  224.   end
  225.   #--------------------------------------------------------------------------
  226.   #  释放
  227.   #--------------------------------------------------------------------------
  228.   def dispose
  229.     @_sub.dispose if @_sub
  230.     @_self.dispose
  231.     @_bitmap.dispose
  232.     @_self.bitmap.dispose
  233.   end
  234.   #--------------------------------------------------------------------------
  235.   #  刷新副选项箭头
  236.   #--------------------------------------------------------------------------
  237.   def update_sub_head
  238.     return unless exist_sub?
  239.     @_head_move += @_head_move_d
  240.     @_head_move = [0,[@_head_move,25].min].max
  241.     @_bitmap.fill_rect(@_view.width, 67, SubTitleSpan, 32, Color.new(0,0,0,0))
  242.     src_bmp = ISACache.load("0xFD")
  243.     @_bitmap.blt(@_view.width+@_head_move, 67, src_bmp, src_bmp.rect, @_head_op)
  244.     @_head_op += @_head_dr * 3
  245.     @_head_dr *= -1 if @_head_op >= 255 or @_head_op <= 125
  246.     @_head_op = 255 if @_head_op > 255
  247.   end
  248.   #--------------------------------------------------------------------------
  249.   #  刷新
  250.   #--------------------------------------------------------------------------
  251.   def update
  252.     if @_sub # 子选项刷新
  253.       @_sub.update
  254.       if @_sub.exit?
  255.         @_sub.dispose
  256.         @_sub = nil
  257.         self.active = true
  258.       end
  259.     end
  260.     if self.class == Wnd_SubTitle_Main # 窗体移动
  261.       @_window_x = [(140+SubTitleSpan)*(SubTitleDeep-_index.size),0].min
  262.       move_window if @_window_x != @_window_x_old
  263.       if @_window_count > 0
  264.         @_window_count -= 1
  265.         self.x += @_window_move[@_window_count]
  266.       end
  267.     end
  268.     update_move    # 移动刷新
  269.     if @_num_input # 数值输入??
  270.       if Input.repeat?(Input::DOWN) and self.active and !@_exit
  271.         play_se
  272.         @_num_ipt -= 10**(@_num_dig-@_num_index-1)
  273.         @_num_ipt = [[@_num_ipt, 0].max, @_num_max].min
  274.       end
  275.       if Input.repeat?(Input::UP) and self.active and !@_exit
  276.         play_se
  277.         @_num_ipt += 10**(@_num_dig-@_num_index-1)
  278.         @_num_ipt = [[@_num_ipt, 0].max, @_num_max].min
  279.       end
  280.       if Input.repeat?(Input::LEFT) and self.active and !@_exit
  281.         play_se
  282.         @_num_index -= 1 if @_num_index > 0
  283.         update_input
  284.       end
  285.       if Input.repeat?(Input::RIGHT) and self.active and !@_exit
  286.         play_se
  287.         @_num_index += 1 if @_num_index < @_num_dig -1
  288.         update_input
  289.       end
  290.     else # 普通
  291.       if Input.repeat?(Input::DOWN) and self.active and !@_exit
  292.         play_se
  293.         @index += 1;@index%=@size
  294.         move_nor
  295.       end
  296.       if Input.repeat?(Input::UP) and self.active and !@_exit
  297.         play_se
  298.         @index -= 1;@index%=@size
  299.         move_nor
  300.       end
  301.     end
  302.     if Input.trigger?(Input::C) and self.active and !@_exit
  303.       if exist_sub? # 存在选择支
  304.         play_se(1)
  305.         @_sub = Wnd_SubTitle_Sub.new(@title,self,@_id+[@index])
  306.         self.active = false
  307.       end
  308.     end
  309.     if Input.trigger?(Input::B) and self.active and !@_sub and !@_exit
  310.       play_se(2)
  311.       exit!
  312.     end
  313.     if self.active
  314.       update_input if @_num_input and @_num_ipt_old != @_num_ipt
  315.       update_sub_head# 刷新副选项箭头
  316.       update_show   # 字符显示修正
  317.       update_bitmap # 位图刷新
  318.     end
  319.     return if self.class != Wnd_SubTitle_Main or !@_backing # 检查返回
  320.     return @_backing = nil if @_backing == _index.size
  321.     back! # 返回!
  322.   end
  323.   #--------------------------------------------------------------------------
  324.   #  SE播放
  325.   #--------------------------------------------------------------------------
  326.   def play_se(se=0)
  327.     case ISA::Edition
  328.     when :xp
  329.       case se
  330.       when 0
  331.         $game_system.se_play($data_system.cursor_se)
  332.       when 1
  333.         $game_system.se_play($data_system.decision_se)
  334.       when 2
  335.         $game_system.se_play($data_system.cancel_se)
  336.       end
  337.     when :vx
  338.       case se
  339.       when 0
  340.         Sound.play_cursor
  341.       when 1
  342.         Sound.play_decision
  343.       when 2
  344.         Sound.play_cancel
  345.       end
  346.     when :va
  347.       case se
  348.       when 0
  349.         Sound.play_cursor
  350.       when 1
  351.         Sound.play_ok
  352.       when 2
  353.         Sound.play_cancel
  354.       end
  355.     end
  356.   end
  357.   #--------------------------------------------------------------------------
  358.   #  刷新输入
  359.   #--------------------------------------------------------------------------
  360.   def update_input
  361.     return unless @_bitmap_data[index]
  362.     @_bitmap_data[index][1] = show_num(@_num_ipt)
  363.     bmp = ISACache.load("0xFC")
  364.     get_to(0)
  365.     @_bitmap.blt(@_num_frt+@_num_index*bmp.width,
  366.     16-bmp.height/2+@_title_now_y[0],bmp,bmp.rect,@_num_op)
  367.     @_num_op += @_num_de * 5
  368.     @_num_de *= -1 if @_num_op < 156 or @_num_op >= 255
  369.     @_num_op = [[@_num_op, 155].max,255].min
  370.   end
  371.   #--------------------------------------------------------------------------
  372.   #  移动窗体
  373.   #--------------------------------------------------------------------------
  374.   def move_window
  375.     count = 30;
  376.     triangle_v = (@_window_x-@_window_x_old).to_f*2/(count**2)
  377.     @_window_move = [-triangle_v/2]
  378.     count.times{|i|@_window_move[i]=triangle_v+@_window_move[i-1]}
  379.     @_window_count = count
  380.     @_window_x_old = @_window_x
  381.   end
  382.   #--------------------------------------------------------------------------
  383.   #  C键允许
  384.   #--------------------------------------------------------------------------
  385.   def c?
  386.     return true if !@_sub and !exist_sub?
  387.     return true if @_sub and @_sub.c?
  388.     false
  389.   end
  390.   #--------------------------------------------------------------------------
  391.   #  字符显示修正
  392.   #--------------------------------------------------------------------------
  393.   def update_show
  394.     @size.times{|i|
  395.     if @_title_direc[i] != 0 and (i == @index or !SubTitleUpdate )
  396.       @_title_direc[i] *= -1 if @_title_str_x[i] == 0 or @_title_str_x[i]-4 == @_bitmap_data[i][1].width-@_view.width
  397.       @_title_str_x[i] -= @_title_direc[i]*0.25
  398.       get_to(i, nil, @_title_str_x[i],@index==i)
  399.     end
  400.     }
  401.   end
  402.   #--------------------------------------------------------------------------
  403.   #  位图刷新
  404.   #--------------------------------------------------------------------------
  405.   def update_bitmap
  406.     @_self.bitmap.clear
  407.     @_bitmap.height.times{|a|
  408.     if a < 64
  409.       @_self.bitmap.blt(0,a,@_bitmap,Rect.new(0,a,@_bitmap.width,1),a*4)
  410.     elsif a >= 96
  411.       @_self.bitmap.blt(0,a,@_bitmap,Rect.new(0,a,@_bitmap.width,1),(159-a)*4)
  412.     elsif a == 64
  413.       @_self.bitmap.blt(0,a,@_bitmap,Rect.new(0,a,@_bitmap.width,32))
  414.     end
  415.     }
  416.   end
  417.   #--------------------------------------------------------------------------
  418.   #  按键通常移动
  419.   #--------------------------------------------------------------------------
  420.   def move_nor
  421.     @size.times{|i|move_to(i, (i-@index+2)*32, 20, 4)}
  422.     @_head_move = 25;@_head_move_d =-1
  423.   end
  424.   #--------------------------------------------------------------------------
  425.   #  生成选项
  426.   #--------------------------------------------------------------------------
  427.   def make_new(index,title)
  428.     bg = ISACache.load("0xFF") # 我就不信有人用这个当名称
  429.     unless bg
  430.       bg = Bitmap.new(22*6,32)
  431.       bg.fill_rect(0,2,bg.width,bg.height-4, Color.new(255,255,255,125))
  432.       ISACache.save(bg, "0xFF")
  433.     end
  434.     tl = ISACache.load([@_id+[index],title])
  435.     unless tl
  436.       tl = make_bmp(@title[@_id+[index]])
  437.       ISACache.save(tl, [@_id+[index],title]) if !@_num_input
  438.     end
  439.     @_title_direc[index] = 0 if tl.width-8 <= @_view.width
  440.     @_bitmap_data[index] = [bg, tl]
  441.   end
  442.   #--------------------------------------------------------------------------
  443.   #  获取选项到...
  444.   #--------------------------------------------------------------------------
  445.   def get_to(index, y=nil, indentation=0,choosing=false)
  446.     y = @_title_now_y[index] unless y
  447.     @_bitmap.fill_rect(0, y, @_bitmap.width-SubTitleSpan, 32, Color.new(0,0,0,0))
  448.     @_bitmap.blt(0, y, @_bitmap_data[index][0], @_bitmap_data[index][0].rect)
  449.     if choosing and !@_num_input
  450.       @_bitmap.blt(0, y, ISACache.load("0xFE"), @_bitmap_data[index][0].rect)
  451.     end
  452.     @_bitmap.blt(2, y+3, @_bitmap_data[index][1],
  453.     Rect.new(indentation.to_i, 0, @_bitmap_data[index][0].width,32),60) if SubTitleShadow
  454.     @_bitmap.blt(0, y, @_bitmap_data[index][1],
  455.     Rect.new(indentation.to_i, 0, @_bitmap_data[index][0].width,32))
  456.   end
  457.   #--------------------------------------------------------------------------
  458.   #  移动 仅Y轴 tag_y:目标y count移动时间(帧) a加速度
  459.   #--------------------------------------------------------------------------
  460.   def move_to(index, tag_y, count, acc)
  461.     triangle_v = (tag_y-@_title_now_y[index]).to_f*2/(count**2)
  462.     @_title_move[index] = [-triangle_v/2]
  463.     count.times{|i|@_title_move[index][i]=triangle_v+@_title_move[index][i-1]}
  464.     @_title_count[index] = count
  465.   end
  466.   #--------------------------------------------------------------------------
  467.   #  刷新移动
  468.   #--------------------------------------------------------------------------
  469.   def update_move
  470.     @_title_count.size.times{|i|
  471.     if @_title_count[i] > 0
  472.       @_title_count[i] -= 1
  473.       clear(i)
  474.       @_title_now_y[i] += @_title_move[i][@_title_count[i]]
  475.       get_to(i, nil, 0, @index==i)
  476.     end
  477.     }
  478.   end
  479.   #--------------------------------------------------------------------------
  480.   #  清除
  481.   #--------------------------------------------------------------------------
  482.   def clear(index)
  483.     y = @_title_now_y[index]
  484.     @_bitmap.fill_rect(0, y, @_bitmap.width, 32, Color.new(0,0,0,0))
  485.   end
  486.   #--------------------------------------------------------------------------
  487.   #  运动中??
  488.   #--------------------------------------------------------------------------
  489.   def moving?
  490.     @_title_count.any?{|i|i>0}
  491.   end
  492.   #--------------------------------------------------------------------------
  493.   #  各种属性
  494.   #--------------------------------------------------------------------------
  495.   def x=(x)
  496.     @_x = x
  497.     @_self.x = x
  498.     @_view.x = x
  499.   end
  500.   def x
  501.     @_x
  502.   end
  503.   def y=(y)
  504.     @_y = y
  505.     @_self.y = y
  506.     @_view.y = y
  507.   end
  508.   def y
  509.     @_y
  510.   end
  511.   def z=(z)
  512.     @_z = z
  513.     @_self.z = @_z
  514.   end
  515.   def z
  516.     @_z
  517.   end
  518.   def visible=(visible)
  519.     @_visible = visible
  520.     @_self.visible = visible
  521.   end
  522.   def visible
  523.     @_visible
  524.   end
  525.   def active=(active)
  526.     @_active = active
  527.   end
  528.   def active
  529.     @_active
  530.   end
  531.   def input
  532.     input = [0]
  533.     obj = @_sub
  534.     loop do
  535.       input << obj._num_ipt
  536.       break if !obj.exist_sub?
  537.       obj = obj._sub
  538.     end
  539.     input
  540.   end
  541. end
  542.  
  543. class Array
  544.   def add_ele(pos, num)
  545.     self[pos] += num
  546.   end
  547. end
  548. #==============================================================================
  549. # ■ Wnd_SubTitle_Main
  550. #------------------------------------------------------------------------------
  551. #  子选项 主窗体
  552. #==============================================================================
  553.  
  554. class Wnd_SubTitle_Sub < Wnd_SubTitle_Main
  555.   def true_father
  556.     obj = @father
  557.     loop do
  558.       break if obj.class == Wnd_SubTitle_Main
  559.       obj = obj.father
  560.     end
  561.     obj
  562.   end
  563.   attr_reader :father
  564.   attr_reader :_num_ipt
  565.   #--------------------------------------------------------------------------
  566.   #  初始化对象
  567.   #--------------------------------------------------------------------------
  568.   def initialize(title,father,_id,index=0)
  569.     @_num_input = false # 数字输入标志
  570.     @_num_ipt = 0 # 数值
  571.     @_num_max = 0 # 最大数值
  572.     @_num_index = 0 # 数值标志
  573.     @_num_frt = 0 # 数值输入x坐标
  574.     @_num_op = 255
  575.     @_num_dig = 1 # 数值位数
  576.     @title = title
  577.     @index = index
  578.     @_num_de = -1
  579.     ##########
  580.     @father = father
  581.     @_id = _id
  582.     @_view = Rect.new(father.x, father.y, 22*6+4, 32*ISA::SubTitleMAX)
  583.     @_self = Sprite.new
  584.     @_self.bitmap = Bitmap.new(@_view.width+ISA::SubTitleSpan, @_view.height)
  585.     @_bitmap = @_self.bitmap.dup
  586.     @_bitmap_data = [] # 临时位图储存
  587.     @_title_count = [] # 移动剩余帧数
  588.     @_title_move  = [] # 移动速度
  589.     @_title_now_y = [] # 各index的y坐标
  590.     @_title_str_x = [] # 显示项目的x坐标
  591.     @_title_direc = [] # 项目滚动方向
  592.     @_head_op = 128;@_head_dr = 1;@_head_move = 25;@_head_move_d = -1
  593.     @size = 0
  594.     @title.keys.each{|i|make_new(i[@_id.size],@title[i]) if be2self?(i)
  595.     @size+=1 if be2self?(i)}
  596.     j = 0
  597.     @title.keys.each{|i|
  598.     if be2self?(i)
  599.       @_title_str_x << 0
  600.       @_title_count << 0
  601.       @_title_move << []
  602.       @_title_direc[j] = 1 unless @_title_direc[j]
  603.       @_title_now_y << j*32 + ISA::SubTitleMAX*32
  604.       get_to(j, @_title_now_y[j])
  605.       move_to(j,j*32+64,30,1.5)
  606.       add_pause(j, [j*10,50].min)
  607.       j+=1
  608.     end
  609.     }
  610.     @_update_step = 0
  611.     @_sub = nil
  612.     @_visible = true
  613.     @_active = true
  614.     self.x = father.x+140+ISA::SubTitleSpan;self.y = father.y;@_z = father.z
  615.     @_exit = false
  616.   end
  617.   def update
  618.     super
  619.     self.x = @father.x+140+ISA::SubTitleSpan;self.y = @father.y;@_z = @father.z
  620.   end
  621. end


库:
RUBY 代码复制
  1. class Wnd_SubTitle_Main
  2.   case ISA::Edition
  3.   when :xp
  4.     #--------------------------------------------------------------------------
  5.     #  文件初处理
  6.     #--------------------------------------------------------------------------
  7.     def title!(title)
  8.       tmp = title.dup
  9.       ary = tmp.keys.sort
  10.       ary.each{|i|
  11.       case tmp[i][0]
  12.       when "输入"
  13.         next unless tmp[i][4]
  14.         size = 0;tmp2 = i.dup
  15.         pos = tmp[i][4]
  16.         loop do
  17.           tmp2.add_ele(pos,1)
  18.           tmp[tmp2[0,pos+1]+i[pos+1,i.size-pos-1]] = tmp[i]
  19.           break unless tmp[tmp2[0,pos+1]]
  20.         end
  21.       when "特技"
  22.         if tmp[i][1].is_a?(String)
  23.           actor = eval(tmp[i][1])
  24.           next unless actor
  25.           data = actor.skills
  26.           if data == []
  27.             tmp.delete(i) # 删除
  28.           else
  29.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["特技",data[j]]}
  30.           end
  31.         end
  32.       when "命令"
  33.         size = 0;tmp2 = i.dup
  34.         pos = tmp[i][3] ? tmp[i][3] : i.size-2
  35.         loop do
  36.           tmp2.add_ele(pos,1)
  37.           tmp[tmp2[0,pos+1]+i[pos+1,i.size-pos-1]] = tmp[i]
  38.           break unless tmp[tmp2[0,pos+1]]
  39.         end
  40.       when "队伍"
  41.         data = $game_party.actors
  42.         if data == []
  43.           tmp.delete(i) # 删除
  44.         else
  45.           size = 0;tmp2 = i.dup
  46.           pos = tmp[i][1] #? tmp[i][1] : i.size-2
  47.           unless pos
  48.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["角色",data[j]]}
  49.           else
  50.             loop do
  51.               var = tmp2[0,pos+1]+i[pos+1,i.size-pos-1]
  52.               data.size.times{|j|tmp[var[0,var.size-1]+[j]] = ["角色",data[j]]}
  53.               tmp2.add_ele(pos,1)
  54.               break unless tmp[tmp2[0,pos+1]]
  55.             end
  56.           end
  57.         end
  58.       when "物品"
  59.         if tmp[i][1] == 0
  60.           data = []
  61.           for j in 1...$data_items.size
  62.             data << j if $game_party.item_number(j) > 0
  63.           end
  64.           if data == []
  65.             tmp.delete(i) # 删除
  66.           else
  67.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["物品",data[j]]}
  68.           end
  69.         end
  70.       when "武器"
  71.         if tmp[i][1] == 0
  72.           data = []
  73.           for j in 1...$data_weapons.size
  74.             data << j if $game_party.weapon_number(j) > 0
  75.           end
  76.           if data == []
  77.             tmp.delete(i) # 删除
  78.           else
  79.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["武器",data[j]]}
  80.           end
  81.         end
  82.       when "防具"
  83.         if tmp[i][1] == 0
  84.           data = []
  85.           for j in 1...$data_armors.size
  86.             data << j if $game_party.armor_number(j) > 0
  87.           end
  88.           if data == []
  89.             tmp.delete(i) # 删除
  90.           else
  91.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["防具",data[j]]}
  92.           end
  93.         end
  94.       end
  95.       }
  96.       tmp
  97.     end
  98.     #--------------------------------------------------------------------------
  99.     #  生成位图
  100.     #--------------------------------------------------------------------------
  101.     def make_bmp(obj)
  102.       case obj[0]
  103.       when "输入"
  104.         @_num_input = true
  105.         @_num_dig = eval(obj[1])
  106.         @_num_ipt = eval(obj[2])
  107.         @_num_max = eval(obj[3])
  108.         bmp = show_num(@_num_ipt)
  109.         update_input
  110.       when "命令"
  111.         str = eval(obj[1])
  112.         wid = @_self.bitmap.text_size(str)
  113.         bmp = Bitmap.new([wid.width, @_view.width].max,32)
  114.         bmp.font.color = eval(obj[2]) ? Color.new(0,0,0) : Color.new(120,120,120)
  115.         bmp.draw_text(bmp.rect, str, 1)
  116.       when "文字"
  117.         wid = @_self.bitmap.text_size(obj[1])
  118.         bmp = Bitmap.new([wid.width, @_view.width].max,32)
  119.         bmp.font.color = Color.new(0,0,0)
  120.         bmp.draw_text(bmp.rect, obj[1], 1)
  121.       when "特技"
  122.         item = $data_skills[obj[1]]
  123.         name = item.name
  124.         wid = @_self.bitmap.text_size(name)
  125.         wid.width += 24
  126.         bitmap = RPG::Cache.icon(item.icon_name)
  127.         bmp = Bitmap.new([wid.width+28, @_view.width].max+8,32)
  128.         bmp.blt((bmp.width-wid.width)/2, 4, bitmap, Rect.new(0, 0, 24, 24))
  129.         bmp.font.color = Color.new(0,0,0)
  130.         bmp.draw_text(0, 0, bmp.width, 32, "  "+name,1)
  131.       when "物品"
  132.         item = $data_items[obj[1]]
  133.         name = item.name + " ×#{$game_party.item_number(item.id)} "
  134.         wid = @_self.bitmap.text_size(name)
  135.         bitmap = RPG::Cache.icon(item.icon_name)
  136.         bmp = Bitmap.new([wid.width+28, @_view.width].max+8,32)
  137.         bmp.blt(0, 4, bitmap, Rect.new(0, 0, 24, 24))
  138.         bmp.font.color = Color.new(0,0,0)
  139.         bmp.draw_text(28, 0, 212, 32, name)
  140.       when "武器"
  141.         item = $data_weapons[obj[1]]
  142.         name = item.name + " ×#{$game_party.weapon_number(item.id)} "
  143.         wid = @_self.bitmap.text_size(name)
  144.         bitmap = RPG::Cache.icon(item.icon_name)
  145.         bmp = Bitmap.new([wid.width+28, @_view.width].max+8,32)
  146.         bmp.blt(0, 4, bitmap, Rect.new(0, 0, 24, 24))
  147.         bmp.font.color = Color.new(0,0,0)
  148.         bmp.draw_text(28, 0, 212, 32, name)
  149.       when "防具"
  150.         item = $data_armors[obj[1]]
  151.         name = item.name + " ×#{$game_party.armor_number(item.id)} "
  152.         wid = @_self.bitmap.text_size(name)
  153.         bitmap = RPG::Cache.icon(item.icon_name)
  154.         bmp = Bitmap.new([wid.width+28, @_view.width].max+8,32)
  155.         bmp.blt(0, 4, bitmap, Rect.new(0, 0, 24, 24))
  156.         bmp.font.color = Color.new(0,0,0)
  157.         bmp.draw_text(28, 0, 212, 32, name)
  158.       when "脚本"
  159.         str = eval(obj[1])
  160.         wid = @_self.bitmap.text_size(str)
  161.         bmp = Bitmap.new([wid.width, @_view.width].max+8,32)
  162.         bmp.font.color = Color.new(0,0,0)
  163.         bmp.draw_text(0,0,bmp.width-SubTitleSpan,bmp.height, str, 1)
  164.       when "角色"
  165.         wid = @_self.bitmap.text_size(obj[1].name)
  166.         bmp = Bitmap.new([wid.width, @_view.width].max+8,32)
  167.         bmp.font.color = Color.new(0,0,0)
  168.         bmp.draw_text(0,0,bmp.width-SubTitleSpan,bmp.height, obj[1].name, 1)
  169.       else
  170.         print "未定义#{obj[0]}";exit
  171.       end
  172.       bmp
  173.     end
  174.   when :vx
  175.     #--------------------------------------------------------------------------
  176.     #  文件初处理
  177.     #--------------------------------------------------------------------------
  178.     def title!(title)
  179.       tmp = title.dup
  180.       ary = tmp.keys.sort
  181.       ary.each{|i|
  182.       case tmp[i][0]
  183.       when "输入"
  184.         next unless tmp[i][4]
  185.         size = 0;tmp2 = i.dup
  186.         pos = tmp[i][4]
  187.         loop do
  188.           tmp2.add_ele(pos,1)
  189.           tmp[tmp2[0,pos+1]+i[pos+1,i.size-pos-1]] = tmp[i]
  190.           break unless tmp[tmp2[0,pos+1]]
  191.         end
  192.       when "特技"
  193.         if tmp[i][1].is_a?(String)
  194.           actor = eval(tmp[i][1])
  195.           next unless actor
  196.           data = actor.skills
  197.           if data == []
  198.             tmp.delete(i) # 删除
  199.           else
  200.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["特技",data[j]]}
  201.           end
  202.         end
  203.       when "命令"
  204.         size = 0;tmp2 = i.dup
  205.         pos = tmp[i][3] ? tmp[i][3] : i.size-2
  206.         loop do
  207.           tmp2.add_ele(pos,1)
  208.           tmp[tmp2[0,pos+1]+i[pos+1,i.size-pos-1]] = tmp[i]
  209.           break unless tmp[tmp2[0,pos+1]]
  210.         end
  211.       when "队伍"
  212.         data = $game_party.members
  213.         if data == []
  214.           tmp.delete(i) # 删除
  215.         else
  216.           size = 0;tmp2 = i.dup
  217.           pos = tmp[i][1] #? tmp[i][1] : i.size-2
  218.           unless pos
  219.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["角色",data[j]]}
  220.           else
  221.             loop do
  222.               tmp2.add_ele(pos,1)
  223.               var = tmp2[0,pos+1]+i[pos+1,i.size-pos-1]
  224.               data.size.times{|j|tmp[var[0,var.size-1]+[j]] = ["角色",data[j]]}
  225.               break unless tmp[tmp2[0,pos+1]]
  226.             end
  227.           end
  228.         end
  229.       when "物品"
  230.         if tmp[i][1] == 0
  231.           data = []
  232.           $game_party.items.each{|item|data.push(item) if item.is_a?(RPG::Item)}
  233.           if data == []
  234.             tmp.delete(i) # 删除
  235.           else
  236.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["物品",data[j]]}
  237.           end
  238.         end
  239.       when "武器"
  240.         if tmp[i][1] == 0
  241.           data = []
  242.           $game_party.items.each{|item|data.push(item) if item.is_a?(RPG::Weapon)}
  243.           if data == []
  244.             tmp.delete(i) # 删除
  245.           else
  246.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["物品",data[j]]}
  247.           end
  248.         end
  249.       when "防具"
  250.         if tmp[i][1] == 0
  251.           data = []
  252.           $game_party.items.each{|item|data.push(item) if item.is_a?(RPG::Armor)}
  253.           if data == []
  254.             tmp.delete(i) # 删除
  255.           else
  256.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["物品",data[j]]}
  257.           end
  258.         end
  259.       end
  260.       }
  261.       tmp
  262.     end
  263.     #--------------------------------------------------------------------------
  264.     #  生成位图
  265.     #--------------------------------------------------------------------------
  266.     def make_bmp(obj)
  267.       case obj[0]
  268.       when "输入"
  269.         @_num_input = true
  270.         @_num_dig = eval(obj[1])
  271.         @_num_ipt = eval(obj[2])
  272.         @_num_max = eval(obj[3])
  273.         bmp = show_num(@_num_ipt)
  274.         update_input
  275.       when "命令"
  276.         str = eval(obj[1])
  277.         wid = @_self.bitmap.text_size(str)
  278.         bmp = Bitmap.new([wid.width, @_view.width].max,32)
  279.         bmp.font.color = eval(obj[2]) ? Color.new(0,0,0) : Color.new(120,120,120)
  280.         bmp.draw_text(bmp.rect, str, 1)
  281.       when "文字"
  282.         wid = @_self.bitmap.text_size(obj[1])
  283.         bmp = Bitmap.new([wid.width, @_view.width].max,32)
  284.         bmp.font.color = Color.new(0,0,0)
  285.         bmp.draw_text(bmp.rect, obj[1], 1)
  286.       when "特技"
  287.         item = obj[1];name = item.name
  288.         icon_index = item.icon_index
  289.         wid = @_self.bitmap.text_size(name)
  290.         wid.width += 24
  291.  
  292.         bitmap = Cache.system("Iconset")
  293.         rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  294.         bmp = Bitmap.new([wid.width+28, @_view.width].max+8,32)
  295.  
  296.         bmp.blt((bmp.width-wid.width)/2, 4, bitmap, rect)
  297.         bmp.font.color = Color.new(0,0,0)
  298.         bmp.draw_text(0, 0, bmp.width, 32, "  "+name,1)
  299.       when "物品"
  300.         item = obj[1];name = item.name+" ×#{$game_party.item_number(item)} "
  301.         icon_index = item.icon_index
  302.         wid = @_self.bitmap.text_size(name)
  303.         wid.width += 24
  304.  
  305.         bitmap = Cache.system("Iconset")
  306.         rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  307.         bmp = Bitmap.new([wid.width+28, @_view.width].max+8,32)
  308.  
  309.         bmp.blt((bmp.width-wid.width)/2, 4, bitmap, rect)
  310.         bmp.font.color = Color.new(0,0,0)
  311.         bmp.draw_text(0, 0, bmp.width, 32, "  "+name,1)
  312.       when "脚本"
  313.         str = eval(obj[1])
  314.         wid = @_self.bitmap.text_size(str)
  315.         bmp = Bitmap.new([wid.width, @_view.width].max+8,32)
  316.         bmp.font.color = Color.new(0,0,0)
  317.         bmp.draw_text(0,0,bmp.width-SubTitleSpan,bmp.height, str, 1)
  318.       when "角色"
  319.         wid = @_self.bitmap.text_size(obj[1].name)
  320.         bmp = Bitmap.new([wid.width, @_view.width].max+8,32)
  321.         bmp.font.color = Color.new(0,0,0)
  322.         bmp.draw_text(0,0,bmp.width-SubTitleSpan,bmp.height, obj[1].name, 1)
  323.       else
  324.         print "未定义#{obj}";exit
  325.       end
  326.       bmp
  327.     end
  328.   when :va
  329.     #--------------------------------------------------------------------------
  330.     #  文件初处理
  331.     #--------------------------------------------------------------------------
  332.     def title!(title)
  333.       tmp = title.dup
  334.       ary = tmp.keys.sort
  335.       ary.each{|i|
  336.       case tmp[i][0]
  337.       when "输入"
  338.         next unless tmp[i][4]
  339.         size = 0;tmp2 = i.dup
  340.         pos = tmp[i][4]
  341.         loop do
  342.           tmp2.add_ele(pos,1)
  343.           tmp[tmp2[0,pos+1]+i[pos+1,i.size-pos-1]] = tmp[i]
  344.           break unless tmp[tmp2[0,pos+1]]
  345.         end
  346.       when "特技"
  347.         if tmp[i][1].is_a?(String)
  348.           actor = eval(tmp[i][1])
  349.           next unless actor
  350.           data = actor.skills
  351.           if data == []
  352.             tmp.delete(i) # 删除
  353.           else
  354.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["特技",data[j]]}
  355.           end
  356.         end
  357.       when "命令"
  358.         size = 0;tmp2 = i.dup
  359.         pos = tmp[i][3] ? tmp[i][3] : i.size-2
  360.         loop do
  361.           tmp2.add_ele(pos,1)
  362.           tmp[tmp2[0,pos+1]+i[pos+1,i.size-pos-1]] = tmp[i]
  363.           break unless tmp[tmp2[0,pos+1]]
  364.         end
  365.       when "队伍"
  366.         data = $game_party.members
  367.         if data == []
  368.           tmp.delete(i) # 删除
  369.         else
  370.           size = 0;tmp2 = i.dup
  371.           pos = tmp[i][1] #? tmp[i][1] : i.size-2
  372.           unless pos
  373.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["角色",data[j]]}
  374.           else
  375.             loop do
  376.               tmp2.add_ele(pos,1)
  377.               var = tmp2[0,pos+1]+i[pos+1,i.size-pos-1]
  378.               data.size.times{|j|tmp[var[0,var.size-1]+[j]] = ["角色",data[j]]}
  379.               break unless tmp[tmp2[0,pos+1]]
  380.             end
  381.           end
  382.         end
  383.       when "贵重物品"
  384.         if tmp[i][1] == 0
  385.           data = []
  386.           $game_party.items.each{|item|data.push(item) if item.is_a?(RPG::Item) and item.key_item?}
  387.           if data == []
  388.             tmp.delete(i) # 删除
  389.           else
  390.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["物品",data[j]]}
  391.           end
  392.         end
  393.       when "物品"
  394.         if tmp[i][1] == 0
  395.           data = []
  396.           $game_party.items.each{|item|data.push(item) if item.is_a?(RPG::Item) and !item.key_item?}
  397.           if data == []
  398.             tmp.delete(i) # 删除
  399.           else
  400.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["物品",data[j]]}
  401.           end
  402.         end
  403.       when "武器"
  404.         if tmp[i][1] == 0
  405.           data = []
  406.           $game_party.items.each{|item|data.push(item) if item.is_a?(RPG::Weapon)}
  407.           if data == []
  408.             tmp.delete(i) # 删除
  409.           else
  410.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["物品",data[j]]}
  411.           end
  412.         end
  413.       when "防具"
  414.         if tmp[i][1] == 0
  415.           data = []
  416.           $game_party.items.each{|item|data.push(item) if item.is_a?(RPG::Armor)}
  417.           if data == []
  418.             tmp.delete(i) # 删除
  419.           else
  420.             data.size.times{|j|tmp[i[0,i.size-1]+[j]] = ["物品",data[j]]}
  421.           end
  422.         end
  423.       end
  424.       }
  425.       tmp
  426.     end
  427.     #--------------------------------------------------------------------------
  428.     #  生成位图
  429.     #--------------------------------------------------------------------------
  430.     def make_bmp(obj)
  431.       case obj[0]
  432.       when "输入"
  433.         @_num_input = true
  434.         @_num_dig = eval(obj[1])
  435.         @_num_ipt = eval(obj[2])
  436.         @_num_max = eval(obj[3])
  437.         bmp = show_num(@_num_ipt)
  438.         update_input
  439.       when "命令"
  440.         str = eval(obj[1])
  441.         wid = @_self.bitmap.text_size(str)
  442.         bmp = Bitmap.new([wid.width, @_view.width].max,32)
  443.         bmp.font.color = eval(obj[2]) ? Color.new(0,0,0) : Color.new(120,120,120)
  444.         bmp.draw_text(bmp.rect, str, 1)
  445.       when "文字"
  446.         wid = @_self.bitmap.text_size(obj[1])
  447.         bmp = Bitmap.new([wid.width, @_view.width].max,32)
  448.         bmp.font.color = Color.new(0,0,0)
  449.         bmp.draw_text(bmp.rect, obj[1], 1)
  450.       when "特技"
  451.         item = obj[1];name = item.name
  452.         icon_index = item.icon_index
  453.         wid = @_self.bitmap.text_size(name)
  454.         wid.width += 24
  455.  
  456.         bitmap = Cache.system("Iconset")
  457.         rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  458.         bmp = Bitmap.new([wid.width+28, @_view.width].max+8,32)
  459.  
  460.         bmp.blt((bmp.width-wid.width)/2, 4, bitmap, rect)
  461.         bmp.font.color = Color.new(0,0,0)
  462.         bmp.draw_text(0, 0, bmp.width, 32, "  "+name,1)
  463.       when "物品"
  464.         item = obj[1];name = item.name+" ×#{$game_party.item_number(item)} "
  465.         icon_index = item.icon_index
  466.         wid = @_self.bitmap.text_size(name)
  467.         wid.width += 24
  468.  
  469.         bitmap = Cache.system("Iconset")
  470.         rect = Rect.new(icon_index % 16 * 24, icon_index / 16 * 24, 24, 24)
  471.         bmp = Bitmap.new([wid.width+28, @_view.width].max+8,32)
  472.  
  473.         bmp.blt((bmp.width-wid.width)/2, 4, bitmap, rect)
  474.         bmp.font.color = Color.new(0,0,0)
  475.         bmp.draw_text(0, 0, bmp.width, 32, "  "+name,1)
  476.       when "脚本"
  477.         str = eval(obj[1])
  478.         wid = @_self.bitmap.text_size(str)
  479.         bmp = Bitmap.new([wid.width, @_view.width].max+8,32)
  480.         bmp.font.color = Color.new(0,0,0)
  481.         bmp.draw_text(0,0,bmp.width-SubTitleSpan,bmp.height, str, 1)
  482.       when "角色"
  483.         wid = @_self.bitmap.text_size(obj[1].name)
  484.         bmp = Bitmap.new([wid.width, @_view.width].max+8,32)
  485.         bmp.font.color = Color.new(0,0,0)
  486.         bmp.draw_text(0,0,bmp.width-SubTitleSpan,bmp.height, obj[1].name, 1)
  487.       else
  488.         print "未定义#{obj}";exit
  489.       end
  490.       bmp
  491.     end
  492.   else
  493.     print "RGSS版本识别不能"
  494.   end
  495. end


附件范例下载:
RM.part1.rar (999 KB, 下载次数: 180)
RM.part2.rar (914.33 KB, 下载次数: 193)

评分

参与人数 1星屑 +600 收起 理由
feizhaodan + 600 奖赏条例

查看全部评分

>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见

Lv1.梦旅人

梦石
0
星屑
55
在线时间
295 小时
注册时间
2008-5-24
帖子
523
2
发表于 2012-11-24 00:27:13 | 只看该作者
支持,很华丽。
另外,就是在选技能上,和选物品上,如此小的框框真会让人玩得不爽,
建议到了选技能和物品时,沿用Xp默认系统的选法,感觉上会好一些。
嗯,如果不必要的话,菜单系统可以弄大一点,加上背景,动态萤火什么的(当然,是成品…还有游戏帧数支持的话……)
就是这样子,以上是个人的一些看法,不必挂在心上。
楼主已经做得很好了。所以,让我借鉴一下吧。

点评

呵呵(= =),初衷仅仅是"子选项",这个菜单仅仅是范例而已...  发表于 2012-11-24 20:38
前方
迷茫
后方
已不在
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

职业の水客

梦石
0
星屑
13959
在线时间
7198 小时
注册时间
2010-6-16
帖子
3497

开拓者

3
发表于 2012-11-24 18:08:46 | 只看该作者
仿SAO的菜单选项......
做的很不错
一个看图的地方
群爆炸重建后状态:论坛老人最多(只剩下了活跃的老人),技术力很强(依旧不变)的编程灌水群:901540785
专门讨论RM相关的Q群:56875149
PS:第一个群不是专门讨论RM的,第二个才是哦。
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
560
在线时间
1286 小时
注册时间
2011-6-14
帖子
4086
4
发表于 2012-11-24 18:43:31 | 只看该作者
真华丽=w=
不过貌似会占用玩家一点时间来看特效之类的,特效速度应该快一点。
另外,如此小的框。。。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
47
在线时间
976 小时
注册时间
2011-4-30
帖子
860
5
发表于 2012-11-26 12:59:03 | 只看该作者
菜单退出的时候速度太慢了,特别是打开层数过多的时候。这里我指的不是运行速度,而是设计上的问题。

举个例子说,LZ做的这个有点类似win7之前的win菜单设计,而win7已经放弃这种设计了,就算是早期的win,他也可以用鼠标想退到第几层就退到第几层,而LZ这个只能一层一层退,比较死板。

而且类似这种层数太多的设计最好有个快速退出的通道。

还有原本rm画面就不大,可显示的信息量本来就有限,按照LZ这么一弄,显示的信息量更少了,我估计是LZ考虑到这个菜单的运行效率不能加载太多的选项?

虽然我觉得这个构思有点意思,但是如果实际应用我不会向别人推荐这款设计。

暂时就想到这些了。
湿滑落式骑!
回复 支持 反对

使用道具 举报

Lv2.观梦者

梦石
0
星屑
728
在线时间
687 小时
注册时间
2011-2-13
帖子
638
6
发表于 2012-11-26 17:54:29 | 只看该作者
东西一多 岂不是...

点评

下个版本会注意的,谢谢关注  发表于 2012-11-26 19:25
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
323 小时
注册时间
2010-8-21
帖子
666
7
 楼主| 发表于 2012-11-26 19:32:42 | 只看该作者
本帖最后由 沙漠点灰 于 2012-11-26 19:35 编辑
羞射了 发表于 2012-11-26 12:59
菜单退出的时候速度太慢了,特别是打开层数过多的时候。这里我指的不是运行速度,而是设计上的问题。

举个 ...


先感谢5l的反馈。先做出解释:

菜单退出的时候速度太慢了

这个是自己的固执吧,因为移动是"缓动",即加速度为负数的匀变速运动,移动时间少了看不出来..
这个可以修改(在更新版中会给出设置值):
def exit!

    @_exit = true

    @size.times{|i|

    move_to(i,160,30,1.5)

    add_pause(i, [50, @size*10].min-[i*10,50].min)

    }

  end

中, move_to(i,160,30,1.5)的30可以修改为更低值,
add_pause(i, [50, @size*10].min-[i*10,50].min)
也要做出相应修改,这个是控制每项移动的间隔时间,这个我会在更新版做出更好的解决方式。


举个例子说,LZ做的这个有点类似win7之前的win菜单设计,而win7已经放弃这种设计了,就算是早期的win,他也可以用鼠标想退到第几层就退到第几层,而LZ这个只能一层一层退,比较死板。


这句话,5l可能没组织好语言,5l的意思可能是建议加入鼠标支持吧,毕竟Win的选项用键盘也只能一层一层地退。
说到鼠标支持,5l可能没用过之前版本的子选项吧..


之前也是先出个键盘版作预览,之后才加入鼠标支持。之前没人用的子选项我也会更新,这次就更别说了,而且
这次的难度比上次的简单太多了....






显示的信息量更少了

当初有个
SubTitleMAX    = 5

以供显示每层显示的选项,但是在
  def update_bitmap

    @_self.bitmap.clear

    @_bitmap.height.times{|a|

    if a < 64

      @_self.bitmap.blt(0,a,@_bitmap,Rect.new(0,a,@_bitmap.width,1),a*4)

    elsif a >= 96

      @_self.bitmap.blt(0,a,@_bitmap,Rect.new(0,a,@_bitmap.width,1),(159-a)*4)

    elsif a == 64

      @_self.bitmap.blt(0,a,@_bitmap,Rect.new(0,a,@_bitmap.width,32))

    end

    }

  end

手贱一下,变成这样了...不透明度步进值为4,只能显示256/4=64/32=2*2+1=5项了
可以修改一下,比如步进值为1,就能显示256/1=256/32=8/2+1=17项了,当然
这绝不是效率的问题,仅仅是"手贱"了.....不过17项...又太多了,会在更新版做出合理解释。

最后,再次感谢5l提出的建议

点评

好的,LZ加油!  发表于 2012-11-26 21:28
>>猛戳>>MetalSagaR游戏主页<<这里<<
欢迎提供您的意见
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
47
在线时间
253 小时
注册时间
2012-8-2
帖子
248
8
发表于 2012-11-26 19:54:40 | 只看该作者
楼主的声音

点评

还能这样干  发表于 2012-11-26 20:48
谷歌娘的声音......  发表于 2012-11-26 20:44
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
2127
在线时间
437 小时
注册时间
2010-11-22
帖子
413
9
发表于 2013-8-23 00:02:13 | 只看该作者
非常棒的菜单。

点评

额,太久没关注这区,没注意发布时间········  发表于 2013-8-23 10:40
挖坟了..?  发表于 2013-8-23 03:51
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
50
在线时间
11 小时
注册时间
2013-10-5
帖子
24
10
发表于 2013-12-1 11:22:53 | 只看该作者
背景是什么歌曲?很好听唉
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-13 16:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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