Project1

标题: 多选项的图片菜单 [打印本页]

作者: wodeaixier    时间: 2008-8-21 23:56
提示: 作者被禁止或删除 内容自动屏蔽
作者: 殲滅天使·玲    时间: 2008-8-22 00:26
你要加那两个选项是什么功能?
作者: wodeaixier    时间: 2008-8-22 00:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: wodeaixier    时间: 2008-8-22 00:47
提示: 作者被禁止或删除 内容自动屏蔽
作者: ★_茄孓    时间: 2008-8-22 00:53
我说我的脚本就可以了?把我的这个脚本先放到main前
  1. #==============================================================================
  2. # ■ Window_Picture_Command
  3. #------------------------------------------------------------------------------
  4. =begin
  5. 该脚本是用图片做命令按钮,使用起来比较简单,脚本会自动判断位置。
  6. 使用方法:
  7. 与调用一般命令窗口一样!
  8. type描绘类型
  9. type = 1 只支持键盘
  10. type = 2 支持键盘+鼠标
  11. 如:先设定一个命令按钮图片以及坐标
  12. p1 = ["图片名",图片X坐标,图片Y坐标]
  13. 范例游戏里为
  14.     #################################################
  15.     s1 = ["新游戏",100,0]
  16.     s2 = ["继续游戏",200,150]
  17.     s3 = ["离开游戏",300,200]
  18.     @command_window = Window_Picture_Command.new([s1,s2,s3],type)
  19.     #################################################
  20.     这里的type的值就是刚才所支持的
  21.     type = 1 只支持键盘
  22.     type = 2 支持键盘+鼠标   
  23.     #################################################
  24.     s1 = ["新游戏",100,0]
  25.     s2 = ["继续游戏",200,150]
  26.     s3 = ["离开游戏",300,200]
  27.     @command_window = Window_Picture_Command.new([s1,s2,s3],2)
  28.     #################################################
  29.   大概就这样了,不明白看范例游戏吧。

  30. =end
  31. #==============================================================================
  32. class Window_Picture_Command < Window_Selectable
  33.   #--------------------------------------------------------------------------
  34.   # ● 初始化对像
  35.   #     width    : 窗口的宽
  36.   #     commands : 命令字符串序列
  37.   #--------------------------------------------------------------------------
  38.   def initialize(commands,type=1)
  39.     # 由命令的个数计算出窗口的高
  40.     super(0, 0, 640, 480)
  41.     @item_max = commands.size
  42.     @commands = commands
  43.     @dash = []
  44.     @sprite = []
  45.     @type = type
  46.     @move_index = self.index
  47.     self.opacity = 0
  48.     self.contents = Bitmap.new(width - 32, @item_max * 32)
  49.     refresh
  50.     self.index = 0
  51.   end
  52.   #--------------------------------------------------------------------------
  53.   # ● 刷新
  54.   #--------------------------------------------------------------------------
  55.   def refresh
  56.     self.contents.clear
  57.     for i in 0...@item_max
  58.       draw_picture_item(i, @type)
  59.     end
  60.   end
  61.   #--------------------------------------------------------------------------
  62.   # ● 释放
  63.   #--------------------------------------------------------------------------
  64.   def dispose
  65.     super
  66.     for index in @dash
  67.      if @sprite[index] != nil
  68.        @sprite[index].dispose
  69.        @sprite[index].bitmap.dispose
  70.      end
  71.     end
  72.   end  
  73.   #--------------------------------------------------------------------------
  74.   # ● 描绘图片项目
  75.   #     index : 项目编号
  76.   #     type  : 描绘类型
  77.   #     type = 1 只支持键盘
  78.   #     type = 2 双面支持
  79.   #--------------------------------------------------------------------------
  80.   def draw_picture_item(index, type)
  81.     @sprite[index] = Sprite.new
  82.     if @commands[index][0] == nil
  83.       p "图片名设置有误"
  84.     end
  85.     if @commands[index][1] == nil
  86.       p "图片X坐标设置有误"
  87.     end
  88.     if @commands[index][2] == nil
  89.       p "图片Y坐标设置有误"
  90.     end
  91.     bitmap = RPG::Cache.picture(@commands[index][0])
  92.     @sprite[index].bitmap = bitmap
  93.     @sprite[index].x = @commands[index][1]
  94.     @sprite[index].y = @commands[index][2]
  95.     @sprite[index].index = index
  96.     if @sprite[index].index != self.index
  97.       @sprite[index].color = Color.new(0,0,0,100)
  98.     else
  99.       @sprite[index].color = Color.new(0,0,0,0)
  100.     end
  101.     @dash.push(index)
  102.   end
  103.   #--------------------------------------------------------------------------
  104.   # ● 刷新图片项目
  105.   #--------------------------------------------------------------------------
  106.   def update_item
  107.     if Mouse.get_mouse_pos != nil
  108.     $mouse_x,$mouse_y = Mouse.get_mouse_pos
  109.     end
  110.     if @type == 2
  111.     for index in @dash
  112.      if @sprite[index] != nil
  113.       top_x = @sprite[index].x
  114.       top_y = @sprite[index].y
  115.       bottom_x = top_x + @sprite[index].bitmap.width
  116.       bottom_y = top_y + @sprite[index].bitmap.height
  117.       if ($mouse_x > top_x) and ($mouse_y > top_y) and
  118.            ($mouse_x < bottom_x) and ($mouse_y < bottom_y)
  119.            self.index = @sprite[index].index
  120.            if @move_index != self.index
  121.            Se.ok
  122.            @move_index = self.index
  123.          end
  124.       end
  125.       if @sprite[index].index != self.index
  126.         @sprite[index].color = Color.new(0,0,0,100)
  127.       else
  128.         @sprite[index].color = Color.new(0,0,0,0)
  129.       end
  130.     end
  131.     end
  132.     elsif @type == 1
  133.      for index in @dash
  134.         if @sprite[index].index != self.index
  135.          @sprite[index].color = Color.new(0,0,0,100)
  136.        else
  137.         @sprite[index].color = Color.new(0,0,0,0)
  138.        end
  139.      end  
  140.     end
  141.   end
  142.   #--------------------------------------------------------------------------
  143.   # ● 图片项目无效化
  144.   #     index : 项目编号
  145.   #--------------------------------------------------------------------------
  146.   def disable_item(index)
  147.     @sprite[index].color = Color.new(0,0,0,100)
  148.   end
  149.   #--------------------------------------------------------------------------
  150.   # ● 刷新
  151.   #--------------------------------------------------------------------------
  152.   alias window_picture_command_update update
  153.   def update
  154.     window_picture_command_update
  155.     update_item
  156.   end
  157.   #--------------------------------------------------------------------------
  158.   # ● 更新光标举行
  159.   #--------------------------------------------------------------------------
  160.   def update_cursor_rect
  161.     if @index < 0
  162.       self.cursor_rect.empty
  163.       return
  164.     end
  165.     row = @index / @column_max
  166.     if row < self.top_row
  167.       self.top_row = row
  168.     end
  169.     if row > self.top_row + (self.page_row_max - 1)
  170.       self.top_row = row - (self.page_row_max - 1)
  171.     end
  172.     cursor_width = self.width / @column_max - 32
  173.     x = @index % @column_max * (cursor_width + 32)
  174.     y = @index / @column_max * 32 - self.oy
  175.     self.cursor_rect.set(x+5000, y, cursor_width, 32)
  176.   end
  177. end
  178. #==============================================================================
  179. # ■ Se
  180. #------------------------------------------------------------------------------
  181. # ■ 音效模块
  182. #==============================================================================
  183. module Se
  184.   def self.ok
  185.     $game_system.se_play($data_system.cursor_se)
  186.   end
  187.   def self.no
  188.     $game_system.se_play($data_system.cancel_se)
  189.   end
  190. end
  191. #==============================================================================
  192. # ■ Sprite
  193. #------------------------------------------------------------------------------
  194. # ■ index 选择光标
  195. #==============================================================================
  196. class Sprite
  197.   attr_accessor :index
  198. end
复制代码

然后我帮你写了个5选择的图片菜单图片自己放进去,效果自己设置了
  1. #==============================================================================
  2. # ■ Scene_Title
  3. #------------------------------------------------------------------------------
  4. #  处理标题画面的类。
  5. #==============================================================================

  6. class Scene_Title
  7.   #--------------------------------------------------------------------------
  8.   # ● 住处理
  9.   #--------------------------------------------------------------------------
  10.   def main
  11.     # 战斗测试的情况下
  12.     if $BTEST
  13.       battle_test
  14.       return
  15.     end
  16.     # 载入数据库
  17.     $data_actors        = load_data("Data/Actors.rxdata")
  18.     $data_classes       = load_data("Data/Classes.rxdata")
  19.     $data_skills        = load_data("Data/Skills.rxdata")
  20.     $data_items         = load_data("Data/Items.rxdata")
  21.     $data_weapons       = load_data("Data/Weapons.rxdata")
  22.     $data_armors        = load_data("Data/Armors.rxdata")
  23.     $data_enemies       = load_data("Data/Enemies.rxdata")
  24.     $data_troops        = load_data("Data/Troops.rxdata")
  25.     $data_states        = load_data("Data/States.rxdata")
  26.     $data_animations    = load_data("Data/Animations.rxdata")
  27.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  28.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  29.     $data_system        = load_data("Data/System.rxdata")
  30.     # 生成系统对像
  31.     $game_system = Game_System.new
  32.     # 生成标题图形
  33.     @sprite = Sprite.new
  34.     @sprite.bitmap = RPG::Cache.title($data_system.title_name)
  35.     # 生成命令窗口
  36.     s1 = ["新的游戏",100,0]
  37.     s2 = ["继续游戏",200,150]
  38.     s3 = ["制作人员",300,200]
  39.     s4 = ["关于游戏",400,250]
  40.     s5 = ["离开游戏",500,300]
  41.     @command_window = Window_Picture_Command.new([s1,s2,s3,s4,s5],1)
  42.     @command_window.back_opacity = 160
  43.     @command_window.x = 320 - @command_window.width / 2
  44.     @command_window.y = 288
  45.     # 判定继续的有效性
  46.     # 存档文件一个也不存在的时候也调查
  47.     # 有効为 @continue_enabled 为 true、無効为 false
  48.     @continue_enabled = false
  49.     for i in 0..3
  50.       if FileTest.exist?("Save#{i+1}.rxdata")
  51.         @continue_enabled = true
  52.       end
  53.     end
  54.     # 继续为有效的情况下、光标停止在继续上
  55.     # 无效的情况下、继续的文字显示为灰色
  56.     if @continue_enabled
  57.       @command_window.index = 1
  58.     else
  59.       @command_window.disable_item(1)
  60.     end
  61.     # 演奏标题 BGM
  62.     $game_system.bgm_play($data_system.title_bgm)
  63.     # 停止演奏 ME、BGS
  64.     Audio.me_stop
  65.     Audio.bgs_stop
  66.     # 执行过渡
  67.     Graphics.transition
  68.     # 主循环
  69.     loop do
  70.       # 刷新游戏画面
  71.       Graphics.update
  72.       # 刷新输入信息
  73.       Input.update
  74.       # 刷新画面
  75.       update
  76.       # 如果画面被切换就中断循环
  77.       if $scene != self
  78.         break
  79.       end
  80.     end
  81.     # 装备过渡
  82.     Graphics.freeze
  83.     # 释放命令窗口
  84.     @command_window.dispose
  85.     # 释放标题图形
  86.     @sprite.bitmap.dispose
  87.     @sprite.dispose
  88.   end
  89.   #--------------------------------------------------------------------------
  90.   # ● 刷新画面
  91.   #--------------------------------------------------------------------------
  92.   def update
  93.     # 刷新命令窗口
  94.     @command_window.update
  95.     # 按下 C 键的情况下
  96.     if Input.trigger?(Input::C)
  97.       # 命令窗口的光标位置的分支
  98.       case @command_window.index
  99.       when 0  # 新游戏
  100.         command_new_game
  101.       when 1  # 继续
  102.         command_continue
  103.       when 2  # 退出
  104.         command_shutdown
  105.       end
  106.     end
  107.   end
  108.   #--------------------------------------------------------------------------
  109.   # ● 命令 : 新游戏
  110.   #--------------------------------------------------------------------------
  111.   def command_new_game
  112.     # 演奏确定 SE
  113.     $game_system.se_play($data_system.decision_se)
  114.     # 停止 BGM
  115.     Audio.bgm_stop
  116.     # 重置测量游戏时间用的画面计数器
  117.     Graphics.frame_count = 0
  118.     # 生成各种游戏对像
  119.     $game_temp          = Game_Temp.new
  120.     $game_system        = Game_System.new
  121.     $game_switches      = Game_Switches.new
  122.     $game_variables     = Game_Variables.new
  123.     $game_self_switches = Game_SelfSwitches.new
  124.     $game_screen        = Game_Screen.new
  125.     $game_actors        = Game_Actors.new
  126.     $game_party         = Game_Party.new
  127.     $game_troop         = Game_Troop.new
  128.     $game_map           = Game_Map.new
  129.     $game_player        = Game_Player.new
  130.     # 设置初期同伴位置
  131.     $game_party.setup_starting_members
  132.     # 设置初期位置的地图
  133.     $game_map.setup($data_system.start_map_id)
  134.     # 主角向初期位置移动
  135.     $game_player.moveto($data_system.start_x, $data_system.start_y)
  136.     # 刷新主角
  137.     $game_player.refresh
  138.     # 执行地图设置的 BGM 与 BGS 的自动切换
  139.     $game_map.autoplay
  140.     # 刷新地图 (执行并行事件)
  141.     $game_map.update
  142.     # 切换地图画面
  143.     $scene = Scene_Map.new
  144.   end
  145.   #--------------------------------------------------------------------------
  146.   # ● 命令 : 继续
  147.   #--------------------------------------------------------------------------
  148.   def command_continue
  149.     # 继续无效的情况下
  150.     unless @continue_enabled
  151.       # 演奏无效 SE
  152.       $game_system.se_play($data_system.buzzer_se)
  153.       return
  154.     end
  155.     # 演奏确定 SE
  156.     $game_system.se_play($data_system.decision_se)
  157.     # 切换到读档画面
  158.     $scene = Scene_Load.new
  159.   end
  160.   #--------------------------------------------------------------------------
  161.   # ● 命令 : 退出
  162.   #--------------------------------------------------------------------------
  163.   def command_shutdown
  164.     # 演奏确定 SE
  165.     $game_system.se_play($data_system.decision_se)
  166.     # BGM、BGS、ME 的淡入淡出
  167.     Audio.bgm_fade(800)
  168.     Audio.bgs_fade(800)
  169.     Audio.me_fade(800)
  170.     # 退出
  171.     $scene = nil
  172.   end
  173.   #--------------------------------------------------------------------------
  174.   # ● 战斗测试
  175.   #--------------------------------------------------------------------------
  176.   def battle_test
  177.     # 载入数据库 (战斗测试用)
  178.     $data_actors        = load_data("Data/BT_Actors.rxdata")
  179.     $data_classes       = load_data("Data/BT_Classes.rxdata")
  180.     $data_skills        = load_data("Data/BT_Skills.rxdata")
  181.     $data_items         = load_data("Data/BT_Items.rxdata")
  182.     $data_weapons       = load_data("Data/BT_Weapons.rxdata")
  183.     $data_armors        = load_data("Data/BT_Armors.rxdata")
  184.     $data_enemies       = load_data("Data/BT_Enemies.rxdata")
  185.     $data_troops        = load_data("Data/BT_Troops.rxdata")
  186.     $data_states        = load_data("Data/BT_States.rxdata")
  187.     $data_animations    = load_data("Data/BT_Animations.rxdata")
  188.     $data_tilesets      = load_data("Data/BT_Tilesets.rxdata")
  189.     $data_common_events = load_data("Data/BT_CommonEvents.rxdata")
  190.     $data_system        = load_data("Data/BT_System.rxdata")
  191.     # 重置测量游戏时间用的画面计数器
  192.     Graphics.frame_count = 0
  193.     # 生成各种游戏对像
  194.     $game_temp          = Game_Temp.new
  195.     $game_system        = Game_System.new
  196.     $game_switches      = Game_Switches.new
  197.     $game_variables     = Game_Variables.new
  198.     $game_self_switches = Game_SelfSwitches.new
  199.     $game_screen        = Game_Screen.new
  200.     $game_actors        = Game_Actors.new
  201.     $game_party         = Game_Party.new
  202.     $game_troop         = Game_Troop.new
  203.     $game_map           = Game_Map.new
  204.     $game_player        = Game_Player.new
  205.     # 设置战斗测试用同伴
  206.     $game_party.setup_battle_test_members
  207.     # 设置队伍 ID、可以逃走标志、战斗背景
  208.     $game_temp.battle_troop_id = $data_system.test_troop_id
  209.     $game_temp.battle_can_escape = true
  210.     $game_map.battleback_name = $data_system.battleback_name
  211.     # 演奏战斗开始 BGM
  212.     $game_system.se_play($data_system.battle_start_se)
  213.     # 演奏战斗 BGM
  214.     $game_system.bgm_play($game_system.battle_bgm)
  215.     # 切换到战斗画面
  216.     $scene = Scene_Battle.new
  217.   end
  218. end
复制代码

作者: 越前リョーマ    时间: 2008-8-22 00:56
用事件不就好了…… - - (虽然我知道LZ肯定也不会)
作者: 殲滅天使·玲    时间: 2008-8-22 00:57
以下引用越前リョーマ于2008-8-21 16:56:10的发言:

用事件不就好了…… - - (虽然我知道LZ肯定也不会)


话说 事件制作 菜单与片头比脚本简单得多了..
效果 感觉也华丽..
作者: 越前リョーマ    时间: 2008-8-22 00:59
以下引用殲滅天使·玲于2008-8-21 16:57:38的发言:


以下引用越前リョーマ于2008-8-21 16:56:10的发言:

用事件不就好了…… - - (虽然我知道LZ肯定也不会)



话说 事件制作 菜单与片头比脚本简单得多了..
效果 感觉也华丽..

恩,就是有些地方可能麻烦点…… - -
作者: 湛蓝de海    时间: 2008-8-22 01:40
以下引用越前リョーマ于2008-8-21 16:59:43的发言:

恩,就是有些地方可能麻烦点…… - -

感觉和事件菜单很像.素真的.{/hx}

作者: wodeaixier    时间: 2008-8-22 02:46
提示: 作者被禁止或删除 内容自动屏蔽
作者: ★_茄孓    时间: 2008-8-23 01:09
你看清楚使用方法啊,是可以支持鼠标的,首先你要有鼠标脚本这样保证不出错!
然后生成的时候
@command_window = Window_Picture_Command.new([s1,s2,s3],type)
type处改2即可,
1是只支持键盘
2是键盘加鼠标
                                                      
[LINE]1,#dddddd[/LINE]系统信息:本贴由楼主认可为正确答案,66RPG感谢您的热情解答~
作者: wodeaixier    时间: 2008-8-23 19:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: 越前リョーマ    时间: 2009-6-12 08:00
以下引用湛蓝de海于2008-8-21 17:40:33的发言:


以下引用越前リョーマ于2008-8-21 16:59:43的发言:

恩,就是有些地方可能麻烦点…… - -



感觉和事件菜单很像.素真的.

事件菜单简单点,因为选项少点……{/hx}




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