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

2024-09-30 22:14:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个猫和老鼠类型的游戏(只是为了好玩和学习绑定等),一个标签是由箭头键控制,另一个跟随它,追它慢一点。我决定添加一个奖励标签,它每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和调用它的那一行时,你会得到一只完美的追逐猫,它不会加速。为什么顶部的奖品函数会使“猫”标签加速?你知道吗

提前干杯


Tags: ifdefplacerandomroot标签globaltk
3条回答

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

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

你应该研究时间循环和帧速率,但基本上你的代码应该尝试调节动画速率本身-一个常见的技术是决定多久做一个动画帧(说每1/25秒一次),并使用一个简单的时钟/睡眠技术,以确保你只动画快。你知道吗

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

好吧,看来问题不在于奖金标签的代码(虽然它一定起了一定的作用),而更重要的是我使用的电脑出了问题。上面的代码似乎适用于大多数(?)电脑,但我用的不是。你知道吗

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

相关问题 更多 >