Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.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 让球永远在屏幕上弹跳? 从Tkinter导入* window=Tk() 画布=画布(窗口,宽度=500,高度=500,背景=“绿色”) canvas.pack() x0=225 y0=225 x1=275 y1=275 速度x=2 速度y=3 ball=canvas.创建椭圆(x0,y0,x1,y1,fill=“blue”,tag='ball') 尽管如此: 画布移动(“球”,速度x,速度y) 画布。之后(30) canvas.update() 如果x1>=500: 速度x=-2 如果x0=0: 速度y=2 如果y0_Python_Tkinter - Fatal编程技术网

Python 让球永远在屏幕上弹跳? 从Tkinter导入* window=Tk() 画布=画布(窗口,宽度=500,高度=500,背景=“绿色”) canvas.pack() x0=225 y0=225 x1=275 y1=275 速度x=2 速度y=3 ball=canvas.创建椭圆(x0,y0,x1,y1,fill=“blue”,tag='ball') 尽管如此: 画布移动(“球”,速度x,速度y) 画布。之后(30) canvas.update() 如果x1>=500: 速度x=-2 如果x0=0: 速度y=2 如果y0

Python 让球永远在屏幕上弹跳? 从Tkinter导入* window=Tk() 画布=画布(窗口,宽度=500,高度=500,背景=“绿色”) canvas.pack() x0=225 y0=225 x1=275 y1=275 速度x=2 速度y=3 ball=canvas.创建椭圆(x0,y0,x1,y1,fill=“blue”,tag='ball') 尽管如此: 画布移动(“球”,速度x,速度y) 画布。之后(30) canvas.update() 如果x1>=500: 速度x=-2 如果x0=0: 速度y=2 如果y0,python,tkinter,Python,Tkinter,您的问题是一个非常简单的逻辑问题 这是你写的: from Tkinter import * window = Tk() canvas = Canvas(window, width=500, height=500, background="green") canvas.pack() x0 = 225 y0 = 225 x1 = 275 y1 = 275 speed_x = 2 speed_y = 3 ball = canvas.create_oval(x0,y0,x1,y1,fill="blu

您的问题是一个非常简单的逻辑问题

这是你写的:

from Tkinter import *
window = Tk()
canvas = Canvas(window, width=500, height=500, background="green")
canvas.pack()

x0 = 225
y0 = 225
x1 = 275
y1 = 275
speed_x = 2
speed_y = 3

ball = canvas.create_oval(x0,y0,x1,y1,fill="blue", tag='ball')
while True:
    canvas.move('ball', speed_x, speed_y)
    canvas.after(30)
    canvas.update()

    if x1 >= 500:
        speed_x = -2
    if x0 <= 500:
        speed_y = -3
    if y1 >= 0:
        speed_y = 2
    if y0 <= 0:
        speed_x = 3

    x0 += speed_x
    x1 += speed_x
    y0 += speed_y
    y1 += speed_y

mainloop()
如果x1>=宽度:速度x=-速度
如果x0 0:speed_y=速度
如果y0<0:速度x=(速度+1)
我们想说的是,如果我们在任何边界条件之外,沿着适当的分量反转我们的速度

可能您会立即怀疑您从未根据高度检查y位置,或者怀疑您正在根据x位置调整y速度。不管怎样,都要多疑

这是你写的,按顺序

  • 如果我们的右点太右,开始向左移动。检查
  • 如果我们的左点是。。。在右边框(?)内,向左移动。。。但是更快。这没有道理
  • 如果我们的顶点低于顶线,向下移动。可以但不太有用。这不能纠正任何错误
  • 如果我们的底线高于顶线,向下移动。接近,但当我们的顶点高于顶线,而不是底点时,我们可能想要反弹。差别很小,但只要我们能解决问题
  • 与此逻辑相比:

    if x1 >= WIDTH: speed_x = -velocity
    if x0 <= WIDTH: speed_y = -(velocity+1)
    if y1 > 0:      speed_y = velocity
    if y0 < 0:      speed_x = (velocity+1)
    
    如果x1>=宽度:速度x=-速度
    如果x0=高度:速度×y=-速度
    
    如果你能在你的问题中贴上代码,你知道吗?没有人想通过链接找到你的问题。还有,你要求我们为你做这件事?描述一下你遇到的问题以及你是如何解决的。哦,对不起。我是这个网站的新手,所以我不确定,我通常在提问时使用reddit,你不能在那里发布你的代码。我会解决的。另外,我只是想得到一些提示,因为我完全迷路了。我一直在想办法解决这个问题,但一无所获。如果您能给我一些提示和建议,我将不胜感激。您需要用最大窗口大小修改x和y坐标,以便“环绕”窗口。弹跳需要在窗口的每一个边缘都有一个if语句来反转球的方向谢谢,我现在明白坐标的工作原理了。不过,还有一个问题我似乎无法解决。我将您正在谈论的代码部分基本上更改为您所编写的代码。它看起来应该可以工作,y0是椭圆形的顶部,当它达到0时,它应该朝相反的方向运动。这一次我做错了什么?@Astrophere发生了什么事?我只是用我在回答中建议的条件(看起来确实像你在评论中写的那样)运行它,它反弹得很好。我仍在试图找出如何将代码放入评论中,对此表示抱歉。由于某种原因,当我测试球时,球不会从顶壁反弹。我不知道为什么。我把问题中的代码编辑成现在的代码,你看到错误了吗?在我看来它是正确的。请撤消该编辑;如果你像这样编辑你的原始问题,那么我的答案看起来像胡说八道,未来的读者将无法得到帮助(这是网站的重点,当然是在帮助你之后)。完全按照现在编写的方式运行代码,我这边没有跳转问题。
    if x1 >= WIDTH:     speed_x = -velocity
    if x0 <= 0:         speed_x = velocity
    if y1 >= HEIGHT:    speed_y = -velocity
    if y0 <= 0:         speed_y = velocity