各位前辈老师好,我是新人,思路和代码有不合理处,请指点或忽略,谢谢。
说问题!
我想用 更改变量的值,影响线程的执行,
例如:
if display_of is 'home':
pygame.display.update()
当 display_of = 'farm'时,上面那条语句就不执行。
但结果却让我失望。
下面会列出两个案例, 案例1是实际遇到的问题,我估计代码可能有问题,于是新建了案例2做测试。
请感受我的感受:
案例1:
1.进程场景1,单击‘捕鱼’。
2.运行了一个线程的进度条。
3.进度条运行同时,移动鼠标到‘小猫农场’并点击,切换场景。
4.场景切换后,之前线程的进度条还在运行并显示。
我想了想,是否可以用一个变量开关display_of,更改赋值来控制进度条的刷新。
例如:
display_of = 'home'
if display_of is 'home':
pygame.display.update()
当切换场景时,马上display_of = 'farm',发现并没有什么用,进度条一直在走。
我质疑了我的代码,于是新建了案例2做测试。
案例2:
# =====================================================
# 导入模块
import pygame, time, threading
# =====================================================
# 游戏初始化
pygame.init() window = pygame.display.set_mode((1440, 720)) pygame.display.set_caption('小猫种地v2.0') pygame.display.flip()
# =====================================================
# 设置变量开关
dis_of = 'home'
# =====================================================
# 数字循环,这里相当于进度条了,0~99
def num(): global dis_of image = pygame.image.load('XM_image/bg_home.png') font = pygame.font.Font('font/simhei.ttf', 120) for a in range(0, 100): text = font.render('{}%'.format(a), True, (255, 0, 0)) window.blit(text, (150, 150)) time.sleep(0.005) if dis_of is 'home': pygame.display.update() window.blit(image, (0, 0))
# =====================================================
# 场景01
def sc_01(): global dis_of dis_of = 'home' image = pygame.image.load('XM_image/bg_home.png') window.blit(image, (0, 0)) pygame.display.update() threading.Thread(target=num).start() while True: for event in pygame.event.get(): if event.type == pygame.MOUSEBUTTONUP: sc_02() if event.type == pygame.QUIT: exit()
# =====================================================
# 场景02
def sc_02(): global dis_of dis_of = 'farm' image = pygame.image.load('XM_image/bg_farm.png') window.blit(image, (0, 0)) pygame.display.update() while True: for event in pygame.event.get(): if event.type == pygame.MOUSEBUTTONUP: sc_01() if event.type == pygame.QUIT: exit()
# =====================================================
# 设置主程序
def main(): sc_01()
# =====================================================
# 运行主程序
main()
说结果
1.程序运行后,显示场景01和一个红色的变化数字
2.在数字变化同时,点击屏幕,切换到场景02,此时问题出现了,数字变化是停住了,但还是有一个数字停留在屏幕上。
3.在场景01点击屏幕,马上会运行场景02,这时dis_of = 'farm',场景01那个数字按理说不会显示啊。但好在数字变化是停住了。
4.那么案例1为啥会一直有个进度条在走呢?
问题总结:
案例1和案例2,同样是更改变量值控制线程中if条件执行,但结果完全不同。
这其中,一定有我未知的知识点,忽略了或者根本不会。
我脑子很乱,不知道从哪把程序进行下去。
恳请大神有时间的话讲几句,点点我,拜托了,感谢。