Python 如何实现碰撞检测?
我很困惑我的教授很困惑,我需要为一个项目这样做,当检测到碰撞时,分数会上升。你的半径是20。在循环内部,只需测试sqrg和blx之间的欧几里德距离是否在20以内。下面是一个基于代码的简化示例。它测量两个移动对象中心之间的距离,以确定是否发生碰撞。如果你设法让球击中正方形,球应该直接弹起:Python 如何实现碰撞检测?,python,python-3.x,collision-detection,zelle-graphics,Python,Python 3.x,Collision Detection,Zelle Graphics,我很困惑我的教授很困惑,我需要为一个项目这样做,当检测到碰撞时,分数会上升。你的半径是20。在循环内部,只需测试sqrg和blx之间的欧几里德距离是否在20以内。下面是一个基于代码的简化示例。它测量两个移动对象中心之间的距离,以确定是否发生碰撞。如果你设法让球击中正方形,球应该直接弹起: from graphics import* import time import random def main(): numx=random.randint(10,700) wn=Gr
from graphics import*
import time
import random
def main():
numx=random.randint(10,700)
wn=GraphWin("AK",700,700)
wn.setBackground("white")
msg=Text(Point(25,30),"Score")
msg.setSize(12)
msg.setTextColor('blue')
msg.draw(wn)
inch=Entry(Point(60,30),2)
inch.setFill('white')
inch.draw(wn)
sqrg=Rectangle(Point(330,650),Point(430,665))
sqrg.setFill("red")
sqrg.draw(wn)
blx=Circle(Point(numx,80),20)
blx.setFill("blue")
blx.draw(wn)
xval=10
yval=0
wn.getMouse()
for i in range(150):
sqrg.move(xval,yval)
symbl=wn.checkKey()
if symbl=="Right":
xval=10
yval=0
if symbl=="Left":
xval=-10
yval=0
time.sleep(0.08)
blx.move(0,20)
main()
来自随机导入randint
从时间上导入睡眠
从图形导入*
def距离(p1、p2):
返回((p2.x-p1.x)**2+(p2.y-p1.y)**2)**0.5
wn=图形宽度(“AK”,700700)
sqrg=矩形(点(325625),点(375675))
sqrg.setFill(“红色”)
sqrg.图纸(西)
numx=randint(10700)
blx=圆(点(numx,80),20)
blx.setFill(“蓝色”)
blx.draw(西九龙)
xval,yval=10,0
b标题=1
wn.getMouse()
对于范围(150)内的i:
sqrg.移动(xval,yval)
如果距离(blx.getCenter(),sqrg.getCenter())小于25:
B标题*=-1
symbl=wn.checkKey()
如果symbl==“右”:
xval=10
elif symbl==“左”:
xval=-10
睡眠(0.1)
blx.移动(0,标题*20)
Cleary不是一个可行的游戏,而是一个碰撞检测的演示。看起来,如果您知道sqrg和blx的位置以及尺寸,您应该能够确定这些点是否与每次迭代相交。
from random import randint
from time import sleep
from graphics import *
def distance(p1, p2):
return ((p2.x - p1.x) ** 2 + (p2.y - p1.y) ** 2) ** 0.5
wn = GraphWin("AK", 700, 700)
sqrg = Rectangle(Point(325, 625), Point(375, 675))
sqrg.setFill("red")
sqrg.draw(wn)
numx = randint(10, 700)
blx = Circle(Point(numx, 80), 20)
blx.setFill("blue")
blx.draw(wn)
xval, yval = 10, 0
bheading = 1
wn.getMouse()
for i in range(150):
sqrg.move(xval, yval)
if distance(blx.getCenter(), sqrg.getCenter()) < 25:
bheading *= -1
symbl = wn.checkKey()
if symbl == "Right":
xval = 10
elif symbl == "Left":
xval = -10
sleep(0.1)
blx.move(0, bheading * 20)