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

Project1

 找回密码
 注册会员
搜索
楼主: kylixs
打印 上一主题 下一主题

重写RMXP的UI库如何?

 关闭 [复制链接]
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-10-5
帖子
75
跳转到指定楼层
1
发表于 2007-3-28 10:30:06 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

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

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

x
某轮乱用职权后的留言:
建议诸位看看第2页LZ的回帖,恩,思路比成品重要!

[LINE]1,#dddddd[/LINE]
前几天想做一个仿《大话西游IIoline》商店,区别于RM传统商店的是:呼出商店时不是场景切换,而是弹出一个对话框!

详细点击 大话商店
这一过程发现RMXP的UI库极不成熟,只能说还没成型,修改和扩展都十分麻烦,而且不通用!!
我在论坛上看到不少修改的例子,基本上很多是作者自己修改了大半个系统,这些脚本的复用很成问题。


这个商店我写了几个UI组件:窗口,按钮,标签
有一个比较简单的更新、描绘和事件处理机制,还不是很成熟
不知道有没有人对UI库感兴趣的,有人一起干的话,重写一个简单UI库也不会很长时间,1周左右应该拿得出最初版本了。
联系我:QQ 307358033 [email protected]

Benavii 叫我PM美兽殿{/gg}是谁?我才上6R没几天{/fd}{/bz}

懒得打字,随便帖一个脚本(这个脚本是不能单独运行的{/gg}还没整理好...就不放上来了)...


  1. #----------------------------------------------------------------------------
  2. # ■ 弹出式商店--PopupShop
  3. #    @author: kylixs
  4. #    @date  : 2007-3
  5. #    @e-mail: [email protected]
  6. #    @qq    : 307358033
  7. #    @website: [url]http://bbs.javarpg.cn[/url]
  8. #-----------------------------------------------------------------------------
  9. class PopupShop < AyinWindow
  10.   
  11.   def initialize(shop_goods)
  12.     super("购买",210,5)
  13.     add_ignore_rect(Rect.new(19,44,306,204))
  14.     # 购买按钮
  15.     @btn_buy=Button.new(["购买按钮1","购买按钮2","购买按钮3"])
  16.     @btn_buy.action = Proc.new{
  17.       buy_action()
  18.       # 关闭商店
  19.       # close()
  20.     }
  21.     add(@btn_buy,150,390)
  22.     # 单价
  23.     @lbl_price = Label.new("",140,16)
  24.     @lbl_price.font.bold = true
  25.     add(@lbl_price,142,271)
  26.     # 数量
  27.     @lbl_num = Label.new("",140,16)
  28.     @lbl_num.font.bold = true
  29.     add(@lbl_num,142,299)
  30.     # 总价
  31.     @lbl_cost = Label.new("",140,16)
  32.     @lbl_cost.font.bold = true
  33.     add(@lbl_cost,142,326)
  34.     # 现金
  35.     @lbl_cash = Label.new("",140,16)
  36.     @lbl_cash.font.bold = true
  37.     add(@lbl_cash,142,354)
  38.     # 实例变量
  39.     @shop_goods = shop_goods
  40.     # 物品提示窗口
  41.     @tooltip = Tooltip.new
  42.     @number = 0
  43.     @index = -1
  44.     @item = nil
  45.     @data = []
  46.     @cell_bg = $game_temp.cell_selected_background
  47.     $game_temp.message_window_showing = true
  48.     $game_system.map_interpreter.message_waiting = true
  49.    
  50.     init_shop
  51.     update
  52.   end

  53.   #--------------------------------------------------------------------------
  54.   # ● 释放
  55.   #--------------------------------------------------------------------------
  56.   def dispose
  57.     $game_temp.message_window_showing = false
  58.     $game_system.map_interpreter.message_waiting = false
  59.     @tooltip.dispose
  60.     super
  61.   end
  62.    
  63.   #--------------------------------------------------------------------------
  64.   # ● 更新画面/事件等
  65.   #--------------------------------------------------------------------------
  66.   def update
  67.     super
  68.     if self.closed?
  69.       return
  70.     end
  71.     @tooltip.update

  72.     #更新相关标签
  73.     update_labels()
  74.     # 选择商品
  75.     index = select_goods
  76.     item = nil
  77.     if index > -1
  78.       item = @data[index]
  79.     end
  80.    
  81.     x,y = Mouse.get_mouse_pos
  82.     @tooltip.set_item(item)
  83.     @tooltip.x = x  
  84.     @tooltip.y = y + 32
  85.    
  86.     if Mouse.trigger?(Mouse::LEFT)
  87.       if item != nil
  88.         # 选中一个项目
  89.         if(@item == item )
  90.           @number += 1
  91.         else
  92.           @number = 1
  93.           @index = index
  94.           @item = item
  95.         end
  96.       end
  97.       Mouse.update
  98.     elsif Mouse.trigger?(Mouse::RIGHT)
  99.       # 减少商品数量
  100.       if index == @index && @number > 0
  101.           @number -= 1
  102.       end
  103.       Mouse.update
  104.     elsif Input.trigger?(Input::C)
  105.       @btn_buy.click()
  106.       Input.update
  107.     end
  108.     return
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 更新商店相关的数据
  112.   #--------------------------------------------------------------------------
  113.   def update_labels
  114.     if(@item != nil)
  115.       @lbl_price.set_text(@item.price.to_s)
  116.       @lbl_num.set_text(@number.to_s)
  117.       cost = @number * @item.price
  118.       @lbl_cost.font.color = (cost > $game_party.gold ? short_gold_color : normal_color)
  119.       @lbl_cost.set_text(cost.to_s)
  120.     else
  121.       @lbl_price.set_text("")
  122.       @lbl_num.set_text("")
  123.       @lbl_cost.set_text("")
  124.     end
  125.   end
  126.   
  127.   #--------------------------------------------------------------------------
  128.   # ● 选择商品
  129.   #--------------------------------------------------------------------------
  130.   def select_goods
  131.     x,y = get_mouse_pos
  132.     x -= 19 #top
  133.     y -= 44 #left
  134.     if( x < 0 || x > 306 || y < 0 || y > 204)
  135.       return -1
  136.     end
  137.     col = x/51
  138.     row = y/51
  139.     index = row * 6 + col
  140.     # 所在单元格是否有商品
  141.     if index >= @data.size
  142.       return -1
  143.     end
  144.     return index
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 减少商品数量
  148.   #--------------------------------------------------------------------------
  149.   def reduce_num
  150.    
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 购买处理
  154.   #--------------------------------------------------------------------------
  155.   def buy_action
  156.       #未选中物品或者数量为0
  157.       if @item == nil || @number == 0
  158.         # 演奏冻结 SE
  159.         $game_system.se_play($data_system.buzzer_se)
  160.         return
  161.       end
  162.       # 金钱不足时
  163.       cost = @number * @item.price
  164.       if( cost > $game_party.gold)
  165.         # 演奏冻结 SE
  166.         $game_system.se_play($data_system.buzzer_se)
  167.         return
  168.       end
  169.       $game_party.lose_gold(cost)
  170.       case @item
  171.       when RPG::Item
  172.         $game_party.gain_item(@item.id, @number)
  173.       when RPG::Weapon
  174.         $game_party.gain_weapon(@item.id, @number)
  175.       when RPG::Armor
  176.         $game_party.gain_armor(@item.id, @number)
  177.       end
  178.       # 刷新各窗口
  179.       init_shop
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 初始化商店
  183.   #--------------------------------------------------------------------------
  184.   def init_shop
  185.     @data = []
  186.     for goods_item in @shop_goods
  187.       case goods_item[0]
  188.       when 0
  189.         item = $data_items[goods_item[1]]
  190.       when 1
  191.         item = $data_weapons[goods_item[1]]
  192.       when 2
  193.         item = $data_armors[goods_item[1]]
  194.       end
  195.       if item != nil
  196.         @data.push(item)
  197.       end
  198.     end
  199.     @lbl_cash.font.color = get_gold_color($game_party.gold)
  200.     @lbl_cash.set_text($game_party.gold.to_s)
  201.     @number = 0
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ● 描绘商品
  205.   #--------------------------------------------------------------------------
  206.   def paint_goods      
  207.     # 如果项目数不是 0 就生成位图、描绘全部项目
  208.     @item_max = @data.size
  209.     if @item_max > 0
  210.       # 选中单元格背景
  211.       if( @index >=0 && @index <@item_max)
  212.         x,y = get_item_pos(@index)
  213.         self.contents.blt(x-1,y-1,@cell_bg,@cell_bg.rect)
  214.       end
  215.       for i in 0...@item_max
  216.         draw_item(i)
  217.       end
  218.     end
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● 描绘项目
  222.   #     index :项目编号
  223.   #--------------------------------------------------------------------------
  224.   def draw_item(index)
  225.     item = @data[index]
  226.     # 获取物品所持数
  227.     case item
  228.     when RPG::Item
  229.       number = $game_party.item_number(item.id)
  230.     when RPG::Weapon
  231.       number = $game_party.weapon_number(item.id)
  232.     when RPG::Armor
  233.       number = $game_party.armor_number(item.id)
  234.     end
  235.     # 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
  236.     # 除此之外的情况设置为无效文字色
  237.     if item.price <= $game_party.gold and number < 99
  238.       self.contents.font.color = normal_color
  239.      else
  240.       self.contents.font.color = disabled_color
  241.     end
  242.       
  243.     x,y = get_item_pos(index)
  244.     bitmap = RPG::Cache.icon(item.icon_name)
  245.     opacity = self.contents.font.color == normal_color ? 255 : 128
  246.     x += (50 - bitmap.width)/2
  247.     y += (50 - bitmap.height)/2
  248.     self.contents.blt(x, y , bitmap, bitmap.rect, opacity)
  249.   end
  250.   
  251.   def paint()
  252.     super
  253.     paint_goods
  254.   end
  255.   
  256.   def get_item_pos(index)
  257.     col = index % 6
  258.     row = index / 6
  259.     x = 19 + col * 51
  260.     y = 44 + row * 51
  261.     return x,y
  262.   end
  263. end
复制代码


PS: 第一次在6R发帖....
签名被屏蔽
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-10-5
帖子
75
2
 楼主| 发表于 2007-3-28 10:30:06 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

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

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

x
某轮乱用职权后的留言:
建议诸位看看第2页LZ的回帖,恩,思路比成品重要!

[LINE]1,#dddddd[/LINE]
前几天想做一个仿《大话西游IIoline》商店,区别于RM传统商店的是:呼出商店时不是场景切换,而是弹出一个对话框!

详细点击 大话商店
这一过程发现RMXP的UI库极不成熟,只能说还没成型,修改和扩展都十分麻烦,而且不通用!!
我在论坛上看到不少修改的例子,基本上很多是作者自己修改了大半个系统,这些脚本的复用很成问题。


这个商店我写了几个UI组件:窗口,按钮,标签
有一个比较简单的更新、描绘和事件处理机制,还不是很成熟
不知道有没有人对UI库感兴趣的,有人一起干的话,重写一个简单UI库也不会很长时间,1周左右应该拿得出最初版本了。
联系我:QQ 307358033 [email protected]

Benavii 叫我PM美兽殿{/gg}是谁?我才上6R没几天{/fd}{/bz}

懒得打字,随便帖一个脚本(这个脚本是不能单独运行的{/gg}还没整理好...就不放上来了)...


  1. #----------------------------------------------------------------------------
  2. # ■ 弹出式商店--PopupShop
  3. #    @author: kylixs
  4. #    @date  : 2007-3
  5. #    @e-mail: [email protected]
  6. #    @qq    : 307358033
  7. #    @website: [url]http://bbs.javarpg.cn[/url]
  8. #-----------------------------------------------------------------------------
  9. class PopupShop < AyinWindow
  10.   
  11.   def initialize(shop_goods)
  12.     super("购买",210,5)
  13.     add_ignore_rect(Rect.new(19,44,306,204))
  14.     # 购买按钮
  15.     @btn_buy=Button.new(["购买按钮1","购买按钮2","购买按钮3"])
  16.     @btn_buy.action = Proc.new{
  17.       buy_action()
  18.       # 关闭商店
  19.       # close()
  20.     }
  21.     add(@btn_buy,150,390)
  22.     # 单价
  23.     @lbl_price = Label.new("",140,16)
  24.     @lbl_price.font.bold = true
  25.     add(@lbl_price,142,271)
  26.     # 数量
  27.     @lbl_num = Label.new("",140,16)
  28.     @lbl_num.font.bold = true
  29.     add(@lbl_num,142,299)
  30.     # 总价
  31.     @lbl_cost = Label.new("",140,16)
  32.     @lbl_cost.font.bold = true
  33.     add(@lbl_cost,142,326)
  34.     # 现金
  35.     @lbl_cash = Label.new("",140,16)
  36.     @lbl_cash.font.bold = true
  37.     add(@lbl_cash,142,354)
  38.     # 实例变量
  39.     @shop_goods = shop_goods
  40.     # 物品提示窗口
  41.     @tooltip = Tooltip.new
  42.     @number = 0
  43.     @index = -1
  44.     @item = nil
  45.     @data = []
  46.     @cell_bg = $game_temp.cell_selected_background
  47.     $game_temp.message_window_showing = true
  48.     $game_system.map_interpreter.message_waiting = true
  49.    
  50.     init_shop
  51.     update
  52.   end

  53.   #--------------------------------------------------------------------------
  54.   # ● 释放
  55.   #--------------------------------------------------------------------------
  56.   def dispose
  57.     $game_temp.message_window_showing = false
  58.     $game_system.map_interpreter.message_waiting = false
  59.     @tooltip.dispose
  60.     super
  61.   end
  62.    
  63.   #--------------------------------------------------------------------------
  64.   # ● 更新画面/事件等
  65.   #--------------------------------------------------------------------------
  66.   def update
  67.     super
  68.     if self.closed?
  69.       return
  70.     end
  71.     @tooltip.update

  72.     #更新相关标签
  73.     update_labels()
  74.     # 选择商品
  75.     index = select_goods
  76.     item = nil
  77.     if index > -1
  78.       item = @data[index]
  79.     end
  80.    
  81.     x,y = Mouse.get_mouse_pos
  82.     @tooltip.set_item(item)
  83.     @tooltip.x = x  
  84.     @tooltip.y = y + 32
  85.    
  86.     if Mouse.trigger?(Mouse::LEFT)
  87.       if item != nil
  88.         # 选中一个项目
  89.         if(@item == item )
  90.           @number += 1
  91.         else
  92.           @number = 1
  93.           @index = index
  94.           @item = item
  95.         end
  96.       end
  97.       Mouse.update
  98.     elsif Mouse.trigger?(Mouse::RIGHT)
  99.       # 减少商品数量
  100.       if index == @index && @number > 0
  101.           @number -= 1
  102.       end
  103.       Mouse.update
  104.     elsif Input.trigger?(Input::C)
  105.       @btn_buy.click()
  106.       Input.update
  107.     end
  108.     return
  109.   end
  110.   #--------------------------------------------------------------------------
  111.   # ● 更新商店相关的数据
  112.   #--------------------------------------------------------------------------
  113.   def update_labels
  114.     if(@item != nil)
  115.       @lbl_price.set_text(@item.price.to_s)
  116.       @lbl_num.set_text(@number.to_s)
  117.       cost = @number * @item.price
  118.       @lbl_cost.font.color = (cost > $game_party.gold ? short_gold_color : normal_color)
  119.       @lbl_cost.set_text(cost.to_s)
  120.     else
  121.       @lbl_price.set_text("")
  122.       @lbl_num.set_text("")
  123.       @lbl_cost.set_text("")
  124.     end
  125.   end
  126.   
  127.   #--------------------------------------------------------------------------
  128.   # ● 选择商品
  129.   #--------------------------------------------------------------------------
  130.   def select_goods
  131.     x,y = get_mouse_pos
  132.     x -= 19 #top
  133.     y -= 44 #left
  134.     if( x < 0 || x > 306 || y < 0 || y > 204)
  135.       return -1
  136.     end
  137.     col = x/51
  138.     row = y/51
  139.     index = row * 6 + col
  140.     # 所在单元格是否有商品
  141.     if index >= @data.size
  142.       return -1
  143.     end
  144.     return index
  145.   end
  146.   #--------------------------------------------------------------------------
  147.   # ● 减少商品数量
  148.   #--------------------------------------------------------------------------
  149.   def reduce_num
  150.    
  151.   end
  152.   #--------------------------------------------------------------------------
  153.   # ● 购买处理
  154.   #--------------------------------------------------------------------------
  155.   def buy_action
  156.       #未选中物品或者数量为0
  157.       if @item == nil || @number == 0
  158.         # 演奏冻结 SE
  159.         $game_system.se_play($data_system.buzzer_se)
  160.         return
  161.       end
  162.       # 金钱不足时
  163.       cost = @number * @item.price
  164.       if( cost > $game_party.gold)
  165.         # 演奏冻结 SE
  166.         $game_system.se_play($data_system.buzzer_se)
  167.         return
  168.       end
  169.       $game_party.lose_gold(cost)
  170.       case @item
  171.       when RPG::Item
  172.         $game_party.gain_item(@item.id, @number)
  173.       when RPG::Weapon
  174.         $game_party.gain_weapon(@item.id, @number)
  175.       when RPG::Armor
  176.         $game_party.gain_armor(@item.id, @number)
  177.       end
  178.       # 刷新各窗口
  179.       init_shop
  180.   end
  181.   #--------------------------------------------------------------------------
  182.   # ● 初始化商店
  183.   #--------------------------------------------------------------------------
  184.   def init_shop
  185.     @data = []
  186.     for goods_item in @shop_goods
  187.       case goods_item[0]
  188.       when 0
  189.         item = $data_items[goods_item[1]]
  190.       when 1
  191.         item = $data_weapons[goods_item[1]]
  192.       when 2
  193.         item = $data_armors[goods_item[1]]
  194.       end
  195.       if item != nil
  196.         @data.push(item)
  197.       end
  198.     end
  199.     @lbl_cash.font.color = get_gold_color($game_party.gold)
  200.     @lbl_cash.set_text($game_party.gold.to_s)
  201.     @number = 0
  202.   end
  203.   #--------------------------------------------------------------------------
  204.   # ● 描绘商品
  205.   #--------------------------------------------------------------------------
  206.   def paint_goods      
  207.     # 如果项目数不是 0 就生成位图、描绘全部项目
  208.     @item_max = @data.size
  209.     if @item_max > 0
  210.       # 选中单元格背景
  211.       if( @index >=0 && @index <@item_max)
  212.         x,y = get_item_pos(@index)
  213.         self.contents.blt(x-1,y-1,@cell_bg,@cell_bg.rect)
  214.       end
  215.       for i in 0...@item_max
  216.         draw_item(i)
  217.       end
  218.     end
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● 描绘项目
  222.   #     index :项目编号
  223.   #--------------------------------------------------------------------------
  224.   def draw_item(index)
  225.     item = @data[index]
  226.     # 获取物品所持数
  227.     case item
  228.     when RPG::Item
  229.       number = $game_party.item_number(item.id)
  230.     when RPG::Weapon
  231.       number = $game_party.weapon_number(item.id)
  232.     when RPG::Armor
  233.       number = $game_party.armor_number(item.id)
  234.     end
  235.     # 价格在所持金以下、并且所持数不是 99 的情况下为普通文字颜色
  236.     # 除此之外的情况设置为无效文字色
  237.     if item.price <= $game_party.gold and number < 99
  238.       self.contents.font.color = normal_color
  239.      else
  240.       self.contents.font.color = disabled_color
  241.     end
  242.       
  243.     x,y = get_item_pos(index)
  244.     bitmap = RPG::Cache.icon(item.icon_name)
  245.     opacity = self.contents.font.color == normal_color ? 255 : 128
  246.     x += (50 - bitmap.width)/2
  247.     y += (50 - bitmap.height)/2
  248.     self.contents.blt(x, y , bitmap, bitmap.rect, opacity)
  249.   end
  250.   
  251.   def paint()
  252.     super
  253.     paint_goods
  254.   end
  255.   
  256.   def get_item_pos(index)
  257.     col = index % 6
  258.     row = index / 6
  259.     x = 19 + col * 51
  260.     y = 44 + row * 51
  261.     return x,y
  262.   end
  263. end
复制代码


PS: 第一次在6R发帖....
签名被屏蔽
头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-10-5
帖子
75
3
 楼主| 发表于 2007-3-28 10:37:19 | 显示全部楼层

自己顶一下。。。

gpra8764:
以后不要这样……建议,建议……
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-10-5
帖子
75
4
 楼主| 发表于 2007-3-29 02:37:01 | 显示全部楼层
以下引用美兽于2007-3-28 7:43:26的发言:

是JAVA的风格,对于这种时间杀手式的工作,实在力有所不及。

{/gg}这种不是Java的风格,跟java毫无关系,只是UI类库我参考了java的类库设计。。。
{/wx}这个商店是仿《大话西游IIonline》的,弹出的概念--如打开一个QQ窗口,只是弹出一个对话框在顶部,其它下面的东西正常显示,而RM默认是$sence切换的。。

{/fd}可能是你们习惯于RM的默认风格了,如果有用过其它语言来设计用户界面的会明白
  ——什么是组件及组件化带来的便利
简单地说,组件可以像积木一样搭起一个窗口,而每个组件内部是自己维护描绘和事件的,这样统一又便于重复使用,如按钮和标签,放到哪个窗口中都可以,只需要设置一些参数

而默认RMXP的UI并不是这样,UI类不是很通用,通常是定制的,普通常用的控件也找不到,而是用一种较为简单的方式,如Window_Selectable,这个东西可以作为列表、选项、表格的父类

一句话,RMXP默认UI类,用来设计自定义的,比较复杂的窗口时就非常不好用!
{/kuk}举个简单的例子,就拿商店
如果用Window_ShopCommand,有3个按钮,“购买”,“买卖”,“取消”,每次更新,我们都判断这3个按钮哪个被按下了,然后转向相应的事件处理函数,3个按钮时没什么关系,如果有5个,10个,那是不是要写case when 0...when 10 ?
如果用Button组件,可以为每个Button指定按下时的事件
@btn1.action = Proc.new{buy_action}
@btn2.action = Proc.new{sell_action}
@btn3.action = Proc.new{close}
......
而且每个按钮支持用图片背景(3张图片,分别为普通、鼠标移上,按下),或者其它修改,都容易多了,因为泾渭分明,修改这个组件的时候只要做到标准化就大大提高重用率!

谢谢,口水洒了一地{/gg}{/cy}
PS:第一次发帖,好多人鼓励我{/hx}我会努力的
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-10-5
帖子
75
5
 楼主| 发表于 2007-3-30 01:08:23 | 显示全部楼层
看了一下,好像不是很难{/bz}..你能把每个要求变成设计图纸给我吗?
QQ 307358033
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-10-5
帖子
75
6
 楼主| 发表于 2007-3-30 01:32:32 | 显示全部楼层
以下引用亿万星辰于2007-3-28 18:55:42的发言:

原来 Proc 是做这个用的

好难理解.......这貌似就是差距...


[本贴由作者于 2007-3-28 18:57:58 最后编辑]
以下引用神思于2007-3-29 17:09:06的发言:

呵呵``大概知道Proc有什么用了`````感谢`

其实我做这个商店的时候才开始学ruby,Proc这个是看看来的代码学到的,原来有几个地方用到了,如Interpreter1中231-246行
  1.   
  2.   #--------------------------------------------------------------------------
  3.   # ● 设置选择项
  4.   #--------------------------------------------------------------------------
  5.   def setup_choices(parameters)
  6.     # choice_max 为设置选择项的项目数
  7.     $game_temp.choice_max = parameters[0].size
  8.     # message_text 为设置选择项
  9.     for text in parameters[0]
  10.       $game_temp.message_text += text + "\n"
  11.     end
  12.     # 设置取消的情况的处理
  13.     $game_temp.choice_cancel_type = parameters[1]
  14.     # 返回调用设置
  15.     current_indent = @list[@index].indent
  16.     $game_temp.choice_proc = Proc.new { |n| @branch[current_indent] = n }
  17.   end
复制代码


现在对ruby只算是知其皮毛,这个语言太灵活了...扩展也容易

我要做的UI库,打算重写Input类,支持全部键盘/鼠标,支持keyDown/keyUp,mouseDown/mouseUp/mouseMove这些常见事件 -- 满足简单的PC版游戏要求
签名被屏蔽
回复 支持 反对

使用道具 举报

头像被屏蔽

Lv1.梦旅人 (禁止发言)

梦石
0
星屑
50
在线时间
0 小时
注册时间
2006-10-5
帖子
75
7
 楼主| 发表于 2007-3-30 02:17:59 | 显示全部楼层
以下引用神思于2007-3-29 17:50:52的发言:

只是那个速度啊````你什么脚本都不用``快速摇晃鼠标个FPS都掉的厉害```
有个靠优化Graphics.update的鼠标脚本````期待你会怎么改````

说具体点好吗..?
还不知道速度这个也是问题哦..我测试一下..
目前知道的问题是:无法设置鼠标指针位置--以前的脚本鼠标移到选项时,按键盘上/下方向键,都不会跳过其它选项 --- 因为没有mosuemove
签名被屏蔽
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-18 08:35

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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