python - 尝试在 PyGame 中从列表到屏幕绘制多个矩形图像时出现类型错误
问题描述
我正在用 PyGame 制作一个简单的平台游戏。我制作了一个平台类来从图像文件和绘制方法创建平台。我在主游戏类中还有一个方法,它指定级别并指定要绘制的图像。
这是平台类
import pygame
from pygame.sprite import Sprite
class Platform(Sprite):
def __init__(self, xloc, yloc, imgw, imgh, img):
self.screen = pt_game.screen
self.image=pygame.image.load('images',img).convert()
self.image.convert_alpha()
self.image.set_colorkey(ALPHA)
self.rect = self.image.get_rect()
self.rect.y = yloc
self.rect.x = xloc
def draw(self):
pygame.draw.rect(self.screen,self.rect)
这是主类while循环,更新屏幕方法和级别检查方法
import sys
import pygame
from settings import Settings
from char import Char
from platform import Platform
class Main:
"""overall class to manage game assets and behavior"""
def __init__(self):
"""initialise game and create new game resources"""
pygame.init()
self.settings = Settings()
self.screen = pygame.display.set_mode((self.settings.screen_width, self.settings.screen_height))
pygame.display.set_caption("Platformer")
self.char = Char(self)
def run_game(self):
"""start main game loop"""
while True:
pygame.time.delay(35)
#Watch for keyboard and mouse events
self._check_events()
self.char.update()
self._draw_levels()
self._update_screen()
def _draw_levels(self, Platform):
if self.settings.level == 1:
ground = self.Platform(0, 760, 1200, 40, 'images/ground.png')
platform1 = self.Platform(600, 800, 200, 50, 'images/Platform.png')
self.platforms = (ground, platform1)
def _update_screen(self):
#reraw the screen for each pass through the loop
self.screen.fill(self.settings.bg_color)
self.char.blitme()
[self.Platform.draw(screen) for platform in self.platforms]
#make most recently drawn screen visible
pygame.display.flip()
我得到的错误是TypeError: _draw_levels() missing 1 required positional argument: 'Platform'
我假设我没有在某个地方正确地调用课程,但我不确定在哪里。任何有关为什么会发生此错误的帮助将不胜感激!
注意:这不是完整的代码
解决方案
该方法的签名_draw_levels
是def _draw_levels(self, Platform):
. 但是,您_draw_levels
无需任何参数即可调用self._draw_levels()
。
推荐阅读
- mysql - TypeORM 与 MySQL - 用大长文本保存对象失败
- arrays - 当我尝试在菜单驱动的数组操作程序中调用插入或删除函数时,谁能告诉我为什么我的程序崩溃?
- html - 使用 flexbox 并排放置两个 p 标签
- android - Android MotionLayout + Recyclerview,recyclerview中的视图不可点击
- asynchronous - 您如何从反应式微服务系统中获取数据?
- javascript - 不同端口上的不同 Tailwind 行为
- java - Java httpcleint 使用 X.509 证书发送 SSL 请求
- elasticsearch - Elasticsearch _count 查询请求缓存
- android - 为什么ejabberd在收到消息后不向客户端发送消息?
- coq - 两个术语之间的相等关系