作者poga (波卡)
看板Ruby
标题Re: [问题] 区块问题
时间Mon Apr 25 00:21:59 2011
※ 引述《zx123456i (壁虎'.'a)》之铭言:
: 底下是有问题的原始码:
: @sb.reject!{|sb|
: if sb.y<-10
: true
: else
: @enemy.each{|enemy|
: ex=enemy.x;ey=enemy.y
: ew=enemy.w;eh=enemy.h
: if Gosu::distance(sb.x+2,sb.y+5,ex+ew/2,ey+eh/2)<(ew+eh)/2
: sb.hurt(enemy)
: true
: else
: false
: end
: }
: end
: }
问题出在这段程式码没错
你作为reject参数的block,在sb.y < -10的时候会回传true没错,
可是sb.y >= -10的时候呢?
我们都知道,没明确指定回传值的时候,
Ruby会把最後一个statement的return值回传回去
在sb.y >= -10的时候,你的block的最後一个statement是@enemy.each { ... }
each到底会回传什麽东西呢?从irb测试一下就知道了
ruby-1.9.2-p0 > [1,2,3].each { |x| p x }
1
2
3
=> [1, 2, 3]
看到了吗,each的回传值是阵列本身,而阵列在作为真值判断的时候是会被当成true的
所以自然那个子弹就被删掉了
--
难得看到有人在玩Gosu... XD
--
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.25.234.132
1F:推 zx123456i:原来是这样子... 04/25 17:17