Project1

标题: 关于图片选择项的做法 [打印本页]

作者: xs801272    时间: 2011-2-4 18:47
标题: 关于图片选择项的做法
我想做个两个选项的选择项   用2张图片来做选项    大概就是两张图片一左一右  停留在哪个选项上  那个选项的图片能有一层闪烁效果   我自己试着用事件做了看看  但是弄的乱七八糟的    我不太会用脚本  也想尽量用事件做出来  求教有事件高人指导下嘛
作者: 忧雪の伤    时间: 2011-2-4 18:51
  1. #==============================================================================
  2. # ■ Window_Picture_Command
  3. #------------------------------------------------------------------------------
  4. #    创建一个图片按钮的窗口类。
  5. #==============================================================================
  6. class Window_Picture_Command < Window_Selectable
  7.   #--------------------------------------------------------------------------
  8.   # ● 初始化对像
  9.   #     width    : 窗口的宽
  10.   #     commands : 命令字符串序列
  11.   #--------------------------------------------------------------------------
  12.   def initialize(commands,type=1)
  13.     # 由命令的个数计算出窗口的高
  14.     super(0, 0, 640, 480)
  15.     # self.z = 9999
  16.     @item_max = commands.size
  17.     @commands = commands
  18.     @dash = []
  19.     @sprite = []
  20.     @type = type
  21.     @move_index = self.index
  22.     self.opacity = 0
  23.     self.contents = Bitmap.new(width - 32, @item_max * 32)
  24.     refresh
  25.     self.index = 0
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 刷新
  29.   #--------------------------------------------------------------------------
  30.   def refresh
  31.     self.contents.clear
  32.     for i in 0...@item_max
  33.       draw_picture_item(i, @type)
  34.     end
  35.   end
  36.   #--------------------------------------------------------------------------
  37.   # ● 释放
  38.   #--------------------------------------------------------------------------
  39.   def dispose
  40.     super
  41.     for index in @dash
  42.      if @sprite[index] != nil
  43.        @sprite[index].dispose
  44.        @sprite[index].bitmap.dispose
  45.      end
  46.     end
  47.   end  
  48.   #--------------------------------------------------------------------------
  49.   # ● 描绘图片项目
  50.   #     index : 项目编号
  51.   #     type  : 描绘类型
  52.   #     type = 1 只支持键盘
  53.   #     type = 2 双面支持
  54.   #--------------------------------------------------------------------------
  55.   def draw_picture_item(index, type)
  56.     @sprite[index] = Sprite.new
  57.     if @commands[index][0] == nil
  58.       p "图片名设置有误"
  59.     end
  60.     if @commands[index][1] == nil
  61.       p "图片X坐标设置有误"
  62.     end
  63.     if @commands[index][2] == nil
  64.       p "图片Y坐标设置有误"
  65.     end
  66.     bitmap = RPG::Cache.picture("../Commands/" + @commands[index][0])
  67.     @sprite[index].bitmap = bitmap
  68.     @sprite[index].x = @commands[index][1]
  69.     @sprite[index].y = @commands[index][2]
  70.     # @sprite[index].z = 999999
  71.     @sprite[index].index = index
  72.     if @sprite[index].index != self.index
  73.       @sprite[index].color = Color.new(0,0,0,100)
  74.     else
  75.       @sprite[index].color = Color.new(0,0,0,0)
  76.     end
  77.     @dash.push(index)
  78.   end
  79.   #--------------------------------------------------------------------------
  80.   # ● 刷新图片项目
  81.   #--------------------------------------------------------------------------
  82.   def update_item
  83.    if @type == 2
  84.     for index in @dash
  85.      if @sprite[index] != nil
  86.       top_x = @sprite[index].x
  87.       top_y = @sprite[index].y
  88.       bottom_x = top_x + @sprite[index].bitmap.width
  89.       bottom_y = top_y + @sprite[index].bitmap.height
  90.       if ($mouse_x > top_x) and ($mouse_y > top_y) and
  91.            ($mouse_x < bottom_x) and ($mouse_y < bottom_y)
  92.            self.index = @sprite[index].index
  93.            if @move_index != self.index
  94.            Se.ok
  95.            @move_index = self.index
  96.          end
  97.       end
  98.       if @sprite[index].index != self.index
  99.         @sprite[index].color = Color.new(0,0,0,100)
  100.       else
  101.         @sprite[index].color = Color.new(0,0,0,0)
  102.       end
  103.     end
  104.     end
  105.     elsif @type == 1
  106.      for index in @dash
  107.         if @sprite[index].index != self.index
  108.          @sprite[index].color = Color.new(0,0,0,100)
  109.        else
  110.         @sprite[index].color = Color.new(0,0,0,0)
  111.        end
  112.      end  
  113.     end
  114.   end
  115.   #--------------------------------------------------------------------------
  116.   # ● 图片项目无效化
  117.   #     index : 项目编号
  118.   #--------------------------------------------------------------------------
  119.   def disable_item(index)
  120.     @sprite[index].color = Color.new(0,0,0,100)
  121.   end
  122.   #--------------------------------------------------------------------------
  123.   # ● 刷新
  124.   #--------------------------------------------------------------------------
  125.   alias window_picture_command_update update
  126.   def update
  127.     window_picture_command_update
  128.     update_item
  129.   end
  130.   #--------------------------------------------------------------------------
  131.   # ● 更新光标举行
  132.   #--------------------------------------------------------------------------
  133.   def update_cursor_rect
  134.     if @index < 0
  135.       self.cursor_rect.empty
  136.       return
  137.     end
  138.     row = @index / @column_max
  139.     if row < self.top_row
  140.       self.top_row = row
  141.     end
  142.     if row > self.top_row + (self.page_row_max - 1)
  143.       self.top_row = row - (self.page_row_max - 1)
  144.     end
  145.     cursor_width = self.width / @column_max - 32
  146.     x = @index % @column_max * (cursor_width + 32)
  147.     y = @index / @column_max * 32 - self.oy
  148.     self.cursor_rect.set(x+5000, y, cursor_width, 32)
  149.   end
  150. end
  151. #==============================================================================
  152. # ■ Se
  153. #------------------------------------------------------------------------------
  154. # ■ 音效模块
  155. #==============================================================================
  156. module Se
  157.   def self.ok
  158.     $game_system.se_play($data_system.cursor_se)
  159.   end
  160.   def self.no
  161.     $game_system.se_play($data_system.cancel_se)
  162.   end
  163. end
  164. #==============================================================================
  165. # ■ Sprite
  166. #------------------------------------------------------------------------------
  167. # ■ index 选择光标
  168. #==============================================================================
  169. class Sprite
  170.   attr_accessor :index
  171. end
复制代码
事件……长篇大论呢,还是脚本吧。

作者: 熊猫    时间: 2011-2-4 20:21
如LZ所愿,事件版奉上。

这个有可能有些缀余成分,几年前的那个我忘记我咋写的了...那个是5个选项。

不过这个不能闪烁,如果要闪烁的话,应该也可以,那就比较复杂了。LZ可以在此基础上进行修改,实现自己想要的功能。

NEWTEST.rar

204.77 KB, 下载次数: 390


作者: xs801272    时间: 2011-2-5 17:53
由于我做的是AVG。。所以。。肯定是在地图上的。。




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