【发布时间】:2019-10-10 06:15:24
【问题描述】:
我想以 1-5 秒的随机间隔在游戏中生成一个敌人。为了防止程序的游戏部分(移动角色等)在出现sleep 时暂停,我将整个代码拆分为 2 个方法,以便我可以有 2 个线程 - 一个设置 enemyspawn True 每 1 个 - 5秒,另一个控制角色。
遗憾的是,第二种方法不会在第一种方法中更改enemyspawn,或者线程输出错误。我已经阅读并尝试在 if 语句之前从 EnemySpawn() 检索值,但这不起作用(或者我做错了)。我还尝试将enemyspawn 转换为全局变量。没有改变任何东西。
def Gameplay():
width=80
height=80
y = 720/2+height/2
x = 720/2+width/2
speed=2
enemyspawn = False
while True:
#controll character here
if enemyspawn:
enemyspawn=False
print(enemyspawn) #Spawn enemy here later
window.blit(bg, [0,0])
pygame.draw.rect(window,(100,100,100),(x,y,width,height))
pygame.display.update()
def EnemySpawn():
enemyspawn = EnemySpawn() #idrk about this line
while True:
sleep(randint(1,5))
enemyspawn=True
print(enemyspawn)
return enemyspawn
Gameplay = threading.Thread(target=Gameplay)
Gameplay.start()
EnemySpawn = threading.Thread(target=EnemySpawn)
EnemySpawn.start()
线程错误信息:
line 51, in EnemySpawn
enemyspawn = Gameplay(enemyspawn)
UnboundLocalError: local variable 'enemyspawn' referenced before assignment
另一个错误信息:
line 51, in EnemySpawn
enemyspawn = EnemySpawn()
TypeError: 'Thread' object is not callable
【问题讨论】:
-
我会使用 pygame 事件系统来做到这一点。看看我的this answer。
标签: python multithreading methods pygame switch-statement