在*之后不通过render()参数传递的参数必须是可迭代的,而不是pygame.Surface

Mar*_*ame 2 python class

我正在尝试使用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)

Blc*_*ght 9

这个问题与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)