【发布时间】:2015-10-18 15:56:01
【问题描述】:
所以我制作了一个“游戏”,它有 2 个球,一个绿球和一个红球,您可以移动红球,但是当它与绿球碰撞时,我希望它通过在安慰!这是我的代码。
__author__ = 'Zac'
from Tkinter import *
from random import randint
class Application:
def circle(self, r, x, y):
return (x-r, y-r, x+r, y+r)
def square(self, s, x, y):
return (x, y, s, s)
def __init__(self, canvas, r, x, y, **kwargs):
self.canvas = canvas
self.r = r
self.x = x
self.y = y
self.ball = canvas.create_oval(self.circle(r, x, y), **kwargs)
root = Tk()
canvas = Canvas(root, width = 1000, height = 1000)
canvas.pack()
ball1 = Application(canvas, 20, 50, 50, fill='red')
ball2 = Application(canvas, 30, 200, 250, fill='green')
def forward(event):
canvas.delete(ball1.ball)
ball1.y -= 5
ball1.ball = canvas.create_oval(ball1.circle(ball1.r, ball1.x, ball1.y), fill='red')
def backward(event):
canvas.delete(ball1.ball)
ball1.y += 5
ball1.ball = canvas.create_oval(ball1.circle(ball1.r, ball1.x, ball1.y), fill='red')
def left(event):
canvas.delete(ball1.ball)
ball1.x -= 5
ball1.ball = canvas.create_oval(ball1.circle(ball1.r, ball1.x, ball1.y), fill='red')
def right(event):
canvas.delete(ball1.ball)
ball1.x += 5
ball1.ball = canvas.create_oval(ball1.circle(ball1.r, ball1.x, ball1.y), fill='red')
root.bind('<w>', forward)
root.bind('<s>', backward)
root.bind('<a>', left)
root.bind('<d>', right)
root.mainloop()
【问题讨论】:
-
您将需要编写一个函数来检查对象是否足够接近可以触摸,然后在每次移动结束时调用该函数。
-
为此,您创建一个假想的直角三角形,斜边是球中心之间的距离。然后,您可以得到球的 x 坐标之间的 x 边=差异,y 边也一样,并使用标准直角三角形公式 a2+b2=c**2 求距离中心之间。如果它小于半径之和,则存在碰撞。
-
@CurlyJoe 你能举个例子吗,因为我觉得这很难理解:P
-
向前、向后、向左、向右的功能都应该在课堂上,所以每个球都有自己的一套运动功能。然后,您可以将其他键绑定到第二个球,或者添加一个额外的事件,将绑定从一个球更改为下一个球。
-
x_diff=abs(ball2.x-ball1.x)。对 y 也一样。该网站更改了上面的公式,但它是 a^2+b^2=c^2