这个程序给Python海龟模块新增了一个叫collide的方法,这样海龟就有了碰撞检测方法了,名字叫collide。
如果要检测两个海龟有没有发生碰撞那么只要用下面的代码即可(t1,t2是海龟)
t1.collide(t2),这句代码会返回两个海龟的重叠区域,是一个矩形对象。
""" 给RawTurtle类新增矩形碰撞方法.py """ import turtle # 导入海龟模块 from rectangle import * # 从矩形模块导入所有命令 def mouse_position(screen): """获取鼠标指针的坐标""" pass return x,y def _collide(self,other): """以矩形碰撞的方式检测和另一个海龟对象有没有发生“碰撞”""" a,b,c,d = self.screen.cv.bbox(self.turtle._item) w = c - a # 算出宽度 h = d - b # 算出高度 rect1 = Rectangle(a,-b,w,h) # 矩形对象 a,b,c,d = self.screen.cv.bbox(other.turtle._item) w = c - a # 算出宽度 h = d - b # 算出高度 rect2 = Rectangle(a,-b,w,h) # 矩形对象 return rect1.overlap(rect2) turtle.RawTurtle.collide = _collide # 新增collide方法 screen = turtle.Screen() # 新建屏幕对象 blue = turtle.Turtle('square') # 新建海龟对象 blue.shapesize(4) # 把海龟变大些 blue.color('blue') # 设为蓝色的 blue.goto(-40,-40) red = turtle.Turtle('square') # 新建红色方块 red.speed(0) # 移动速度为最快 red.penup() # 抬笔 red.shapesize(4) # 放大 red.color('red') # 红色 while True: x,y = mouse_position(screen) red.goto(x,y) # 红色方块跟着鼠标指针移动 r = red.collide(blue) if r: # 如果发生了碰撞那么r不是空值,是一个矩形对象! screen.title('重叠!' + str(r)) else: screen.title('不重叠') screen.update() # 刷新屏幕显示
本程序包括本人编写的rectangle类等三个py源代码文件,如果需要
需要浏览更多吗?
成为会员后,登陆才能继续浏览!联系微信scratch8即可办理会员。
(会员专属:能浏览所有文章,下载所有带链接的Python资源。)