Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
特金特弹跳球 我目前正在大学学习计算机科学,这是一个基础年,所以我对编程很感兴趣,我们正在做一个Python单元,我在课程内容之外做我自己的项目。_Python_Tkinter_Tkinter Canvas - Fatal编程技术网

特金特弹跳球 我目前正在大学学习计算机科学,这是一个基础年,所以我对编程很感兴趣,我们正在做一个Python单元,我在课程内容之外做我自己的项目。

特金特弹跳球 我目前正在大学学习计算机科学,这是一个基础年,所以我对编程很感兴趣,我们正在做一个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

我一直在尝试使用Tkinter制作弹跳球动画。然而,我有两个球,红色和绿色,出于某种原因,它们在反弹之前似乎没有接触到画布的顶部或左侧,与边缘的距离似乎不断增加

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
位于同一线程中。他们封锁了主环路。