特金特弹跳球 我目前正在大学学习计算机科学,这是一个基础年,所以我对编程很感兴趣,我们正在做一个Python单元,我在课程内容之外做我自己的项目。
我一直在尝试使用Tkinter制作弹跳球动画。然而,我有两个球,红色和绿色,出于某种原因,它们在反弹之前似乎没有接触到画布的顶部或左侧,与边缘的距离似乎不断增加特金特弹跳球 我目前正在大学学习计算机科学,这是一个基础年,所以我对编程很感兴趣,我们正在做一个Python单元,我在课程内容之外做我自己的项目。,python,tkinter,tkinter-canvas,Python,Tkinter,Tkinter Canvas,我一直在尝试使用Tkinter制作弹跳球动画。然而,我有两个球,红色和绿色,出于某种原因,它们在反弹之前似乎没有接触到画布的顶部或左侧,与边缘的距离似乎不断增加 from tkinter import * import random import time root = Tk() def balls(): #speeds xspeed = 5 yspeed = 3 canvas = Canvas(root, width = 1000, height = 1
from tkinter import *
import random
import time
root = Tk()
def balls():
#speeds
xspeed = 5
yspeed = 3
canvas = Canvas(root, width = 1000, height = 1000, bg="grey")
root.title("collision detection")
canvas.grid()
greenBall = canvas.create_oval(5, 5, 35, 35, fill="green")
redBall = canvas.create_oval(970, 970, 1000, 1000, fill="red")
while True:
#greenball
canvas.move(greenBall, xspeed, yspeed)
posgreen = canvas.coords(greenBall)
if posgreen[3] >= 1000 or posgreen[1] <= 0:
yspeed = -yspeed
if posgreen[2] >= 1000 or posgreen[0] <= 0:
xspeed = -xspeed
#redball
canvas.move(redBall, -xspeed, -yspeed)
posred = canvas.coords(redBall)
if posred[3] >= 1000 or posred[1] <= 0:
yspeed = -yspeed
if posred[2] >= 1000 or posred[0] <= 0:
xspeed = -xspeed
root.update()
time.sleep(0.01)
pass
balls()
root.mainloop()
从tkinter导入*
随机输入
导入时间
root=Tk()
定义球():
#速度
xspeed=5
Y速度=3
画布=画布(根,宽度=1000,高度=1000,bg=“灰色”)
root.title(“碰撞检测”)
canvas.grid()
绿球=画布。创建椭圆(5,5,35,35,fill=“绿色”)
redBall=canvas.create_oval(97097010001000,fill=“red”)
尽管如此:
#绿球
canvas.move(greenBall、xspeed、yspeed)
posgreen=canvas.coords(绿色球)
如果posgreen[3]>=1000或posgreen[1]=1000或posgreen[0]=1000或posred[1]=1000或posred[0]我在您的代码中做了一些修改。问题在于速度定义,在代码中,速度全局更改2次,而不是每个球的每次更改。
给你:
from tkinter import *
import time
root = Tk()
def balls():
# define speed for each ball
green_x_speed, green_y_speed = [5,3]
red_x_speed, red_y_speed = [5,3]
canvas = Canvas(root, width=800, height=800, bg="grey")
root.title("collision detection")
canvas.grid()
green_ball = canvas.create_oval(20, 20, 30, 10, fill="green")
red_ball = canvas.create_oval(780, 780, 790, 790, fill="red")
while True:
# green ball
canvas.move(green_ball, green_x_speed, green_y_speed)
green_coordinates = canvas.coords(green_ball)
if green_coordinates[3] >= 800 or green_coordinates[1] <= 0:
green_y_speed = -green_y_speed
if green_coordinates[2] >= 800 or green_coordinates[0] <= 0:
green_x_speed = -green_x_speed
# red ball
canvas.move(red_ball, red_x_speed, red_y_speed)
red_coordinates = canvas.coords(red_ball)
if red_coordinates[3] >= 800 or red_coordinates[1] <= 0:
red_y_speed = -red_y_speed
if red_coordinates[2] >= 800 or red_coordinates[0] <= 0:
red_x_speed = -red_x_speed
time.sleep(0.01)
root.update()
balls()
root.mainloop()
从tkinter导入*
导入时间
root=Tk()
定义球():
#定义每个球的速度
绿x_速度,绿y_速度=[5,3]
红色x_速度,红色y_速度=[5,3]
画布=画布(根,宽度=800,高度=800,bg=“灰色”)
root.title(“碰撞检测”)
canvas.grid()
绿色球=画布。创建椭圆形(20,20,30,10,fill=“绿色”)
红色球=画布。创建椭圆形(780780790790,fill=“红色”)
尽管如此:
#绿球
画布。移动(绿色球,绿色x\u速度,绿色y\u速度)
绿色坐标=canvas.coords(绿色球)
如果绿色坐标[3]>=800或绿色坐标[1]=800或绿色坐标[0]=800或红色坐标[1]=800或红色坐标[0]@BryanOakley添加了带有解释的文本,我将在
和
睡眠时将重新写入在之后使用的函数中while
和sleep
不应与tk
位于同一线程中。他们封锁了主环路。