Project1

标题: 额, 群找一菜单脚本 [打印本页]

作者: yehaojiettt    时间: 2010-6-19 10:37
标题: 额, 群找一菜单脚本
貌似以前有一环形菜单脚本,可惜现在找不到……有人知道的吗……?谢了
作者: 恐惧剑刃    时间: 2010-6-20 19:47
谁还用那个,我给你个不用谢==
作者: 恐惧剑刃    时间: 2010-6-20 19:59


有两个这是其中1个(我好像插入了截图,没有我也没办法)

下载地址:

http://www.mofile.com/pickup/lm8hphd4id05bsf/

(我速度可能是慢了点)
作者: 恐惧剑刃    时间: 2010-6-20 20:02
环形菜单:
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================


  4. # ————————————————————————————————————

  5. # ▼▲▼ XRXS_MP 6. 环形菜单 ▼▲▼
  6. # by 和希

  7. ###############################################################################
  8. # 环形菜单脚本(中文注释版)
  9. # writen by 和希
  10. # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  11. # ▽导入
  12. # 1.在脚本编辑器的Main的前一个位置进行插入操作,然后将本脚本复制到新的页里
  13. # 2.Window_RingMenu最开始的7个RPG::Cache.icon("") 的 "" 的中的图标作用在右边
  14. #   的说明里标注了分别是什么项目的,可以根据需要进行修改
  15. #   (最下方禁止使用项目的图标建议使用类似“φ”的图标)
  16. #   (译者按:就是原图标上多一个横杠或是斜杠的图片)
  17. # 3.类常量定义最下方的 SE_STARTUP = "" 的 "" 的中是打开菜单时的音效的名字
  18. #
  19. ###############################################################################


  20. #==============================================================================
  21. # ■ Window_RingMenu
  22. #------------------------------------------------------------------------------
  23. #  显示环形菜单画面
  24. #==============================================================================
  25. class Window_RingMenu < Window_Base

  26. #--------------------------------------------------------------------------
  27. # ○ 类常量定义
  28. # 这里定义的变量是整个Window_RingMenu类都可以用的常量
  29. # 所有变量名都是用大写,以区别其他变量
  30. #--------------------------------------------------------------------------

  31. # 打开菜单使用的帧数,数字越小打开菜单时速度越快
  32. STARTUP_FRAMES = 20
  33. # 切换选项时使用的帧数,数字越小切换选项速度越快
  34. MOVING_FRAMES = 5
  35. # 环的半径(单位:象素),数字越大环越大←本句为废话
  36. RING_R = 64

  37. # 定义各种图标,以便之后使用
  38. ICON_ITEM = RPG::Cache.icon("034-Item03")     # 「道具」项目的图标
  39. ICON_SKILL = RPG::Cache.icon("044-Skill01")   # 「特技」项目的图标
  40. ICON_EQUIP = RPG::Cache.icon("001-Weapon01")   # 「装备」项目的图标
  41. ICON_STATUS = RPG::Cache.icon("050-Skill07")   # 「状态」项目的图标
  42. ICON_SAVE = RPG::Cache.icon("038-Item07")     # 「存储」项目的图标
  43. ICON_EXIT = RPG::Cache.icon("046-Skill03")     # 「结束」项目的图标
  44. ICON_DISABLE= RPG::Cache.icon("")           # 禁止使用项目的图标

  45. # 打开菜单时的音效
  46. SE_STARTUP = "056-Right02"

  47. # 定义各种状态时的赋值。
  48. # 译注:对于程序而言,个人感觉多此一举…不过的确方便了阅读
  49. MODE_START = 1 # 动画开始时
  50. MODE_WAIT = 2 # 待机中
  51. MODE_MOVER = 3 # 顺时针旋转(往右)
  52. MODE_MOVEL = 4 # 逆时针旋转(往左)

  53. #--------------------------------------------------------------------------
  54. # ○ 定义实例变量
  55. #--------------------------------------------------------------------------
  56. attr_accessor :index # ?

  57. #--------------------------------------------------------------------------
  58. # ● 初始化对象
  59. #--------------------------------------------------------------------------
  60. def initialize( center_x, center_y )
  61.   super(0, 0, 640, 480)
  62.   self.contents = Bitmap.new(width-32, height-32)
  63.   self.opacity = 0
  64.   self.back_opacity = 0

  65.   s1 = $data_system.words.item
  66.   s2 = $data_system.words.skill
  67.   s3 = $data_system.words.equip
  68.   s4 = "状态"
  69.   s5 = "储存"
  70.   s6 = "结束"
  71.   @commands = [ s1, s2, s3, s4, s5, s6 ]
  72.   @item_max = 6
  73.   @index = 0
  74.   @items = [ ICON_ITEM, ICON_SKILL, ICON_EQUIP, ICON_STATUS, ICON_SAVE, ICON_EXIT ]
  75.   @disabled = [ false, false, false, false, false, false ]
  76.   @cx = center_x - 16
  77.   @cy = center_y - 16

  78.   # 初始化动画
  79.   setup_move_start

  80.   # 刷新
  81.   refresh

  82. end

  83. #--------------------------------------------------------------------------
  84. # ● 刷新画面
  85. #--------------------------------------------------------------------------
  86. def update
  87.   super
  88.   refresh
  89. end

  90. #--------------------------------------------------------------------------
  91. # ● 画面描绘(刷新)
  92. #--------------------------------------------------------------------------
  93. def refresh
  94.   self.contents.clear
  95.   
  96.   # 选择描绘方式
  97.   case @mode
  98.   when MODE_START
  99.     refresh_start
  100.   when MODE_WAIT
  101.     refresh_wait
  102.   when MODE_MOVER
  103.     refresh_move(1)
  104.   when MODE_MOVEL
  105.     refresh_move(0)
  106.   end

  107.   # 指令名描绘
  108.   rect = Rect.new(@cx - 272, @cy + 24, self.contents.width-32, 32)
  109.   self.contents.draw_text(rect, @commands[@index],1)
  110. end

  111. #--------------------------------------------------------------------------
  112. # ○ 画面生成
  113. #--------------------------------------------------------------------------
  114. def refresh_start
  115.   d1 = 2.0 * Math::PI / @item_max
  116.   d2 = 1.0 * Math::PI / STARTUP_FRAMES
  117.   r = RING_R - 1.0 * RING_R * @steps / STARTUP_FRAMES
  118.   for i in 0...@item_max
  119.     j = i - @index
  120.     d = d1 * j + d2 * @steps
  121.     x = @cx + ( r * Math.sin( d ) ).to_i
  122.     y = @cy - ( r * Math.cos( d ) ).to_i
  123.     draw_item(x, y, i)
  124.   end
  125.   @steps -= 1
  126.   if @steps < 1
  127.     @mode = MODE_WAIT
  128.   end
  129. end

  130. #--------------------------------------------------------------------------
  131. # ○ 画面再描绘(待机时)
  132. #--------------------------------------------------------------------------
  133. def refresh_wait
  134.   d = 2.0 * Math::PI / @item_max
  135.   for i in 0...@item_max
  136.     j = i - @index
  137.     x = @cx + ( RING_R * Math.sin( d * j ) ).to_i
  138.     y = @cy - ( RING_R * Math.cos( d * j ) ).to_i
  139.     draw_item(x, y, i)
  140.   end
  141. end

  142. #--------------------------------------------------------------------------
  143. # ○ 画面再描绘(旋转时)
  144. #   mode : 旋转方向(0 : 逆时针旋转时,1 : 顺时针旋转时)
  145. #--------------------------------------------------------------------------
  146. def refresh_move( mode )
  147.   d1 = 2.0 * Math::PI / @item_max
  148.   d2 = d1 / MOVING_FRAMES
  149.   d2 *= -1 if mode != 0
  150.   for i in 0...@item_max
  151.     # 以下便是那华丽的曲线公式
  152.     j = i - @index
  153.     d = d1 * j + d2 * @steps
  154.     x = @cx + ( RING_R * Math.sin( d ) ).to_i
  155.     y = @cy - ( RING_R * Math.cos( d ) ).to_i
  156.     draw_item(x, y, i)
  157.   end
  158.   @steps -= 1
  159.   if @steps < 1
  160.     @mode = MODE_WAIT
  161.   end
  162. end

  163. #--------------------------------------------------------------------------
  164. # ● 描绘图片
  165. # i : 项目编号
  166. #--------------------------------------------------------------------------
  167. def draw_item(x, y, i)
  168.   rect = Rect.new(0, 0, @items[i].width, @items[i].height)
  169.   if @index == i
  170.     self.contents.blt( x, y, @items[i], rect )
  171.     if @disabled[@index]
  172.     self.contents.blt( x, y, ICON_DISABLE, rect )
  173.     end
  174.   else
  175.     self.contents.blt( x, y, @items[i], rect, 128 )
  176.     if @disabled[@index]
  177.     self.contents.blt( x, y, ICON_DISABLE, rect, 128 )
  178.     end
  179.   end
  180. end

  181. #--------------------------------------------------------------------------
  182. # ● 项目无效化
  183. # index : 项目编号
  184. #--------------------------------------------------------------------------
  185. def disable_item(index)
  186.   @disabled[index] = true
  187. end

  188. #--------------------------------------------------------------------------
  189. # ○ 初始化动画准备
  190. #--------------------------------------------------------------------------
  191. def setup_move_start
  192.   @mode = MODE_START
  193.   @steps = STARTUP_FRAMES
  194.   if SE_STARTUP != nil and SE_STARTUP != ""
  195.     Audio.se_play("Audio/SE/" + SE_STARTUP, 80, 100)
  196.   end
  197. end

  198. #--------------------------------------------------------------------------
  199. # ○ 回转动画准备
  200. #--------------------------------------------------------------------------
  201. def setup_move_move(mode)
  202.   if mode == MODE_MOVER
  203.     @index -= 1
  204.     @index = @items.size - 1 if @index < 0
  205.   elsif mode == MODE_MOVEL
  206.     @index += 1
  207.     @index = 0 if @index >= @items.size
  208.   else
  209.     return
  210.   end
  211.   @mode = mode
  212.   @steps = MOVING_FRAMES
  213. end

  214. #--------------------------------------------------------------------------
  215. # ○ 判断是否在动画中
  216. #--------------------------------------------------------------------------
  217. def animation?
  218.   return @mode != MODE_WAIT
  219. end
  220. end


  221. #==============================================================================
  222. # ■ Window_RingMenuStatus
  223. #------------------------------------------------------------------------------
  224. #  显示环形菜单画面下同伴状态的窗口。
  225. #   本窗口定义与Window_MenuStatus雷同
  226. #==============================================================================

  227. class Window_RingMenuStatus < Window_Selectable
  228. #--------------------------------------------------------------------------
  229. # ● 初始化对象
  230. #--------------------------------------------------------------------------
  231. def initialize
  232.   super(60, 64, 232, 352)
  233.   self.contents = Bitmap.new(width - 32, height - 32)
  234.   refresh
  235.   self.active = false
  236.   self.index = -1
  237. end

  238. #--------------------------------------------------------------------------
  239. # ● 刷新
  240. #--------------------------------------------------------------------------
  241. def refresh
  242.   self.contents.clear
  243.   @item_max = $game_party.actors.size
  244.   for i in 0...$game_party.actors.size
  245.     x = 80
  246.     y = 80 * i
  247.     actor = $game_party.actors[i]
  248.     draw_actor_graphic(actor, x - 40, y + 80)
  249.     draw_actor_name(actor, x, y + 24)
  250.   end
  251. end

  252. #--------------------------------------------------------------------------
  253. # ● 刷新光标矩形
  254. #--------------------------------------------------------------------------
  255. def update_cursor_rect
  256.   if @index < 0
  257.     self.cursor_rect.empty
  258.   else
  259.     self.cursor_rect.set(0, @index * 80, self.width - 32, 80)
  260.   end
  261. end
  262. end

  263. #==============================================================================
  264. # ■ Scene_Menu
  265. #------------------------------------------------------------------------------
  266. #   处理环形菜单的类。(再定义)
  267. #==============================================================================

  268. class Scene_Menu
  269. #--------------------------------------------------------------------------
  270. # ● 初始化对象
  271. # menu_index : 命令光标初始位置
  272. #--------------------------------------------------------------------------
  273. def initialize(menu_index = 0)
  274.   @menu_index = menu_index
  275. end

  276. #--------------------------------------------------------------------------
  277. # ● 主处理
  278. #--------------------------------------------------------------------------
  279. def main

  280.   # 获取地图信息
  281.   # 这个是用来生成游戏画面作为背景,如果没有此行,那么打开菜单后背景就是全黑的
  282.   @spriteset = Spriteset_Map.new
  283.   # 获取角色坐标,并生成命令窗口
  284.   px = $game_player.screen_x - 15
  285.   py = $game_player.screen_y - 24
  286.   @command_window = Window_RingMenu.new(px,py)
  287.   @command_window.index = @menu_index
  288.   # 同伴人数为 0 的情况下
  289.   if $game_party.actors.size == 0
  290.     # 物品、特技、装备、状态无效化
  291.     @command_window.disable_item(0)
  292.     @command_window.disable_item(1)
  293.     @command_window.disable_item(2)
  294.     @command_window.disable_item(3)
  295.   end

  296.   # 这个属性z的含意就是z坐标轴,这个坐标轴的0点在背景上
  297.   # 往上(就是背景以上的层)是正方向,换言之,z越大的窗口在显示时越排在前面
  298.   # 两个z相同的窗口,后生成的排在前面。数字差要在2以上才能产生效果
  299.   # 也就是说两个窗口的z坐标是“100和100”与“100和101”效果是一样的
  300.   # 总的来讲,这个属性z就是图块设置里的优先级…数字大的优先级高
  301.   @command_window.z = 100

  302.   # 禁止存档的情况下
  303.   if $game_system.save_disabled
  304.     # 存档无效
  305.     @command_window.disable_item(4)
  306.   end
  307.   
  308.   # 生成环形菜单的状态窗口
  309.   # visible : 可视性
  310.   @status_window = Window_RingMenuStatus.new
  311.   @status_window.x = 20
  312.   @status_window.y = 50
  313.   @status_window.z = 100
  314.   @status_window.visible = false

  315.   # 执行过渡
  316.   Graphics.transition
  317.   # 主循环
  318.   loop do
  319.     # 刷新游戏画面
  320.     Graphics.update
  321.     # 刷新输入信息
  322.     Input.update
  323.     # 刷新画面
  324.     update
  325.     # 如果切换画面就中断循环
  326.     if $scene != self
  327.     break
  328.     end
  329.   end
  330.   # 准备过渡
  331.   Graphics.freeze
  332.   # 释放窗口及地图画面
  333.   @spriteset.dispose
  334.   @command_window.dispose
  335.   @status_window.dispose
  336. end

  337. #--------------------------------------------------------------------------
  338. # ● 刷新画面
  339. #--------------------------------------------------------------------------
  340. def update
  341.   # 刷新窗口
  342.   @command_window.update
  343.   @status_window.update
  344.   # 命令窗口被激活的情况下: 调用 update_command
  345.   if @command_window.active
  346.     update_command
  347.     return
  348.   end
  349.   # 状态窗口被激活的情况下: 调用 update_status
  350.   if @status_window.active
  351.     update_status
  352.   return
  353.   end
  354. end

  355. #--------------------------------------------------------------------------
  356. # ● 刷新画面 (命令窗口被激活的情况下)
  357. #--------------------------------------------------------------------------
  358. def update_command
  359.   # 按下 B 键的情况下
  360.   if Input.trigger?(Input::B)
  361.     # 演奏取消 SE
  362.     $game_system.se_play($data_system.cancel_se)
  363.     # 切换的地图画面
  364.     $scene = Scene_Map.new
  365.     return
  366.   end

  367.   # 按下 C 键的情况下
  368.   if Input.trigger?(Input::C)
  369.     # 同伴人数为 0、存档、游戏结束以外的场合
  370.     if $game_party.actors.size == 0 and @command_window.index < 4
  371.     # 演奏冻结 SE
  372.     $game_system.se_play($data_system.buzzer_se)
  373.     return
  374.     end
  375.    
  376.     # 命令窗口的光标位置分支
  377.     case @command_window.index
  378.     when 0 # 物品
  379.     # 演奏确定 SE
  380.     $game_system.se_play($data_system.decision_se)
  381.     # 切换到物品画面
  382.     $scene = Scene_Item.new
  383.     when 1 # 特技
  384.     # 演奏确定 SE
  385.     $game_system.se_play($data_system.decision_se)
  386.     # 激活状态窗口
  387.     @command_window.active = false
  388.     @status_window.active = true
  389.     @status_window.visible = true
  390.     @status_window.index = 0
  391.     when 2 # 装备
  392.     # 演奏确定 SE
  393.     $game_system.se_play($data_system.decision_se)
  394.     # 激活状态窗口
  395.     @command_window.active = false
  396.     @status_window.active = true
  397.     @status_window.visible = true
  398.     @status_window.index = 0
  399.     when 3 # 状态
  400.     # 演奏确定 SE
  401.     $game_system.se_play($data_system.decision_se)
  402.     # 激活状态窗口
  403.     @command_window.active = false
  404.     @status_window.active = true
  405.     @status_window.visible = true
  406.     @status_window.index = 0
  407.     when 4 # 存档
  408.     # 禁止存档的情况下
  409.     if $game_system.save_disabled
  410.       # 演奏冻结 SE
  411.       $game_system.se_play($data_system.buzzer_se)
  412.       return
  413.     end
  414.     # 演奏确定 SE
  415.     $game_system.se_play($data_system.decision_se)
  416.     # 切换到存档画面
  417.     $scene = Scene_Save.new
  418.     when 5 # 游戏结束
  419.     # 演奏确定 SE
  420.     $game_system.se_play($data_system.decision_se)
  421.     # 切换到游戏结束画面
  422.     $scene = Scene_End.new
  423.     when 6
  424.     $game_system.se_play($data_system.decision_se)
  425.     $scene = Scene_End.new
  426.     end
  427.     return
  428.   end

  429.   # 动画中不能执行光标处理
  430.   # 这句的意思就是如果正处于动画中就return,这样下面的语句就不会执行了
  431.   # 换言之,如果正处于动画处理中,那么就无法移动菜单
  432.   return if @command_window.animation?

  433.   # 按下 ↑ 或 ← 键的情况下
  434.   if Input.press?(Input::UP) or Input.press?(Input::LEFT)
  435.     # 演奏光标 SE
  436.     $game_system.se_play($data_system.cursor_se)
  437.     # 向左旋转
  438.     @command_window.setup_move_move(Window_RingMenu::MODE_MOVEL)
  439.     return
  440.   end

  441.   # 按下 ↓ 或 → 键的情况下
  442.   if Input.press?(Input::DOWN) or Input.press?(Input::RIGHT)
  443.     # 演奏光标 SE
  444.     $game_system.se_play($data_system.cursor_se)
  445.     # 向右旋转
  446.     @command_window.setup_move_move(Window_RingMenu::MODE_MOVER)
  447.     return
  448.   end
  449. end

  450. #--------------------------------------------------------------------------
  451. # ● 刷新画面 (状态窗口被激活的情况下)
  452. #--------------------------------------------------------------------------
  453. def update_status
  454.   # 按下 B 键的情况下
  455.   if Input.trigger?(Input::B)
  456.     # 演奏取消 SE
  457.     $game_system.se_play($data_system.cancel_se)
  458.     # 激活命令窗口
  459.     @command_window.active = true
  460.     @status_window.active = false
  461.     @status_window.visible = false
  462.     @status_window.index = -1
  463.     return
  464.   end
  465.   
  466.   # 按下 C 键的情况下
  467.   if Input.trigger?(Input::C)
  468.     # 命令窗口的光标位置分支
  469.     case @command_window.index
  470.     when 1 # 特技
  471.     # 本角色的行动限制在 2 以上的情况下
  472.     if $game_party.actors[@status_window.index].restriction >= 2
  473.       # 演奏冻结 SE
  474.       $game_system.se_play($data_system.buzzer_se)
  475.       return
  476.     end
  477.     # 演奏确定 SE
  478.     $game_system.se_play($data_system.decision_se)
  479.     # 切换到状态画面
  480.     $scene = Scene_Skill.new(@status_window.index)
  481.     when 2 # 装備
  482.     # 演奏确定 SE
  483.     $game_system.se_play($data_system.decision_se)
  484.     # 切换到特技画面
  485.     $scene = Scene_Equip.new(@status_window.index)
  486.     when 3 # 装备
  487.     # 演奏确定 SE
  488.     $game_system.se_play($data_system.decision_se)
  489.     # 切换的装备画面
  490.     $scene = Scene_Status.new(@status_window.index)
  491.     end
  492.     return
  493.   end
  494. end
  495. end

  496. #==============================================================================
  497. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  498. #==============================================================================
复制代码





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