我正在尝试使用pygame,并尝试创建一个类似的类.
import pygame
from threading import Thread
gameExit = True
class states:
def __init__(self):
gameDisplay = pygame.display.set_mode((800, 600))
pygame.display.set_caption('test')
clock = pygame.time.Clock()
renderThread = Thread(target=self.render, args =(gameDisplay))
updateThread = Thread(target=self.update, args = (clock))
updateThread.start()
renderThread.start()
def update(self, clock):
global gameExit
while gameExit:
print('update')
clock.tick(30)
def render(self, gamedisplay):
global gameExit
print('render')
while gameExit:
print('render')
gameDisplay.fill([255, 255, 255]) # clearing
pygame.display.update()#update
state = states()
Run Code Online (Sandbox Code Playgroud)
错误代码是渲染()*后的参数必须是一个可迭代,不pygame.Surface为什么不会它通过传递gameDisplay /我该怎么办呢?
这是完整的追溯:
Exception in thread Thread-2:
Traceback (most recent call last):
File "C:\Users\Marc Frame\AppData\Local\Programs\Python\Python35\lib\threading.py", line 914, in _bootstrap_inner
self.run()
File "C:\Users\Marc Frame\AppData\Local\Programs\Python\Python35\lib\threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
TypeError: update() argument after * must be an iterable, not Clock
Exception in thread Thread-1:
Traceback (most recent call last):
File "C:\Users\Marc Frame\AppData\Local\Programs\Python\Python35\lib\threading.py", line 914, in _bootstrap_inner
self.run()
File "C:\Users\Marc Frame\AppData\Local\Programs\Python\Python35\lib\threading.py", line 862, in run
self._target(*self._args, **self._kwargs)
TypeError: render() argument after * must be an iterable, not pygame.Surface
Run Code Online (Sandbox Code Playgroud)
这个问题与args
你传递给你的Thread
构造函数有关.表达式(gameDisplay)
是对Surface
绑定对象的简单引用gameDisplay
,而不是我怀疑你想要的1元组.在括号末尾需要一个额外的逗号来告诉Python你真的想要一个元组,并且不仅仅是为了操作顺序使用括号:
renderThread = Thread(target=self.render, args=(gameDisplay,)) # add comma
updateThread = Thread(target=self.update, args=(clock,)) # here too
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5643 次 |
最近记录: |