python - 为什么随机生成的标签会加速另一个移动标签的速度?

标签 python python-3.x tkinter geometry label

我正在制作一个猫和老鼠类型的游戏(只是为了好玩和了解绑定(bind)等),一个标签由箭头键控制,另一个标签跟随它,追逐它慢一点。我决定添加一个奖励标签,该标签每 x 秒(目前每秒)在某个区域内随机生成。问题在于,由于某种原因,这段额外的代码使得“猫”标签追逐得更快,并在陌生区域加速。

这是奖励标签生成代码:

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()

但是,当您省略函数 prizes 以及调用它的行时,您会得到一只完美的追逐猫,但它不会加速。为什么会这样顶部的奖品功能使“猫”标签加速?

最佳答案

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

根据您的机器因素,例如网络事件、磁盘事件、内存大小、交换大小、显卡、磁盘碎片等,都可能影响自由循环代码的运行速度(即不产生任何影响的代码)尝试调节自己的速度)

您应该研究定时循环和帧速率,但基本上您的代码应该尝试调节动画速率本身 - 一种常见的技术是决定执行动画帧的频率(例如每 1/25 秒一次)并使用一个简单的方法时钟/ sleep 技术可确保您只以那么快的速度制作动画。

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

关于python - 为什么随机生成的标签会加速另一个移动标签的速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25494733/

相关文章:

python - 在 Python 中处理大型数据库表的每一行

python - 如何最好的方式将一个列表转换为具有列表中的元素对的新列表?

python - Tkinter 的asksaveasfilename 随机忽略defaultextension

python - 使用 python 3.5 在 centos 6.5 上安装 tkinter

Python sklearn kaggle/titanic 教程在最后一个特征尺度上失败

python - 自动将Python对象添加到字典中

python-3.x - 即使在为 AWS EBCLI 成功安装虚拟环境后,ModuleNotFoundError : No module named 'virtualenv' Exiting due to failure,

python - `for` 使用生成器循环,如果耗尽则返回不同的值

Python ttk 对象 - 不理解小部件特定的选项

python - 加快 python pandas 中的 read_csv