Project1

标题: 鼠标一直走向完美化的其中某些问题. [打印本页]

作者: 白萌奈奈    时间: 2010-11-2 21:42
标题: 鼠标一直走向完美化的其中某些问题.
本帖最后由 白萌奈奈 于 2010-11-2 21:43 编辑

[attach]36029[/attach][attach]36030[/attach]就是鼠标移动过去人物会白了一点鼠标移开人物变回原来。战斗选择敌人或队友的时候也实现这个效果我有一个思路。就是让选中的人闪....如战斗框选到某角色的时候某角色闪一样....把闪变成变白...很难解释。就是让选中的敌人或者角色变白一点..怎么现实这个效果

打.JPG (9.91 KB, 下载次数: 7)

打.JPG

未命名.jpg (13.5 KB, 下载次数: 6)

未命名.jpg

作者: 天洛伊德    时间: 2010-11-2 22:05
提示: 作者被禁止或删除 内容自动屏蔽
作者: david50407    时间: 2010-11-2 22:50
这要碰撞判断
弄不好的话会使游戏速度低下

我自己是建议建表的
先建一张角色图的表用来存放角色能被鼠标碰到的点
接下来就是疯狂判断了 = =|
作者: 白萌奈奈    时间: 2010-11-3 12:17
本帖最后由 白萌奈奈 于 2010-11-3 12:17 编辑

{:nm_3:}........具体是怎么样??..
作者: david50407    时间: 2010-11-3 19:47
因为角色图不是规则几何图形(方形啥的)
所以要先建表 (二维Table)
表内的值就是0或1
0代表角色图中此格为透明, 鼠标指上去时不应该变色
1表示有颜色, 要变色
接下来就像fux2说的 判断鼠标在图像的哪个位置 去表里找是否该变色

建表只是因为get color的速率极慢
预先建好表存放(Cache)以加速
作者: liqunsz    时间: 2010-11-3 20:59
本帖最后由 liqunsz 于 2010-11-3 21:00 编辑

真的无法保证使用效果!请注意!

我记得美兽有一个图片显示加强

那个AVG的精装版里面有移过去闪白的脚本,不过是在鼠标响应图片里面的
  1. #==============================================================================
  2. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  3. #==============================================================================
  4. #格式:显示的cmd图片的命名格式为:
  5. #    cmd调用公共事件编号_名字
  6. #    cmd调用公共事件编号_名字_02 # 此为鼠标经过的图片
  7. #
  8. #即,带有cmd的为可以点击的图片,点击后执行相应的公共事件.....
  9. #不带cmd的图片没任何影响。。。
  10. #==============================================================================
  11. class Game_Picture
  12. def name=(str)
  13.    @name = str
  14. end
  15. end


  16.   class Sprite_Picture
  17.    
  18. # 这里设置闪烁颜色
  19.   FLASH_COLOR = Color.new(255,255,255,0)
  20.   
  21. alias update_old update
  22. def update
  23.    update_old
  24.    begin
  25.    return if  @picture_name[/cmd/].nil? or @picture_name == ""
  26. rescue
  27.    return
  28.    end
  29.    mx,my = Mouse.get_mouse_pos
  30.    lx = self.x - self.ox
  31.    rx = lx + self.bitmap.width
  32.    ty = self.y - self.oy
  33.    by = ty + self.bitmap.height
  34.    if mx < lx or mx > rx or my < ty or my > by or
  35.      self.bitmap.get_pixel(mx-lx,my-ty).alpha == 0
  36.       @picture.finish_flash if @picture.flash?
  37.      @picture.name = @picture.name.split(/_/)[0]+"_"[email protected](/_/)[1]
  38.      return
  39.    end
  40.    if @picture.name.split(/_/)[2].nil?
  41.      picname = @picture.name + "_02"
  42.      #第2张图片不存在的时候不显示
  43.      if FileTest.exist?("Graphics/Pictures/#{picname}.png")
  44.        @picture.name = picname
  45.        picname2 = @picture.name.split(/_/)[1] + "map"
  46.        if FileTest.exist?("Graphics/Pictures/#{picname2}.png")
  47.          $mapname = picname2
  48.          
  49.        end
  50.      else#不存在图片就闪烁
  51.        unless @picture.flash?
  52.         @picture.start_flash(FLASH_COLOR)
  53.       end
  54.      end
  55.    end
  56.    #对话框存在的时候不启动事件
  57.      if Mouse.trigger?(Mouse::LEFT) and !$game_system.map_interpreter.running?
  58.        @picture.name.split(/_/)[0].sub(/cmd([0-9]+)/,"")
  59.          $game_temp.common_event_id = $1.to_i
  60.      end
  61. end
  62. end

  63. #==============================================================================
  64. # 本脚本来自www.66RPG.com,使用和转载请保留此信息
  65. #==============================================================================
复制代码
注意用了
  1. @picture.start_flash(FLASH_COLOR)
复制代码
然后两个改动的脚本,替换原脚本
Game_Picture
  1. #==============================================================================
  2. # ■ Game_Picture
  3. #AVG关于图片属性的一些修改感谢美兽大的图片加强显示
  4. #------------------------------------------------------------------------------
  5. #  处理图片的类。本类在类 Game_Screen ($game_screen)
  6. # 的内部使用。
  7. #==============================================================================

  8. class Game_Picture
  9.   #--------------------------------------------------------------------------
  10.   # ● 定义实例变量
  11.   #--------------------------------------------------------------------------
  12.   #★★---★★---★★---★★---★★---★★---★★---★★#   
  13.   attr_accessor   :number                   # 图片编号
  14.   attr_accessor   :name                     # 文件名
  15.   attr_accessor   :origin                   # 原点
  16.   attr_accessor   :x                        # X 坐标
  17.   attr_accessor   :y                        # Y 坐标
  18.   attr_accessor   :zoom_x                   # X 方向放大率
  19.   attr_accessor   :zoom_y                   # Y 方向放大率
  20.   attr_accessor   :opacity                  # 不透明度
  21.   attr_accessor   :blend_type               # 合成方式
  22.   attr_accessor   :tone                     # 色调
  23.   attr_accessor :angle                    # 旋转角度
  24.   attr_accessor :mirror                   # 翻转  
  25.   attr_accessor :bush_depth               # 繁茂度
  26.   #★★---★★---★★---★★---★★---★★---★★---★★#  
  27.   attr_reader   :flash_color              # 闪烁色#AVG
  28.   #--------------------------------------------------------------------------
  29.   # ● 初始化对像
  30.   #     number : 图片编号
  31.   #--------------------------------------------------------------------------
  32.   def initialize(number)
  33.     @number = number
  34.     @name = ""
  35.     @origin = 0
  36.     @x = 0.0
  37.     @y = 0.0
  38.     @zoom_x = 100.0
  39.     @zoom_y = 100.0
  40.     @opacity = 255.0
  41.     @blend_type = 1
  42.     @duration = 0
  43.     @target_x = @x
  44.     @target_y = @y
  45.     @target_zoom_x = @zoom_x
  46.     @target_zoom_y = @zoom_y
  47.     @target_opacity = @opacity
  48.     @tone = Tone.new(0, 0, 0, 0)
  49.     @tone_target = Tone.new(0, 0, 0, 0)
  50.     @tone_duration = 0
  51.     @angle = 0
  52.     @rotate_speed = 0
  53.     #★★---★★---★★---★★---★★---★★---★★---★★#     
  54.     @move_angle = 0            # 新角度
  55.     @rotate_duration = 0       # 旋转时间
  56.     @mirror = false            # 翻转
  57.     @move_mirror = false       # 翻转标志
  58.     @mirror_duration = 0       # 翻转时间   
  59.     @mirror_duration_half = 0  # 翻转点   
  60.     @mirror_zoom = 0           # 翻转缩放量
  61.     @bush_depth = 0            # 繁茂度
  62.     @move_bush = 0             # 繁茂增量
  63.     @bush_duration = 0          # 繁茂变化时间
  64.     #★★---★★---★★---★★---★★---★★---★★---★★#   
  65.     #AVG
  66.     @flash_color = Color.new(0, 0, 0, 0)
  67.     @flashing = false
  68.   end
  69.   #★★---★★---★★---★★---★★---★★---★★---★★#   
  70.   #--------------------------------------------------------------------------
  71.   # ● 繁茂移动
  72.   #--------------------------------------------------------------------------  
  73.   def bush_move(depth,duration)
  74.       return if duration == 0
  75.       @move_bush = (depth - @bush_depth).to_f / duration
  76.       @bush_duration = duration
  77.       return
  78.   end  
  79.   #--------------------------------------------------------------------------
  80.   # ● 翻转移动
  81.   #--------------------------------------------------------------------------  
  82.   def mir_move(mir,duration)
  83.       return if @mirror == mir
  84.       @mirror_duration_half = duration / 2     
  85.       @mirror_duration = @mirror_duration_half * 2  
  86.       @mirror_zoom = @zoom_x / @mirror_duration_half
  87.       @move_mirror = mir
  88.       return
  89.   end   
  90.   #--------------------------------------------------------------------------
  91.   # ● 旋转移动
  92.   #     angle : 新角度
  93.   #     duration : 时间
  94.   #--------------------------------------------------------------------------  
  95.   def rotate_move(angle,duration)
  96.       @move_angle = (angle - @angle).to_f / duration
  97.       @rotate_duration = duration
  98.       return
  99.   end
  100.   #★★---★★---★★---★★---★★---★★---★★---★★#   
  101.   #AVG
  102.   #--------------------------------------------------------------------------
  103.   # ● 开始图片闪烁
  104.   #     color    : 闪烁颜色
  105.   #--------------------------------------------------------------------------
  106.   def start_flash(color)
  107.     @flash_color = color.clone
  108.     @flashing = true
  109.     @flash_count = 16
  110.     @flash_reverse = false
  111.     @ready_finish = false
  112.   end
  113.   #--------------------------------------------------------------------------
  114.   # ● 闪烁中判定
  115.   #--------------------------------------------------------------------------
  116.   def flash?
  117.     return @flashing
  118.   end
  119.   #--------------------------------------------------------------------------
  120.   # ● 闪烁结束
  121.   #--------------------------------------------------------------------------
  122.   def finish_flash
  123.     @ready_finish = true
  124.   end
  125.   
  126.     def y=(y)
  127.     @y = y
  128.   end
  129.   
  130.   #--------------------------------------------------------------------------
  131.   # ● 显示图片
  132.   #     name         : 文件名
  133.   #     origin       : 原点
  134.   #     x            : X 坐标
  135.   #     y            : Y 坐标
  136.   #     zoom_x       : X 方向放大率
  137.   #     zoom_y       : Y 方向放大率
  138.   #     opacity      : 不透明度
  139.   #     blend_type   : 合成方式
  140.   #--------------------------------------------------------------------------
  141.   def show(name, origin, x, y, zoom_x, zoom_y, opacity, blend_type)
  142.     @name = name
  143.     @origin = origin
  144.     @x = x.to_f
  145.     @y = y.to_f
  146.     @zoom_x = zoom_x.to_f
  147.     @zoom_y = zoom_y.to_f
  148.     @opacity = opacity.to_f
  149.     @blend_type = blend_type
  150.     @duration = 0
  151.     @target_x = @x
  152.     @target_y = @y
  153.     @target_zoom_x = @zoom_x
  154.     @target_zoom_y = @zoom_y
  155.     @target_opacity = @opacity
  156.     @tone = Tone.new(0, 0, 0, 0)
  157.     @tone_target = Tone.new(0, 0, 0, 0)
  158.     @tone_duration = 0
  159.     @angle = 0
  160.     @rotate_speed = 0
  161.   end
  162.   #--------------------------------------------------------------------------
  163.   # ● 移动图片
  164.   #     duration     : 时间
  165.   #     origin       : 原点
  166.   #     x            : X 坐标
  167.   #     y            : Y 坐标
  168.   #     zoom_x       : X 方向放大率
  169.   #     zoom_y       : Y 方向放大率
  170.   #     opacity      : 不透明度
  171.   #     blend_type   : 合成方式
  172.   #--------------------------------------------------------------------------
  173.   def move(duration, origin, x, y, zoom_x, zoom_y, opacity, blend_type)
  174.     @duration = duration
  175.     @origin = origin
  176.     @target_x = x.to_f
  177.     @target_y = y.to_f
  178.     @target_zoom_x = zoom_x.to_f
  179.     @target_zoom_y = zoom_y.to_f
  180.     @target_opacity = opacity.to_f
  181.     @blend_type = blend_type
  182.   end
  183.   #--------------------------------------------------------------------------
  184.   # ● 更改旋转速度
  185.   #     speed : 旋转速度
  186.   #--------------------------------------------------------------------------
  187.   def rotate(speed)
  188.     @rotate_speed = speed
  189.   end
  190.   #--------------------------------------------------------------------------
  191.   # ● 开始更改色调
  192.   #     tone     : 色调
  193.   #     duration : 时间
  194.   #--------------------------------------------------------------------------
  195.   def start_tone_change(tone, duration)
  196.     @tone_target = tone.clone
  197.     @tone_duration = duration
  198.     if @tone_duration == 0
  199.       @tone = @tone_target.clone
  200.     end
  201.   end
  202.   #--------------------------------------------------------------------------
  203.   # ● 消除图片
  204.   #--------------------------------------------------------------------------
  205.   def erase
  206.     @name = ""
  207.   end
  208.   #--------------------------------------------------------------------------
  209.   # ● 刷新画面
  210.   #--------------------------------------------------------------------------
  211.   def update
  212.     if @duration >= 1
  213.       d = @duration
  214.       @x = (@x * (d - 1) + @target_x) / d
  215.       @y = (@y * (d - 1) + @target_y) / d
  216.       @zoom_x = (@zoom_x * (d - 1) + @target_zoom_x) / d
  217.       @zoom_y = (@zoom_y * (d - 1) + @target_zoom_y) / d
  218.       @opacity = (@opacity * (d - 1) + @target_opacity) / d
  219.       @duration -= 1
  220.     end
  221.     if @tone_duration >= 1
  222.       d = @tone_duration
  223.       @tone.red = (@tone.red * (d - 1) + @tone_target.red) / d
  224.       @tone.green = (@tone.green * (d - 1) + @tone_target.green) / d
  225.       @tone.blue = (@tone.blue * (d - 1) + @tone_target.blue) / d
  226.       @tone.gray = (@tone.gray * (d - 1) + @tone_target.gray) / d
  227.       @tone_duration -= 1
  228.     end
  229.     if @rotate_speed != 0
  230.       @angle += @rotate_speed / 2.0
  231.       while @angle < 0
  232.         @angle += 360
  233.       end
  234.       @angle %= 360
  235.     end
  236.    
  237.     #AVG
  238.     if @flashing
  239.       if @flash_reverse
  240.         @flash_count += 1
  241.         @flash_reverse = false if @flash_count >= 16
  242.       else
  243.         @flash_count -= 1
  244.         @flash_reverse = true if @flash_count <= 0
  245.       end
  246.       @flash_color.alpha = (16 - @flash_count) * 10  
  247.       @flashing = false if @ready_finish and @flash_count == 16
  248.     end
  249.    
  250.     #★★---★★---★★---★★---★★---★★---★★---★★#     
  251.     if @rotate_duration > 0
  252.        @angle += @move_angle
  253.        @rotate_duration -= 1
  254.     end
  255.     if @mirror_duration > 0      
  256.        if @move_mirror == @mirror
  257.           @zoom_x += @mirror_zoom         
  258.        else
  259.           @zoom_x -= @mirror_zoom         
  260.        end
  261.        @mirror_duration -= 1
  262.        if @mirror_duration == @mirror_duration_half  
  263.           @mirror = @move_mirror
  264.        end              
  265.     end
  266.     if @bush_duration > 0
  267.        @bush_depth += @move_bush
  268.        @bush_duration -= 1
  269.     end
  270.     #★★---★★---★★---★★---★★---★★---★★---★★#      
  271.   end
  272. end
复制代码
Sprite_Picture
  1. #==============================================================================
  2. # ■ Sprite_Picture
  3. #------------------------------------------------------------------------------
  4. #  显示图片用的活动块。Game_Picture 类的实例监视、
  5. # 活动块状态的自动变化。
  6. #==============================================================================

  7. class Sprite_Picture < Sprite
  8.   #--------------------------------------------------------------------------
  9.   # ● 初始化对像
  10.   #     viewport : 显示端口
  11.   #     picture  : 图片 (Game_Picture)
  12.   #--------------------------------------------------------------------------
  13.   def initialize(viewport, picture)
  14.     super(viewport)
  15.     @picture = picture
  16.     update
  17.   end
  18.   #--------------------------------------------------------------------------
  19.   # ● 释放
  20.   #--------------------------------------------------------------------------
  21.   def dispose
  22.     if self.bitmap != nil
  23.       self.bitmap.dispose
  24.     end
  25.     super
  26.   end
  27.   #--------------------------------------------------------------------------
  28.   # ● 更新画面
  29.   #--------------------------------------------------------------------------
  30.   def update
  31.     super
  32.     #★★---★★---★★---★★---★★---★★---★★---★★#     
  33.     self.mirror = @picture.mirror
  34.     self.bush_depth = @picture.bush_depth
  35.     #★★---★★---★★---★★---★★---★★---★★---★★#  
  36.     # 图片的文件名与当前的情况有差异的情况下
  37.     if @picture_name != @picture.name
  38.       # 将文件名记忆到实例变量
  39.       @picture_name = @picture.name
  40.       # 文件名不为空的情况下
  41.       if @picture_name != ""
  42.         # 获取图片图形
  43.         self.bitmap = RPG::Cache.picture(@picture_name)
  44.       end
  45.     end
  46.     # 文件名是空的情况下
  47.     if @picture_name == ""
  48.       # 将活动块设置为不可见
  49.       self.visible = false
  50.       return
  51.     end
  52.     # 将活动块设置为可见
  53.     self.visible = true
  54.     #★★---★★---★★---★★---★★---★★---★★---★★#     
  55.     # 设置传送原点
  56.     case @picture.origin
  57.     when 0
  58.       self.ox = 0
  59.       self.oy = 0
  60.     when 1
  61.       self.ox = self.bitmap.width / 2
  62.       self.oy = self.bitmap.height / 2
  63.     when 2
  64.       self.ox = self.bitmap.width
  65.       self.oy = self.bitmap.height  
  66.     when 3
  67.       self.ox = self.bitmap.width / 2
  68.       self.oy = self.bitmap.height      
  69.     when 11
  70.       self.ox = $game_variables[76].to_f / 100 * self.bitmap.width
  71.       self.oy = $game_variables[77].to_f / 100 * self.bitmap.height  
  72.     when 12
  73.       self.ox = $game_variables[76]
  74.       self.oy = $game_variables[77]
  75.     end
  76.     #★★---★★---★★---★★---★★---★★---★★---★★#
  77.     # 设置活动块的坐标
  78.     self.x = @picture.x
  79.     self.y = @picture.y
  80.     self.z = @picture.number
  81.     # 设置放大率、不透明度、合成方式
  82.     self.zoom_x = @picture.zoom_x / 100.0
  83.     self.zoom_y = @picture.zoom_y / 100.0
  84.     self.opacity = @picture.opacity
  85.     self.blend_type = @picture.blend_type
  86.     # 设置旋转角度、色调
  87.     self.angle = @picture.angle
  88.     self.tone = @picture.tone
  89.     # 设置闪烁色#AVG
  90.     self.flash(@picture.flash_color, 1) if @picture.flash?
  91.   end
  92. end
复制代码
应该就是改动了这些……有问题的话我再找找吧
作者: 白萌奈奈    时间: 2010-11-3 23:56
{:nm_3:}图片??什么的。我是说地图上的角色呢.....
作者: 白萌奈奈    时间: 2010-11-4 11:58
{:nm_3:}他的是显示图片的修改把?
作者: david50407    时间: 2010-11-4 22:47
回复 liqunsz 的帖子

bitmap#get_pixel 啥的很花时间的
不能做即时判断
作者: liqunsz    时间: 2010-11-5 18:36
david50407 发表于 2010-11-4 22:47
回复 liqunsz 的帖子

bitmap#get_pixel 啥的很花时间的

学习了呢……本身不太了解……希望前辈给出更好的方法!
看着功能像就拽了一个上来囧




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