def distance(spr,bul = self)
return false if bul.z == 0
if spr.x>bul.x-bul.width-spr.width / $角色判定缩小倍数 and
spr.x<bul.x+bul.width+spr.width / $角色判定缩小倍数 and
spr.y>bul.y-bul.height-spr.height / $角色判定缩小倍数 and
spr.y<bul.y+bul.height+spr.height / $角色判定缩小倍数
return true
else
return false
end
end
以下引用aaaagq于2009-1-20 13:27:32的发言:
写成函数比较好重用。
摘自:http://rpg.blue/viewthread.php?tid=113835
def distance(spr,bul = self)
return false if bul.z == 0
if spr.x>bul.x-bul.width-spr.width / $角色判定缩小倍数 and
spr.x<bul.x+bul.width+spr.width / $角色判定缩小倍数 and
spr.y>bul.y-bul.height-spr.height / $角色判定缩小倍数 and
spr.y<bul.y+bul.height+spr.height / $角色判定缩小倍数
return true
else
return false
end
end
以下引用zmv2000a于2009-1-21 13:03:53的发言:
检测冲撞有多方法,矩形冲撞是最简单,楼主探索精神值得佩服,但是如果一个地图上很多图片要检测碰撞,并且游戏每一祯都要检测,你这种方法就效率很低了,如果硬件不行的朋友,会卡的要死.
@bul_e.each do |bul| #遍历子弹的数组,使每个子弹都付与bul
bul.moving #子弹运动
#子弹与主角的碰撞判定,伤害判定
@enemy_hp += bul.att_spr(@mysprite)
bul.update #子弹显示效果的更新
end
#获得本子弹对spr的伤害
def att_spr(spr)
#子弹碰撞到spr的有效性判定
if distance(spr) and @can_att
@att_n -= 1
if @att_n <= 0
self.x = 1000
self.z = 0
self.animation(nil)
@can_att = false
end
#碰撞有效时运行ruby脚本
if @ruby_att_c != nil
eval(@ruby_att_c)
@ruby_att_c = nil
end
return @dam #返回伤害值
end
return 0
end
#碰撞判定
def distance(spr,bul = self)
return false if bul.z == 0
if spr.x>bul.x-bul.width-spr.width / $角色判定缩小倍数 and
spr.x<bul.x+bul.width+spr.width / $角色判定缩小倍数 and
spr.y>bul.y-bul.height-spr.height / $角色判定缩小倍数 and
spr.y<bul.y+bul.height+spr.height / $角色判定缩小倍数
return true
else
return false
end
end
class Area
attr_reader :x1
attr_reader :y1
attr_reader :x2
attr_reader :y2
def initialize(x1,y1,x2,y2)
@x1,@y1,@x2,@y2 = x1,y1,x2,y2
end
end
#--------------------------------------------------------------------------
# ● 获取矩形
#--------------------------------------------------------------------------
def 取得矩形(x,y,range_x,range_y)
rect = Area.new(@actor.screen_x-range_x,@actor.screen_y-range_y,
@actor.screen_x+range_x,@actor.screen_y)
if Range.new(rect.x1,rect.x2).include?(x) and
Range.new(rect.y1,rect.y2).include?(y)
return true
else
return false
end
end
以下引用hide秀于2009-1-22 9:09:53的发言:
具体参考:
http://rpg.blue/viewthread.php?tid=112482
[本贴由作者于 2009-1-22 9:11:25 最后编辑]
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |