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
array = Array.new
10.times{|t|s=Sprite.new
s.x,s.y = t,t #
array.push s}
array[0].dispose
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这样试试
class Sprite_XXX < RPG::Sprite
#--------------------------------------------------------------------------
# ● 初始化对像
#--------------------------------------------------------------------------
def initialize(type=0)
super()
@type = type
bitmap = Bitmap.new(10,10)
update
end
#--------------------------------------------------------------------------
# ● 释放
#--------------------------------------------------------------------------
def dispose
if self.bitmap != nil
self.bitmap.dispose
end
super
end
end
array = Array.new(10){|i|Sprite_XXX.new(i)}
array.each{|a|a.dispose if rand(100) <= 50;array.delete(a)}#随即DEL一些.
p array[0].disposed? # =>true
复制代码
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1