Project1

标题: 请问如何制作图标选项菜单 [打印本页]

作者: zxc3824    时间: 2011-1-31 11:03
标题: 请问如何制作图标选项菜单
在资源帖里面找不到,搜索也找不到,难道我的问题就那么难解决?

上图先吧



就是我不想要菜单下的那些文字,我想换成图标,用哪个脚本合适?请高手解决。
作者: 凯蒂洛斯    时间: 2011-1-31 12:45
虽然这个问题我没法解决 但是我知道解决了以后你的鼠标脚本就不能用了哦了哦~……
作者: 银·乌尔    时间: 2011-1-31 13:27
回复 凯蒂洛斯 的帖子

调整原窗口的光标坐标跟图片显示的位置的话,
鼠标照样可以用的~
不要吓LZ大人咯~喵~
作者: terry_zhp    时间: 2011-1-31 19:27
可以参考我签名里面柳柳教学视频,里面有个做图片菜单的教学
作者: zxc3824    时间: 2011-2-1 10:51
回复 凯蒂洛斯 的帖子

那发个图片菜单的脚本过来告诉我 啊
作者: 凯蒂洛斯    时间: 2011-2-1 15:09
回复 zxc3824 的帖子

请搜索闪电的完整菜单……你不是会改光标矩形的坐标么,那个自己做完图片以后改一改就行了。
记得天干宝典里面也有图标选项菜单 不过那个的效果看起来不咋地……
如果想做成暗黑圣剑传说那种的话看4楼的签名
作者: zxc3824    时间: 2011-2-2 19:21
回复 凯蒂洛斯 的帖子

不好找啊,发个脚本出来,我只是用默认脚本的,应该没有冲突
作者: 忧雪の伤    时间: 2011-2-2 19:31
貌似只用默认脚本也可以做到这个效果的……应该
作者: Wind2010    时间: 2011-2-2 20:03
回复 忧雪の伤 的帖子

用几个窗口来描绘图片?
图片菜单的话或者要改改
作者: 1136823987    时间: 2011-2-5 23:44
提示: 作者被禁止或删除 内容自动屏蔽
作者: zxc3824    时间: 2011-2-6 11:12
回复 1136823987 的帖子

有错啊,请修改一下吧
作者: Wind2010    时间: 2011-2-6 12:34
图片选项的话...这个试试
  1. #==============================================================================
  2. # ■ Window_Picture_Command
  3. #------------------------------------------------------------------------------
  4. =begin
  5. 注意,如果支持鼠标请配上鼠标脚本。
  6. 该脚本是用图片做命令按钮,使用起来比较简单,脚本会自动判断位置。
  7. 使用方法:
  8. 与调用一般命令窗口一样!
  9. type描绘类型
  10. type = 1 只支持键盘
  11. type = 2 支持键盘+鼠标
  12. 如:先设定一个命令按钮图片以及坐标
  13. p1 = ["图片名",图片X坐标,图片Y坐标]
  14. 范例游戏里为
  15.     #################################################
  16.     s1 = ["新游戏",100,0]
  17.     s2 = ["继续游戏",200,150]
  18.     s3 = ["离开游戏",300,200]
  19.     @command_window = Window_Picture_Command.new([s1,s2,s3],type)
  20.     #################################################
  21.     这里的type的值就是刚才所支持的
  22.     type = 1 只支持键盘
  23.     type = 2 支持键盘+鼠标   
  24.     #################################################
  25.     s1 = ["新游戏",100,0]
  26.     s2 = ["继续游戏",200,150]
  27.     s3 = ["离开游戏",300,200]
  28.     @command_window = Window_Picture_Command.new([s1,s2,s3],2)
  29.     #################################################
  30.   大概就这样了,不明白看范例游戏吧。
  31. 注意,如果支持鼠标请配上鼠标脚本。
  32. =end
  33. #==============================================================================
  34. class Window_Picture_Command < Window_Selectable
  35.   attr_accessor :active
  36.   #--------------------------------------------------------------------------
  37.   # ● 初始化对像
  38.   #     width    : 窗口的宽
  39.   #     commands : 命令字符串序列
  40.   #--------------------------------------------------------------------------
  41.   def initialize(commands,type=1)
  42.     # 由命令的个数计算出窗口的高
  43.     super(0, 0, 640, 480)
  44.     @item_max = commands.size
  45.     @commands = commands
  46.     @dash = []
  47.     @sprite = []
  48.     @active = true
  49.     @type = type
  50.     @move_index = self.index
  51.     self.opacity = 0
  52.     self.contents = Bitmap.new(width - 32, @item_max * 32)
  53.     refresh
  54.     self.index = 0
  55.   end
  56.   #--------------------------------------------------------------------------
  57.   # ● 刷新
  58.   #--------------------------------------------------------------------------
  59.   def refresh
  60.     self.contents.clear
  61.     for i in 0...@item_max
  62.       draw_picture_item(i, @type)
  63.     end
  64.   end
  65.   #--------------------------------------------------------------------------
  66.   # ● 释放
  67.   #--------------------------------------------------------------------------
  68.   def dispose
  69.     super
  70.     for index in @dash
  71.      if @sprite[index] != nil
  72.        @sprite[index].dispose
  73.        @sprite[index].bitmap.dispose
  74.      end
  75.     end
  76.   end  
  77.   #--------------------------------------------------------------------------
  78.   # ● 描绘图片项目
  79.   #     index : 项目编号
  80.   #     type  : 描绘类型
  81.   #     type = 1 只支持键盘
  82.   #     type = 2 双面支持
  83.   #--------------------------------------------------------------------------
  84.   def draw_picture_item(index, type)
  85.     @sprite[index] = Sprite.new
  86.     if @commands[index][0] == nil
  87.       p "图片名设置有误"
  88.     end
  89.     if @commands[index][1] == nil
  90.       p "图片X坐标设置有误"
  91.     end
  92.     if @commands[index][2] == nil
  93.       p "图片Y坐标设置有误"
  94.     end
  95.     bitmap = RPG::Cache.picture(@commands[index][0])
  96.     @sprite[index].bitmap = bitmap
  97.     @sprite[index].x = @commands[index][1]
  98.     @sprite[index].y = @commands[index][2]
  99.     @sprite[index].index = index
  100.     if @sprite[index].index != self.index
  101.       @sprite[index].color = Color.new(0,0,0,100)
  102.     else
  103.       @sprite[index].color = Color.new(0,0,0,0)
  104.     end
  105.     @dash.push(index)
  106.   end
  107.   #--------------------------------------------------------------------------
  108.   # ● 刷新图片项目
  109.   #--------------------------------------------------------------------------
  110.   def update_item
  111.     if @type == 2
  112.     for index in @dash
  113.      if @sprite[index] != nil
  114.       top_x = @sprite[index].x
  115.       top_y = @sprite[index].y
  116.       mouse_x, mouse_y = Mouse.get_mouse_pos
  117.       bottom_x = top_x + @sprite[index].bitmap.width
  118.       bottom_y = top_y + @sprite[index].bitmap.height
  119.       if (mouse_x > top_x) and (mouse_y > top_y) and
  120.            (mouse_x < bottom_x) and (mouse_y < bottom_y)
  121.            self.index = @sprite[index].index
  122.            if @move_index != self.index
  123.            Se.ok
  124.            @move_index = self.index
  125.          end
  126.       end
  127.       if @sprite[index].index != self.index
  128.         @sprite[index].color = Color.new(0,0,0,100)
  129.       else
  130.         @sprite[index].color = Color.new(0,0,0,0)
  131.       end
  132.     end
  133.     end
  134.     elsif @type == 1
  135.      for index in @dash
  136.         if @sprite[index].index != self.index
  137.          @sprite[index].color = Color.new(0,0,0,100)
  138.        else
  139.         @sprite[index].color = Color.new(0,0,0,0)
  140.        end
  141.      end  
  142.    end
  143.   end
  144.   #--------------------------------------------------------------------------
  145.   # ● 图片项目无效化
  146.   #     index : 项目编号
  147.   #--------------------------------------------------------------------------
  148.   def disable_item(index)
  149.     @sprite[index].color = Color.new(0,0,0,100)
  150.   end
  151.   #--------------------------------------------------------------------------
  152.   # ● 图片的显示读取
  153.   #--------------------------------------------------------------------------
  154.   def visible
  155.     for i in 0...@item_max
  156.       p @sprite[i].visible = visible
  157.     end
  158.   end
  159.   #--------------------------------------------------------------------------
  160.   # ● 图片的显示
  161.   #--------------------------------------------------------------------------
  162.   def visible=(visible)
  163.     for i in 0...@item_max
  164.       @sprite[i].visible = visible
  165.     end
  166.   end
  167.   #--------------------------------------------------------------------------
  168.   # ● 刷新
  169.   #--------------------------------------------------------------------------
  170.   def update
  171.     if @active == true
  172.     super
  173.     if self.active and @item_max > 0 and @index >= 0
  174.       if Input.repeat?(Input::DOWN)
  175.         if (@column_max == 1 and Input.trigger?(Input::DOWN)) or @index < @item_max - @column_max
  176.           $game_system.se_play($data_system.cursor_se)
  177.           @index = @index % @item_max
  178.         end
  179.       end
  180.       if Input.repeat?(Input::UP)
  181.         if (@column_max == 1 and Input.trigger?(Input::UP)) or @index >= @column_max
  182.           $game_system.se_play($data_system.cursor_se)
  183.           @index = @index % @item_max
  184.         end
  185.       end
  186.       if Input.repeat?(Input::RIGHT)
  187.         if @column_max >= 2 and @index < @item_max - 1
  188.           $game_system.se_play($data_system.cursor_se)
  189.           @index += 1
  190.         end
  191.       end
  192.       if Input.repeat?(Input::LEFT)
  193.         if @column_max >= 2 and @index > 0
  194.           $game_system.se_play($data_system.cursor_se)
  195.           @index -= 1
  196.         end
  197.       end
  198.       if Input.repeat?(Input::R)
  199.         if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
  200.           $game_system.se_play($data_system.cursor_se)
  201.           @index = [@index + self.page_item_max, @item_max - 1].min
  202.           self.top_row += self.page_row_max
  203.         end
  204.       end
  205.       if Input.repeat?(Input::L)
  206.         if self.top_row > 0
  207.           $game_system.se_play($data_system.cursor_se)
  208.           @index = [@index - self.page_item_max, 0].max
  209.           self.top_row -= self.page_row_max
  210.         end
  211.       end
  212.     end
  213.     if self.active and @help_window != nil
  214.       update_help
  215.     end
  216.      update_cursor_rect
  217.       update_item
  218.     end
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● 更新光标举行
  222.   #--------------------------------------------------------------------------
  223.   def update_cursor_rect
  224.     if @index < 0
  225.       self.cursor_rect.empty
  226.       return
  227.     end
  228.     row = @index / @column_max
  229.     if row < self.top_row
  230.       self.top_row = row
  231.     end
  232.     if row > self.top_row + (self.page_row_max - 1)
  233.       self.top_row = row - (self.page_row_max - 1)
  234.     end
  235.     cursor_width = self.width / @column_max - 32
  236.     x = @index % @column_max * (cursor_width + 32)
  237.     y = @index / @column_max * 32 - self.oy
  238.     self.cursor_rect.set(x+5000, y, cursor_width, 32)
  239.   end
  240. end
  241. #==============================================================================
  242. # ■ Se
  243. #------------------------------------------------------------------------------
  244. # ■ 音效模块
  245. #==============================================================================
  246. module Se
  247.   def self.ok
  248.     $game_system.se_play($data_system.cursor_se)
  249.   end
  250.   def self.no
  251.     $game_system.se_play($data_system.cancel_se)
  252.   end
  253. end
  254. #==============================================================================
  255. # ■ Sprite
  256. #------------------------------------------------------------------------------
  257. # ■ index 选择光标
  258. #==============================================================================
  259. class Sprite
  260.   attr_accessor :index
  261. end
复制代码

作者: zxc3824    时间: 2011-2-6 12:39
本帖最后由 zxc3824 于 2011-2-6 12:39 编辑

回复 Wind2010 的帖子

我想请问一下,哪一行是插入图片的脚本


zxc3824于2011-2-6 12:59补充以下内容:
看注释?注释看完都没看见啊。是不是读取那里啊?
作者: 步兵中尉    时间: 2011-2-6 16:37
这些站上有的。
除了搜索 “闪电的完整菜单”外还有 最终幻想12的菜单

作者: zxc3824    时间: 2011-2-6 17:27
回复 步兵中尉 的帖子

我知道,但是那些受到素材的影响,我只想问下上面的脚本中,哪里是插入图片,哪里是显示的?
作者: 忧雪の伤    时间: 2011-2-7 13:53
范例
@临时范例@.rar (253.33 KB, 下载次数: 28)



表示干吗不参考轩辕剑菜单。那个多好。

作者: zxc3824    时间: 2011-2-7 21:19
本帖最后由 zxc3824 于 2011-2-7 21:20 编辑

回复 忧雪の伤 的帖子

不能用!只能用在标题,不能用在菜单

作者: 451483807    时间: 2011-2-7 21:35
自己写最方便
作者: zxc3824    时间: 2011-2-7 21:57
本帖最后由 zxc3824 于 2011-2-7 22:02 编辑

回复 忧雪の伤 的帖子

是我写错了脚本,但是我用了鼠标系统,只见它响应,但却不能执行命令



点鼠标不能进入,要键盘
作者: Wind2010    时间: 2011-2-7 23:24
本帖最后由 Wind2010 于 2011-2-7 23:24 编辑

回复 zxc3824 的帖子


Scene_Menu(如果没改名字的话)

update_command
中找到
if Input.trigger?(Input::C)
改成
  1. if Input.trigger?(Input::C) and Mouse.trigger?(Mouse::LEFT)
复制代码

作者: cinderelmini    时间: 2011-2-7 23:30
参考明尼以前发的范例:
http://www.diyrpg.net/bbs/viewthread.php?tid=4655
文件应该还能下载的说.
作者: 「旅」    时间: 2011-2-7 23:41
本帖最后由 「旅」 于 2011-2-8 00:25 编辑
  1. class Window_Command2
  2.   def initialize(x,y,pictures,plus_x,plus_y)
  3.     @sprite = []
  4.     for i in 0...pictures.size
  5.       @sprite[i] = Sprite.new
  6.       @sprite[i].bitmap = RPG::Cache.picture(pictures[i])
  7.       @sprite[i].x = x + plus_x * i
  8.       @sprite[i].y = y + plus_y * i
  9.     end
  10.     @x = x
  11.     @y = y
  12.     @plus_x = plus_x
  13.     @plus_y = plus_y
  14.     @pictures = pictures
  15.    
  16.     # @2:这里可以设置初始化图标,把nil改为0~n试试吧。p.s后面有一个设置,如果
  17.     # 你选择点击左键才更新的话,这里建议不要用nil,nil的话一开始是没有选中项目的。
  18.     @index = nil
  19.    
  20.     if @index != nil
  21.       name = @pictures[@index] + "_Command"
  22.       x,y = @sprite[@index].x,@sprite[i].y
  23.       @sprite[@index].dispose
  24.       @sprite[@index] = Sprite.new
  25.       @sprite[@index].bitmap = RPG::Cache.picture(name)
  26.       @sprite[@index].x = x
  27.       @sprite[@index].y = y
  28.     end
  29.   end
  30.   def update
  31.    
  32.     for i in [email protected]
  33.       @sprite[i].update
  34.     end
  35.    
  36.     # @2:下面可以修改c的数值,1为需要点击左键才可以更新,2是随时更新
  37.     c = 2
  38.    
  39.     case c
  40.     when 1
  41.       bool = Mouse.trigger?(Mouse::LEFT)
  42.     when 2
  43.       bool = true
  44.     end
  45.    
  46.     if bool
  47.       
  48.       if true # 如果这里出现错误,把true改为false试试。(兼容多款鼠标脚本)
  49.         x,y = Mouse.get_mouse_pos
  50.       else
  51.         x,y = Mouse.pos
  52.       end
  53.       
  54.       
  55.           #——这下面都是选中的效果
  56.           #——这里可以调整点击后的坐标
  57.           x2 = 30
  58.           y2 = 30
  59.           #——调整点击后的放大倍数,1.0为原本大小
  60.           zoom_x = 1.0
  61.           zoom_y = 1.0
  62.          
  63.       b = false
  64.       for i in [email protected]
  65.         if x > @sprite[i].x and y > @sprite[i].y and x <= (@sprite[i].x + @sprite[i].bitmap.width) and y <= (@sprite[i].y + @sprite[i].bitmap.height) or
  66.           (@index == i and x > @sprite[i].x - x2 and y > @sprite[i].y - y2 and x <= (@sprite[i].x + @sprite[i].bitmap.width - x2) and y <= (@sprite[i].y + @sprite[i].bitmap.height - y2))
  67.           b = true
  68.           return if @index == i
  69.           name = @pictures[i] + "_Command"
  70.           @sprite[i].dispose
  71.           @sprite[i] = Sprite.new
  72.           @sprite[i].bitmap = RPG::Cache.picture(name)
  73.          
  74.           @sprite[i].x = @x + @plus_x * i + x2
  75.           @sprite[i].y = @y + @plus_y * i + y2
  76.           @sprite[i].zoom_x = zoom_x
  77.           @sprite[i].zoom_y = zoom_y
  78.           #——选中瞬间的效果:下面两个参数分别是颜色和时长
  79.           #——颜色的四个参数分别为红色值、绿色值、绿色值、透明度
  80.           @sprite[i].flash(Color.new(255,0,0,100), 5)
  81.          
  82.           if @index != nil
  83.             @sprite[@index].dispose
  84.             @sprite[@index] = Sprite.new
  85.             @sprite[@index].bitmap = RPG::Cache.picture(@pictures[@index])
  86.             @sprite[@index].x = @x + @plus_x * @index
  87.             @sprite[@index].y = @y + @plus_y * @index
  88.           end
  89.           @index = i
  90.         end
  91.       end
  92.       if b == false and c == 2
  93.         if @index != nil
  94.           @sprite[@index].dispose
  95.           @sprite[@index] = Sprite.new
  96.           @sprite[@index].bitmap = RPG::Cache.picture(@pictures[@index])
  97.           @sprite[@index].x = @x + @plus_x * @index
  98.           @sprite[@index].y = @y + @plus_y * @index
  99.         end
  100.         @index = nil
  101.       end
  102.     end
  103.   end
  104.   def index
  105.     return @index
  106.   end
  107.   def dispose
  108.     for s in @sprite
  109.       s.dispose
  110.     end
  111.   end
  112. end
复制代码
呵呵以前做某个电子书的时候写过类似的东西~~~现在重新拿出来修改了下,另外添加了许多的功能~~~

生成方式如下~前两个是x和y坐标,第三数组是图片名的集合~~最后两个是图片之间的间隙,width宽度和height高度~~
window = Window_Command2.new(100,80,["新手入门","常见问题","疑点难点","其他内容"],180,0)

p.s这里另外添加了两种选择方式~~~里面可以设置~~~
p.s.2里面有一个"_Command"的字符串,这个是生成选中图片的附加后缀名~~~你可以把它改为空字符"",那样的话就是保留为原本的图片~~~


以上是华丽的测试图~~各位有兴趣的同学可以拿去用哟~~~
p.s.3这个脚本使用起来特别简单的哦~~~


「旅」于2011-2-8 11:52补充以下内容:
菜单里不是有一个:
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
把这一句改掉~~
@command_window = Window_Command2.new(100,80,[s1, s2, s3, s4, s5, s6],180,0)
这样就可以了~~~
作者: zxc3824    时间: 2011-2-10 17:54
回复 「旅」 的帖子

晕啊,发布脚本也不告诉我哪里是插入图片选项的。




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