Project1

标题: Sprite dispose后--的问题 [打印本页]

作者: end55rpg    时间: 2012-5-26 19:05
标题: Sprite dispose后--的问题
本帖最后由 end55rpg 于 2012-5-26 20:21 编辑

class Sprite_XXX < RPG::Sprite
  #--------------------------------------------------------------------------
  # ● 初始化对像
  #--------------------------------------------------------------------------
  def initialize()
    super()
    bitmap = Bitmap.new(10,10)
    update
  end
  #--------------------------------------------------------------------------
  # ● 释放
  #--------------------------------------------------------------------------
  def dispose
    if self.bitmap != nil
      self.bitmap.dispose
    end
    super
  end
end
比如建立如上的继承SPRITE的类
然后
array = Array.new(10){Sprite_XXX.new}
array.each{|a|a.dispose if rand(100) <= 50;array.delete(a)}#随即DEL一些.
array[0].disposed? # =>true
我会发现,如果建立的有BITMAP显示出来,那么全部SPRITE图象都会消失....
就这个问题,求继续重新看帖子




我果然记错了....问题在上面= =上

比如下面:
array = Array.new
10.times{|t|s=Sprite.new
                   s.x,s.y = t
                   array.push s}
#=> [Sprite##@$%@#bb0f........sprite%#$fffgew]
存10个进数猪里.........
然后我只要DISPOSE其中任意一个:
array[0].dispose
print array[2].x # =>错误
数组其他的SPRITE操作就会发生sprite ... have disposed!
就会跳错,这是什么原因,怎么改....?

dsu_plus_rewardpost_czw
作者: orzfly    时间: 2012-5-26 19:28
奇怪……
你这样试试
array = (1..10).map { Sprite.new }
作者: Wind2010    时间: 2012-5-26 19:46
  1. array = Array.new
  2. 10.times{|t|s=Sprite.new
  3. s.x,s.y = t,t #
  4. array.push s}
  5. array[0].dispose
  6. print array[2].x
复制代码
测试无报错
作者: end55rpg    时间: 2012-5-26 20:19
@Wind2010@orzfly
@灼眼的夏娜求大大们重新看下问题,我之前问题改了
作者: Wind2010    时间: 2012-5-26 20:51
本帖最后由 Wind2010 于 2012-5-26 23:02 编辑

Sprite_XXX.new.clone这样试试

  1. class Sprite_XXX < RPG::Sprite
  2.   #--------------------------------------------------------------------------
  3.   # ● 初始化对像
  4.   #--------------------------------------------------------------------------
  5.   def initialize(type=0)
  6.     super()
  7.     @type = type
  8.     bitmap = Bitmap.new(10,10)
  9.     update
  10.   end
  11.   #--------------------------------------------------------------------------
  12.   # ● 释放
  13.   #--------------------------------------------------------------------------
  14.   def dispose
  15.     if self.bitmap != nil
  16.       self.bitmap.dispose
  17.     end
  18.     super
  19.   end
  20. end
  21. array = Array.new(10){|i|Sprite_XXX.new(i)}
  22. array.each{|a|a.dispose if rand(100) <= 50;array.delete(a)}#随即DEL一些.
  23. p array[0].disposed? # =>true
复制代码





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