Project1

标题: 求助,请让这个标题菜单支持鼠标,谢谢! [打印本页]

作者: 美丽晨露    时间: 2013-4-25 16:31
标题: 求助,请让这个标题菜单支持鼠标,谢谢!
本帖最后由 美丽晨露 于 2013-4-25 17:44 编辑

可以的话,将游戏开始时弹出的错误去掉,谢谢。
不多说了,请让这个标题菜单支持鼠标,谢谢!
上范例:

多图片菜单.rar (974.66 KB, 下载次数: 26)

PS:请不要吐槽范例内的图片,谢谢
作者: 789456qwe    时间: 2013-4-25 17:15
本帖最后由 789456qwe 于 2013-8-26 13:05 编辑

范例
里有说明
作者: 沙漠点灰    时间: 2013-4-25 17:37
只修改了lz要求的部分,没什么好说的,就是原代码太乱,如果这是lz写的脚本话,建议对照看看,相信会有一定收获。
还有就是能用引擎即时生成的东西尽量用代码实现,lz的范例中,完全可以。
“多图片标题菜单”代码:
  1. #==============================================================================
  2. # ■ Scene_Title
  3. #------------------------------------------------------------------------------
  4. #  处理标题画面的类。
  5. #==============================================================================
  6. class Rect
  7.   def include?(ary)
  8.     return false if !ary.is_a?(Array) || ary.size != 2
  9.     ary[0] >= self.x && ary[1] >= self.y && ary[0] < self.x + self.width &&
  10.     ary[1] < self.y + self.height
  11.   end
  12. end
  13. class Scene_Title
  14.   TITLE_SIZE = 4
  15.   TITLE_RECT = Rect.new(0,280, 292, 32)
  16.   @@title_rect = []
  17.   TITLE_SIZE.times{|i|@@title_rect << TITLE_RECT.dup;@@title_rect[-1].y += TITLE_RECT.height*i}
  18.   def initialize(skip = false)
  19.     @skip = skip
  20.   end
  21.   #--------------------------------------------------------------------------
  22.   # ● 主处理
  23.   #--------------------------------------------------------------------------
  24.   def main
  25.     # 战斗测试的情况下
  26.     if $BTEST
  27.       battle_test
  28.       return
  29.     end
  30.     # 载入数据库
  31.     $data_actors        = load_data("Data/Actors.rxdata")
  32.     $data_classes       = load_data("Data/Classes.rxdata")
  33.     $data_skills        = load_data("Data/Skills.rxdata")
  34.     $data_items         = load_data("Data/Items.rxdata")
  35.     $data_weapons       = load_data("Data/Weapons.rxdata")
  36.     $data_armors        = load_data("Data/Armors.rxdata")
  37.     $data_enemies       = load_data("Data/Enemies.rxdata")
  38.     $data_troops        = load_data("Data/Troops.rxdata")
  39.     $data_states        = load_data("Data/States.rxdata")
  40.     $data_animations    = load_data("Data/Animations.rxdata")
  41.     $data_tilesets      = load_data("Data/Tilesets.rxdata")
  42.     $data_common_events = load_data("Data/CommonEvents.rxdata")
  43.     $data_system        = load_data("Data/System.rxdata")
  44.     $data_mapnames      = load_data("Data/MapInfos.rxdata")
  45.     $game_system        = Game_System.new
  46.     @wait_count = 0
  47.     @index      = 0
  48.     # 判定继续的有效性
  49.     # 存档文件一个也不存在的时候也调查
  50.     # 有効为 @continue_enabled 为 true、無効为 false
  51.     @continue_enabled = false
  52.     for i in 0..3
  53.       if FileTest.exist?("Save#{i+1}.rxdata")
  54.         @continue_enabled = true
  55.       end
  56.     end
  57.     if @skip
  58.       acting(4)
  59.     else
  60.       start
  61.     end
  62.     # 停止演奏 ME、BGS
  63.     Audio.me_stop
  64.     Audio.bgs_stop
  65.     # 执行过渡
  66.     Graphics.transition
  67.     # 主循环
  68.     loop do
  69.       # 刷新游戏画面
  70.       Graphics.update
  71.       # 刷新输入信息
  72.       Input.update
  73.       # 刷新画面
  74.       update
  75.       # 如果画面被切换就中断循环
  76.       if $scene != self
  77.         break
  78.       end
  79.     end
  80.     # 装备过渡
  81.     Graphics.freeze
  82.     5.times do |i|@pic[i].bitmap.dispose; @pic[i].dispose end
  83.     Quarcy::Cache.clear
  84.   end
  85.   #--------------------------------------------------------------------------
  86.   # ● 刷新鼠标
  87.   #--------------------------------------------------------------------------
  88.   def update_mouse
  89.     pos = Mouse.get_mouse_pos
  90.     @@title_rect.each_with_index{|rect, index|return refresh_index(index)if rect.include?(pos)}
  91.   end
  92.   #--------------------------------------------------------------------------
  93.   # ● 刷新光标
  94.   #--------------------------------------------------------------------------
  95.   def refresh_index(index=@index)
  96.     return if @index == index
  97.     @index = index
  98.     $game_system.se_play($data_system.cursor_se)
  99.     @pic[3].bitmap = loadbitmap("Graphics/Title/选项#{@index+1}")
  100.   end
  101.   #--------------------------------------------------------------------------
  102.   # ● 刷新画面
  103.   #--------------------------------------------------------------------------
  104.   def update
  105.     (@wait_count -= 1;return) if @wait_count > 0
  106.     return if acting(@step)
  107.     update_mouse
  108.     return refresh_index((@index - 1)%TITLE_SIZE) if Input.repeat?(Input::UP) || Input.trigger?(Input::UP)
  109.     return refresh_index((@index + 1)%TITLE_SIZE) if Input.repeat?(Input::DOWN) || Input.trigger?(Input::DOWN)
  110.     # 按下 C 键的情况下
  111.     if Input.trigger?(Input::C)
  112.       # 命令窗口的光标位置的分支
  113.       case @index
  114.       when 0  # 新游戏
  115.         command_new_game
  116.       when 1  # 继续
  117.         command_continue
  118.       when 2 # 制作人员
  119.         $scene = Scene_Reference.new
  120.       when 3  # 退出
  121.         command_shutdown
  122.       end
  123.     end
  124.   end
  125.   #----------------------------------------------------------------------------
  126.   def start
  127.     @wait_count = 20
  128.     @step = 1
  129.   end
  130.   def acting(step)
  131.     case step
  132.     when 8
  133.       return false
  134.     when 1
  135.       @pic = Sprite.new
  136.       @pic.bitmap = loadbitmap("Graphics/Pictures/标题LOGO")
  137.       @pic.opacity = 0
  138.       @duration = 20
  139.       @step = 2
  140.       return true
  141.     when 2
  142.       if @duration > 0
  143.         d = @duration
  144.         @pic.opacity = (@pic.opacity * (d - 1) + 255) / d
  145.         @duration -= 1
  146.       else
  147.         @step = 3
  148.         @wait_count = 60
  149.         @duration   = 20
  150.       end
  151.       return true
  152.     when 3
  153.       if @duration > 0
  154.         d = @duration
  155.         @pic.opacity = (@pic.opacity * (d - 1) + 0) / d
  156.         @duration -= 1
  157.       else
  158.         @step = 4
  159.         @wait_count = 25
  160.       end
  161.       return true
  162.     when 4
  163.       @pic.dispose if @pic !=nil
  164.       @wait_count = 20
  165.       @duration   = 60
  166.       $game_system.bgm_play($data_system.title_bgm)
  167.       @pic = []
  168.       5.times do @pic << Sprite.new end
  169.       i = rand(3) + 1
  170.       @pic[0].bitmap = loadbitmap("Graphics/Title/背景#{i}")
  171.       @pic[1].bitmap = loadbitmap("Graphics/Title/LOGO")
  172.       actor = %w[莉德露一 莉德露二 莉德露三][rand(3)]
  173.       @pic[2].bitmap = loadbitmap("Graphics/Title/#{actor}")
  174.       if @continue_enabled
  175.         @index = 1
  176.         @pic[3].bitmap = loadbitmap("Graphics/Title/选项#{@index+1}")
  177.       else
  178.         @pic[3].bitmap = loadbitmap("Graphics/Title/选项1")
  179.       end
  180.       @pic[3].x = -15
  181.       
  182.       @pic[4].bitmap = loadbitmap("Graphics/Title/66RPG")
  183.       @pic[4].y = 460
  184.       5.times do |i|@pic[i].opacity = 0 end
  185.       @step = 5
  186.       return true
  187.     when 5
  188.       if @duration > 40
  189.         d = @duration - 40
  190.         @pic[0].opacity = (@pic[0].opacity * (d - 1) + 255) / d
  191.         @pic[4].opacity = (@pic[3].opacity * (d - 1) + 255) / d
  192.         @duration -= 1
  193.         return true
  194.       elsif @duration > 25
  195.         d = @duration - 25
  196.         @pic[1].opacity = (@pic[1].opacity * (d - 1) + 255) / d
  197.         @pic[2].opacity = (@pic[2].opacity * (d - 1) + 255) / d
  198.         @duration -= 1
  199.         return true
  200.       elsif @duration > 0
  201.         d = @duration
  202.         @pic[3].opacity = (@pic[3].opacity * (d - 1) + 255) / d
  203.         @duration -= 1
  204.         return true
  205.       else
  206.         @step = 8
  207.         @wait_count = 3
  208.       end
  209.       return true
  210.     when 6
  211.       if @duration > 0
  212.         d = @duration
  213.         @pic[0].opacity = (@pic[0].opacity * (d - 1) + 0) / d
  214.         @duration -= 1
  215.       else
  216.         @step = 7
  217.         @duration = 20
  218.         @pic[0].x = 0
  219.       end
  220.       return true
  221.     when 7
  222.       if @duration > 0
  223.         d = @duration
  224.         @pic[0].opacity = (@pic[0].opacity * (d - 1) + 255) / d
  225.         @duration -= 1
  226.       else
  227.         @step = 8
  228.       end
  229.     else
  230.       return true
  231.     end
  232.       
  233.   end
  234.   #----------------------------------------------------------------------------
  235.   #--------------------------------------------------------------------------
  236.   # ● 載入圖片并放置于緩存區
  237.   #--------------------------------------------------------------------------
  238.   def loadbitmap(path)
  239.     return Quarcy::Cache.loadbitmap(path)
  240.   end
  241. end
  242. class Scene_Reference
  243.   #--------------------------------------------------------------------------
  244.   # ● 主处理
  245.   #--------------------------------------------------------------------------
  246.   def main
  247.     bg_sprite = Sprite.new()
  248.     bg_sprite.bitmap = Quarcy::Cache.loadbitmap("Graphics/Pictures/制作人员")
  249.     # 执行过渡
  250.     Graphics.transition(20, "Graphics/Transitions/标题过度.png")
  251.     # 主循环
  252.     loop do
  253.       # 刷新游戏画面
  254.       Graphics.update
  255.       # 刷新输入信息
  256.       Input.update
  257.       if Input.trigger?(Input::C) or Input.trigger?(Input::B)
  258.         $game_system.se_play($data_system.decision_se)
  259.         $scene = Scene_Title.new(true)
  260.       end
  261.       # 如果画面被切换就中断循环
  262.       if $scene != self
  263.         break
  264.       end
  265.     end
  266.     bg_sprite.dispose()
  267.     # 准备过渡
  268.     Graphics.freeze
  269.     Quarcy::Cache.clear
  270.   end
  271. end
复制代码
至于开头报错,lz难道忘了“紧插到Main前”这一句话了吗= =


load("#$Rmxp_Location/rbScript/require.rb")


这句改插到?Maiin前就行了
作者: 美丽晨露    时间: 2013-4-25 17:44
本帖最后由 美丽晨露 于 2013-4-25 18:15 编辑
沙漠点灰 发表于 2013-4-25 17:37
只修改了lz要求的部分,没什么好说的,就是原代码太乱,如果这是lz写的脚本话,建议对照看看,相信会有一定 ...


十分感谢您

代码并不是我写的啦,脚本盲不会写脚本的说

原来那个load("#$Rmxp_Location/rbScript/require.rb")
我插到了最前面了,所以会没有效果

@沙漠点灰
关于这个:还有就是能用引擎即时生成的东西尽量用代码实现
不好意思啊,那可以帮助我优化一下这个脚本吗?
感觉附带一些外部文件使用起来很不方便,可以吗?







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