Project1

标题: 想做个荧光飘起的效果 [打印本页]

作者: clear仔    时间: 2015-8-23 00:29
标题: 想做个荧光飘起的效果
想在标题做个荧光缓慢飘起或者散开的效果,然后自己糊了一下代码之后再TITLE里调用UPDATE,发现虽然没有报错但是一点效果都没有。
RUBY 代码复制
  1. class Fire_Flies < Sprite
  2.   def initialize(type)#rise:1   spread :2
  3.     super(nil)
  4.     @xadd_count = 0.0
  5.     @yadd_count = 0.0
  6.     @oadd_count = 0.0
  7.     @life = 300 - rand(100)
  8.     @during = 0
  9.     @type = type
  10.     case @type
  11.     when 1
  12.      @aim = [0,rand(30)+100]
  13.      @speed_x = 0.0#f
  14.      @speed_y = @aim[1].to_f/@life#f
  15.      x = rand(640)
  16.      hue = rand(360)
  17.      zoom = rand(0)
  18.  
  19.      self.bitmap = Bitmap.new("Graphics/Pictures/fireflies.png")
  20.      self.ox = self.bitmap.width/2
  21.      self.oy = 0
  22.      self.opacity = 250
  23.      self.bitmap.hue_change(hue)
  24.      self.x = x
  25.      self.y = 480
  26.      self.zoom_x = zoom
  27.      self.zoom_y = zoom
  28.  
  29.     when 2
  30.       @aim = [rand(30)+50,rand(30)+50]
  31.       @speed_x = @aim[0].to_f/@life#f
  32.       @speed_y = @aim[1].to_f/@life#f
  33.       zoom = rand(0)
  34.       self.bitmap = Bitmap.new("Graphics/Pictures/fireflies.png")
  35.       self.ox = self.bitmap.width/2
  36.       self.oy = self.bitmap.height/2
  37.       self.opacity = 1
  38.       self.x = Graphics.width/2
  39.       self.y = Graphics.width/2
  40.       self.zoom_x = zoom
  41.       self.zoom_y = zoom
  42.  
  43.     end
  44.   end
  45.  
  46.   def fireflies_update
  47.     @xadd_count += @speed_x
  48.     @yadd_count += @speed_y
  49.     @oadd_count += 250.0/@life
  50.     if @xadd_count >= 1
  51.      self.x += @xadd_count
  52.      @xadd_count -= 1
  53.     end
  54.     if @yadd_count >= 1
  55.      self.x += @yadd_count
  56.      @yadd_count -= 1
  57.     end
  58.     if @oadd_count >= 1
  59.       if @during < @life / 3 and @type == 2
  60.        self.opacity += @oadd_count
  61.       else
  62.        self.opacity -= @oadd_count
  63.       end
  64.  
  65.      @oadd_count -= 1
  66.    end
  67.    @during += 1
  68.    self.dispose if @during == @life
  69. end
  70. end


在update里大概是这样调用的(自己删掉了……)
if rand(50) == 10
@light_list.push(Fireflies.new(1))#(初始化好了的)
end
for i in @light_list
i.fireflies_update
end

没有任何效果…………这是怎么回事?
作者: 个快快    时间: 2015-8-23 08:18
本帖最后由 个快快 于 2015-8-23 10:45 编辑
  1. class Fire_Flies < Sprite
  2.   def initialize(type)#rise:1   spread :2
  3.     super(nil)
  4.     @xadd_count = 0.0
  5.     @yadd_count = 0.0
  6.     @oadd_count = 0.0
  7.     @life = 300 - rand(100)
  8.     @during = 0
  9.     @type = type
  10.     case @type
  11.     when 1
  12.      @aim = [0,rand(30)+100]
  13.      @speed_x = 0.0#f
  14.      @speed_y = @aim[1].to_f/@life#f
  15.      x = rand(640)
  16.      hue = rand(360)
  17.      zoom = rand(0)

  18.      self.bitmap = Bitmap.new("Graphics/Pictures/fireflies.png")
  19.      self.ox = self.bitmap.width/2
  20.      self.oy = 0
  21.      self.opacity = 250
  22.      self.bitmap.hue_change(hue)
  23.      self.x = x
  24.      self.y = 480 - self.bitmap.height
  25.      self.zoom_x = zoom
  26.      self.zoom_y = zoom

  27.     when 2
  28.       @aim = [rand(30)+50,rand(30)+50]
  29.       @speed_x = @aim[0].to_f/@life#f
  30.       @speed_y = @aim[1].to_f/@life#f
  31.       zoom = rand(0)
  32.       self.bitmap = Bitmap.new("Graphics/Pictures/fireflies.png")
  33.       self.ox = self.bitmap.width/2
  34.       self.oy = self.bitmap.height/2
  35.       self.opacity = 1
  36.       self.x = Graphics.width/2
  37.       self.y = Graphics.width/2
  38.       self.zoom_x = zoom
  39.       self.zoom_y = zoom

  40.     end
  41.   end

  42.   def fireflies_update
  43.     @xadd_count += @speed_x
  44.     @yadd_count += @speed_y
  45.     @oadd_count += 250.0/@life
  46.     if @xadd_count >= 1
  47.      self.x += @xadd_count
  48.      @xadd_count -= 1
  49.     end
  50.     if @yadd_count >= 1
  51.      self.x += @yadd_count
  52.      @yadd_count -= 1
  53.     end
  54.     if @oadd_count >= 1
  55.       if @during < @life / 3 and @type == 2
  56.        self.opacity += @oadd_count
  57.       else
  58.        self.opacity -= @oadd_count
  59.       end

  60.      @oadd_count -= 1
  61.    end
  62.    @during += 1
  63.    #self.dispose if @during == @life
  64. end
  65. end
复制代码
我把你的dispose注释掉了,dispose后再执行update真的没问题?所以这个回收机制楼主还是需要好好想想的。
另外不显示是y太低导致的。
作者: clear仔    时间: 2015-8-23 14:20
个快快 发表于 2015-8-23 08:18
我把你的dispose注释掉了,dispose后再执行update真的没问题?所以这个回收机制楼主还是需要好好想想的。
...

关于dispose,像这样的如果在数组里加入一个个实例,那如果把其中一个dispose掉那么在这个位置上还有没有元素?
也就是说
a = Array.new
3.times { |i| a.push(Sprite.new) }
a[1].dispose
此时a是[实例1,实例3]还是 [实例1,实例2,实例3] 还是[实例1,nil,实例3]

作者: 个快快    时间: 2015-8-23 15:38
clear仔 发表于 2015-8-23 14:20
关于dispose,像这样的如果在数组里加入一个个实例,那如果把其中一个dispose掉那么在这个位置上还有没有 ...

[实例1,实例2,实例3]
但是这个实例2明显不会再显示了。dispose并不是把他变成Nil,只是销毁渲染的部分,所以还是存在的。
作者: clear仔    时间: 2015-8-23 20:25
个快快 发表于 2015-8-23 15:38
[实例1,实例2,实例3]
但是这个实例2明显不会再显示了。dispose并不是把他变成Nil,只是销毁渲染的部分 ...

所以只是在数组里还有个位置但是实际并不占用内存了是吗。谢谢解答




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