Python 为什么随机繁殖标签会加快另一个移动标签的速度?

Python 为什么随机繁殖标签会加快另一个移动标签的速度?,python,python-3.x,tkinter,geometry,label,Python,Python 3.x,Tkinter,Geometry,Label,我正在做一个猫和老鼠类型的游戏(只是为了好玩和学习绑定等),一个标签是由箭头键控制的,另一个跟随它,追赶它稍微慢一点。我决定添加一个奖金标签,它每x秒(目前每秒钟)在某个区域内随机产生。问题在于,出于某种原因,这种额外的代码会使“cat”标签在陌生区域的追踪速度更快 这是奖金标签生成代码: def prizes(): ran1 = random.randint(0, 600) ran2 = random.randint(0, 500) prize = tk.Label(b

我正在做一个猫和老鼠类型的游戏(只是为了好玩和学习绑定等),一个标签是由箭头键控制的,另一个跟随它,追赶它稍微慢一点。我决定添加一个奖金标签,它每x秒(目前每秒钟)在某个区域内随机产生。问题在于,出于某种原因,这种额外的代码会使“cat”标签在陌生区域的追踪速度更快

这是奖金标签生成代码:

def prizes():
    ran1 = random.randint(0, 600)
    ran2 = random.randint(0, 500)
    prize = tk.Label(bg = 'red', text = 'Bonus')
    prize.place(x = ran1, y = ran2)
    root.after(1000, prizes)
我的ICT老师认为随机加速可能是由于主循环窗口的几何尺寸,我所做的是在运行代码时使窗口最大化,这可能是原因吗

尝试此代码并将窗口最大化,运行一段时间(转到屏幕右侧,等待随机加速): 我为全局变量道歉,这只是一个有趣的游戏

import tkinter as tk
import random
root = tk.Tk()
root.config(bg = 'yellow')
root.geometry("1350x720")
runner = tk.Label(text = 'Mouse', bg = 'green')
global no1
global no2
no1 = 400
no2 = 300
runner.place(x = no1, y = no2)
def leftbutton(event):
    global no1
    no1 -= 3
    runner.place(x = no1, y = no2)
def rightbutton(event):
    global no1
    no1 += 3
    runner.place(x = no1, y = no2)
def upbutton(event):
    global no2
    no2 -= 3
    runner.place(x = no1, y = no2)
def downbutton(event):
    global no2
    no2 += 3
    runner.place(x = no1, y = no2)
global num1
global num2
num1 = 50
num2 = 50
chaser = tk.Label(bg = 'lightblue', text = 'CAT')
chaser.place(x = num1, y = num2)
global var
var = 2

def prizes():
    ran1 = random.randint(0, 600)
    ran2 = random.randint(0, 500)
    prize = tk.Label(bg = 'red', text = 'Bonus')
    prize.place(x = ran1, y = ran2)
    root.after(1000, prizes)

def start():
    global var
    if var == 2:
        prizes()
        begin.destroy()
    var = 1
    global num1
    global num2
    global no1
    global no2
    chaser.place(x = num1, y = num2)
    if num1 > no1:
        num1 -=1
    if num1 < no1:
        num1 += 1
    if num2 > no2:
        num2 -= 1
    if num2 < no2:
        num2 += 1
    if num2 == no2 and num1 == no1:
        root.destroy()
        print('You Lose, GAME OVER')
    else:
        root.after(1, start)
begin = tk.Button(bg = 'pink', text = "BEGIN GAME", command = start)
begin.place(x = 1, y = 1)
root.bind("<Left>", leftbutton)
root.bind("<Right>", rightbutton)
root.bind("<Up>", upbutton)
root.bind("<Down>", downbutton)
root.mainloop()
将tkinter作为tk导入
随机输入
root=tk.tk()
root.config(bg='yellow')
根几何(“1350x720”)
runner=tk.Label(文本='Mouse',背景='green')
全球排名第一
全球二氧化氮
no1=400
no2=300
跑步者位置(x=no1,y=no2)
def LEFT按钮(事件):
全球排名第一
no1-=3
跑步者位置(x=no1,y=no2)
def rightbutton(事件):
全球排名第一
no1+=3
跑步者位置(x=no1,y=no2)
def向上按钮(事件):
全球二氧化氮
no2-=3
跑步者位置(x=no1,y=no2)
def下降按钮(事件):
全球二氧化氮
no2+=3
跑步者位置(x=no1,y=no2)
全局num1
全局num2
num1=50
num2=50
chaser=tk.Label(背景='lightblue',文本='CAT')
追逐器位置(x=num1,y=num2)
全局变量
var=2
定义奖品():
ran1=random.randint(0600)
ran2=random.randint(0500)
prize=tk.Label(背景='red',文本='Bonus')
奖品位置(x=ran1,y=ran2)
root.after(1000,奖品)
def start():
全局变量
如果var==2:
奖品()
begin.destroy()
var=1
全局num1
全局num2
全球排名第一
全球二氧化氮
追逐器位置(x=num1,y=num2)
如果num1>no1:
num1-=1
如果num1no2:
num2-=1
如果num2
但是,如果忽略函数
奖品
,以及调用该函数的行,则会得到一只完美的追逐猫,但它不会加速。
为什么顶部的奖品函数会使“猫”标签加速


提前欢呼

好的,问题似乎与奖金标签的代码无关(虽然它一定起了作用),但更重要的是,我使用的电脑出现了问题。上面的代码似乎适用于大多数(?)计算机,但我使用的不是其中之一。

更可能是因为代码中没有任何内容可以调节动画的速度。动画在不同计算机上更稳定的原因可能是应用程序在第二台计算机上获得了更均匀的资源共享,从而使动画以更恒定的速率播放

取决于您的机器因素,如网络活动、磁盘活动、ram大小、交换大小、图形卡、磁盘碎片等,都可能影响自由运行的代码段的运行速度(即不试图调节自身速度的代码)

您应该研究计时循环和帧速率,但基本上您的代码应该尝试调节动画速率本身-一种常见的技术是确定动画帧的频率(例如每1/25秒一次),并使用简单的时钟/睡眠技术来确保只设置那么快的动画


顺便说一句:两个样本的大小不足以得出关于代码或计算机的任何结论

有点像Tony说的,问题不在于你的代码,而在于没有两台计算机是完全相同的。我们可以猜出其中一个有什么问题,但永远无法真正知道,而且你也无法真正解决这个问题,除非你避开有问题的计算机或通过调整你的代码。

每秒钟你都在创建另一个奖金标签。这是故意的,还是你想要一个可以移动的奖金标签?我不能复制加速——它对我来说似乎都是以相同的速度运行的,而且我在你的代码中没有看到任何会导致它加速的东西。@Bryan Oakley打算每秒钟再增加一个奖金标签,他们除了会做之外什么都不会做。也许你没有等待足够长的时间来加速,这需要一些时间,但确实发生了,也许是我正在使用的计算机,我会尝试其他可能他们会帮助。我正在使用的计算机似乎不喜欢我,它在家工作,这是为什么?看我的答案,你的计算机的问题可能要小得多,更可能是由于代码中缺少功能。