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

Project1

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

请教一个关于制作新菜单的问题~

 关闭 [复制链接]

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2005-11-5
帖子
98
跳转到指定楼层
1
发表于 2008-7-25 06:53:49 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
想设计这么个菜单:
可以把物品栏里的任何一个东西给予某NPC。
效果是1、选择给予物品后出现一个物品菜单(和主菜单里的物品菜单一样)
      2、选中某个物品后直接返回地图,出现该NPC的不同反应。
      3、给予时可以增加给予量。

目前要解决的问题:
1、不知道如何在Scene_Item.new的基础上改出【样式和Scene_Item.new一样,但是确定某物品时不会出现目标窗口的菜单】
2、如何实现NPC在我点选了相应的物品后作出相应的反应?比如我点选了治疗水给他,返回地图时他会说“啊谢谢。”

谢谢各位。
I like,I choose,Anta sport shoes.

Lv1.梦旅人

冰王子

梦石
0
星屑
50
在线时间
34 小时
注册时间
2008-1-27
帖子
1875
2
发表于 2008-7-25 09:37:38 | 只看该作者
用物品调用公共事件

另外$scene = Scene_Item.new召唤物品窗口
不常在线,有事PM
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2005-11-5
帖子
98
3
 楼主| 发表于 2008-7-25 17:03:45 | 只看该作者
厄,可能LS没看清楚我的说明。
我的意思是同样的物品,比如治疗水,在$scene = Scene_Item.new中使用的效果是恢复队伍中某人的HP,但是在给予菜单中(先记为Scene_Item111.new)中呢,使用后则返回地图,然后显示作用NPC的反应,不知道这么说明白不。

两个菜单相同点是样式完全相同,你身上有什么物品那么给予菜单中同样如此。
不同的就是点选某物品后出现的情况不一样的。

LS说的调用公共事件,那么无论对于Scene_Item还是Scene_Item111出现的都是相同的情况——都是调用某公共事件。
I like,I choose,Anta sport shoes.
回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39978
在线时间
5813 小时
注册时间
2006-11-10
帖子
6683
4
发表于 2008-7-25 19:52:29 | 只看该作者
你可以先设置一个开关,调用Scene_Item111的时候打开

然后在每个可以给NPC的物品都调用公共事件,然后分歧,当XX开关打开的时候。写上你想要的反映,开关关着的时候,就是正常的使用,也就是调用Scene_Item开关关上。

当然,判断NPC是不是在附近以及是不是你想要找的NPC等也可以写在公共事件内。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2005-11-5
帖子
98
5
 楼主| 发表于 2008-7-25 21:12:16 | 只看该作者
我试过这种方法,但存在一个问题,就是无论此开关是否打开,既公共事件是否调用,该物品都会被【使用】!

举个例子,正常使用恢复药,选中它后会出现目标窗口,既给谁喝。
带上公共事件后,选种它后仍然是先出现目标窗口→判断给谁喝→物品消耗→然后才是触发公共事件。
也就是说,用开关的方法是没办法避开“出现目标窗口→判断给谁喝→物品消耗”这一段。
而想实现的效果是选中该物品后直接返回地图调用公共事件,这点也是Scene_Item111和Scene_Item不同的地方。而过后物品是否消耗则在事件中作出判定。
I like,I choose,Anta sport shoes.
回复 支持 反对

使用道具 举报

Lv1.梦旅人

仙剑奇侠

梦石
0
星屑
50
在线时间
33 小时
注册时间
2008-4-2
帖子
622
6
发表于 2008-7-25 21:23:31 | 只看该作者
複雜,偶不會,不過也頂上去,讓多點人來幫助LZ。{/tp}

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
0
星屑
39978
在线时间
5813 小时
注册时间
2006-11-10
帖子
6683
7
发表于 2008-7-25 22:32:51 | 只看该作者
  1. $送礼开关 = 1
  2. class Scene_Item2
  3.   #--------------------------------------------------------------------------
  4.   # ● 主处理
  5.   #--------------------------------------------------------------------------
  6.   def main
  7.     # 生成帮助窗口、物品窗口
  8.     @help_window = Window_Help.new
  9.     @item_window = Window_Item.new
  10.     # 关联帮助窗口
  11.     @item_window.help_window = @help_window
  12.     # 执行过度
  13.     Graphics.transition
  14.     # 主循环
  15.     loop do
  16.       # 刷新游戏画面
  17.       Graphics.update
  18.       # 刷新输入信息
  19.       Input.update
  20.       # 刷新画面
  21.       update
  22.       # 如果画面切换就中断循环
  23.       if $scene != self
  24.         break
  25.       end
  26.     end
  27.     # 装备过渡
  28.     Graphics.freeze
  29.     # 释放窗口
  30.     @help_window.dispose
  31.     @item_window.dispose
  32.   end
  33.   #--------------------------------------------------------------------------
  34.   # ● 刷新画面
  35.   #--------------------------------------------------------------------------
  36.   def update
  37.     # 刷新窗口
  38.     @help_window.update
  39.     @item_window.update
  40.     # 物品窗口被激活的情况下: 调用 update_item
  41.     if @item_window.active
  42.       update_item
  43.       return
  44.     end
  45.   end
  46.   #--------------------------------------------------------------------------
  47.   # ● 刷新画面 (物品窗口被激活的情况下)
  48.   #--------------------------------------------------------------------------
  49.   def update_item
  50.     # 按下 B 键的情况下
  51.     if Input.trigger?(Input::B)
  52.       # 演奏取消 SE
  53.       $game_system.se_play($data_system.cancel_se)
  54.       # 切换到菜单画面
  55.       $scene = Scene_Menu.new(0)
  56.       return
  57.     end
  58.     # 按下 C 键的情况下
  59.     if Input.trigger?(Input::C)
  60.       # 获取物品窗口当前选中的物品数据
  61.       @item = @item_window.item
  62.       # 不使用物品的情况下
  63.       unless @item.is_a?(RPG::Item)
  64.         # 演奏冻结 SE
  65.         $game_system.se_play($data_system.buzzer_se)
  66.         return
  67.       end
  68.       # 不能使用的情况下
  69.       unless $game_party.item_can_use?(@item.id)
  70.         # 演奏冻结 SE
  71.         $game_system.se_play($data_system.buzzer_se)
  72.         return
  73.       end
  74.       # 演奏确定 SE
  75.       $game_system.se_play($data_system.decision_se)
  76.       # 效果范围是我方的情况下
  77.         # 公共事件 ID 有效的情况下
  78.         if @item.common_event_id > 0
  79.           $game_switches[$送礼开关] = true
  80.           # 预约调用公共事件
  81.           $game_temp.common_event_id = @item.common_event_id
  82.           # 演奏物品使用时的 SE
  83.           $game_system.se_play(@item.menu_se)
  84.           # 消耗品的情况下
  85.           if @item.consumable
  86.             # 使用的物品数减 1
  87.             $game_party.lose_item(@item.id, 1)
  88.             # 再描绘物品窗口的项目
  89.             @item_window.draw_item(@item_window.index)
  90.           end
  91.           # 切换到地图画面
  92.           $scene = Scene_Map.new
  93.           return
  94.         end
  95.       return
  96.     end
  97.   end
  98.   #--------------------------------------------------------------------------
  99.   # ● 刷新画面 (目标窗口被激活的情况下)
  100.   #--------------------------------------------------------------------------
  101.   def update_target
  102.     # 按下 B 键的情况下
  103.     if Input.trigger?(Input::B)
  104.       # 演奏取消 SE
  105.       $game_system.se_play($data_system.cancel_se)
  106.       # 由于物品用完而不能使用的场合
  107.       unless $game_party.item_can_use?(@item.id)
  108.         # 再次生成物品窗口的内容
  109.         @item_window.refresh
  110.       end
  111.       # 删除目标窗口
  112.       @item_window.active = true
  113.       @target_window.visible = false
  114.       @target_window.active = false
  115.       return
  116.     end
  117.     # 按下 C 键的情况下
  118.     if Input.trigger?(Input::C)
  119.       # 如果物品用完的情况下
  120.       if $game_party.item_number(@item.id) == 0
  121.         # 演奏冻结 SE
  122.         $game_system.se_play($data_system.buzzer_se)
  123.         return
  124.       end
  125.       # 使用物品的情况下
  126.       if used
  127.         # 演奏物品使用时的 SE
  128.         $game_system.se_play(@item.menu_se)
  129.         # 消耗品的情况下
  130.         if @item.consumable
  131.           # 使用的物品数减 1
  132.           $game_party.lose_item(@item.id, 1)
  133.           # 再描绘物品窗口的项目
  134.           @item_window.draw_item(@item_window.index)
  135.         end
  136.         # 再生成目标窗口的内容
  137.         @target_window.refresh
  138.         # 全灭的情况下
  139.         if $game_party.all_dead?
  140.           # 切换到游戏结束画面
  141.           $scene = Scene_Gameover.new
  142.           return
  143.         end
  144.         # 公共事件 ID 有效的情况下
  145.         if @item.common_event_id > 0
  146.           # 预约调用公共事件
  147.           $game_temp.common_event_id = @item.common_event_id
  148.           # 切换到地图画面
  149.           $scene = Scene_Map.new
  150.           return
  151.         end
  152.       end
  153.       # 无法使用物品的情况下
  154.       unless used
  155.         # 演奏冻结 SE
  156.         $game_system.se_play($data_system.buzzer_se)
  157.       end
  158.       return
  159.     end
  160.   end
  161. end
  162. class Scene_Menu
  163. def update_command
  164.     # 按下 B 键的情况下
  165.     if Input.trigger?(Input::B)
  166.       # 演奏取消 SE
  167.       $game_system.se_play($data_system.cancel_se)
  168.       # 切换的地图画面
  169.       $scene = Scene_Map.new
  170.       return
  171.     end
  172.     # 按下 C 键的情况下
  173.     if Input.trigger?(Input::C)
  174.       # 同伴人数为 0、存档、游戏结束以外的场合
  175.       if $game_party.actors.size == 0 and @command_window.index < 4
  176.         # 演奏冻结 SE
  177.         $game_system.se_play($data_system.buzzer_se)
  178.         return
  179.       end
  180.       # 命令窗口的光标位置分支
  181.       case @command_window.index
  182.       when 0  # 物品
  183.         # 演奏确定 SE
  184.         $game_system.se_play($data_system.decision_se)
  185.         # 切换到物品画面
  186.         $scene = Scene_Item.new
  187.         $game_switches[$送礼开关] = false
  188.       when 1  # 特技
  189.         # 演奏确定 SE
  190.         $game_system.se_play($data_system.decision_se)
  191.         # 激活状态窗口
  192.         @command_window.active = false
  193.         @status_window.active = true
  194.         @status_window.index = 0
  195.       when 2  # 装备
  196.         # 演奏确定 SE
  197.         $game_system.se_play($data_system.decision_se)
  198.         # 激活状态窗口
  199.         @command_window.active = false
  200.         @status_window.active = true
  201.         @status_window.index = 0
  202.       when 3  # 状态
  203.         # 演奏确定 SE
  204.         $game_system.se_play($data_system.decision_se)
  205.         # 激活状态窗口
  206.         @command_window.active = false
  207.         @status_window.active = true
  208.         @status_window.index = 0
  209.       when 4  # 存档
  210.         # 禁止存档的情况下
  211.         if $game_system.save_disabled
  212.           # 演奏冻结 SE
  213.           $game_system.se_play($data_system.buzzer_se)
  214.           return
  215.         end
  216.         # 演奏确定 SE
  217.         $game_system.se_play($data_system.decision_se)
  218.         # 切换到存档画面
  219.         $scene = Scene_Save.new
  220.       when 5  # 游戏结束
  221.         # 演奏确定 SE
  222.         $game_system.se_play($data_system.decision_se)
  223.         # 切换到游戏结束画面
  224.         $scene = Scene_End.new
  225.       end
  226.       return
  227.     end
  228.   end
复制代码


送礼的脚本- -,要调用的时候就用$scene = Scene_Item2.new 然后 根据我上面说的,用开关判断是不是对NPC使用,默认开关是1号。要换别的开关就在脚本最上面的 送礼开关那把开关编号写上就行了。

使用的时候要注意,这个版本为未测试版-v- 使用前请备份工程。
回复 支持 反对

使用道具 举报

Lv1.梦旅人

梦石
0
星屑
55
在线时间
0 小时
注册时间
2005-11-5
帖子
98
8
 楼主| 发表于 2008-7-25 23:14:13 | 只看该作者
行了,终于可以避开目标选单了!!谢谢你了,谢谢大家了。

如、如果可以的话,这个话题可以继续延伸下去么???

比如……如果我要给NPC一个武器或者护甲怎么办?系统规定装备是不能“使用”的啊……

I like,I choose,Anta sport shoes.
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2025-8-9 11:49

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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