@Darianchic

Что за странная ошибка?

Писала код с тутора из ютуб. В итоге вылезла какая-то странная ошибка, хотя вроде и делала всё правильно.

TypeError Traceback (most recent call last)
in
24 self.rect.center = (x, y)
25
---> 26 player = Soldier(200, 200, 2)
27 player2 = Soldier(400, 200, 2)
28

~\anaconda3\lib\site-packages\pygame\sprite.py in __init__(self, *groups)
114 self.__g = {} # The groups the sprite is in
115 if groups:
--> 116 self.add(*groups)
117
118 def add(self, *groups):

~\anaconda3\lib\site-packages\pygame\sprite.py in add(self, *groups)
132 self.add_internal(group)
133 else:
--> 134 self.add(*group)
135
136 def remove(self, *groups):

TypeError: add() argument after * must be an iterable, not int

программа была такой
class Soldier(pygame.sprite.Sprite):
def _init_(self, x, y, scale):
pygame.sprite.Sprite._init_(self)
img = pygame.image.load('game.png')
self.image = pygame.transform.scale(img, (int(img.get_width() * scale), int(img.get_height() * scale)))
self.rect = self.image.get_rect()
self.rect.center = (x, y)
  • Вопрос задан
  • 189 просмотров
Пригласить эксперта
Ответы на вопрос 1
@boga-net
Это рабочий код.

import pygame as pg
import sys
from pygame.sprite import Group
from pygame.sprite import Sprite

SCREEN_WIDTH    = 400
SCREEN_HEIGHT   = 400
BG_COLOR   = 230, 230, 230

class Soldier(Sprite):
	def __init__(self, x, y, scale):
		super().__init__()

		self.scale = scale
		self.image = pg.image.load("game.png").convert_alpha()
		self.rect = self.image.get_rect()
		self.rect.center = x, y
		
		self.width = self.image.get_width()
		self.height = self.image.get_height()
		self.new_width = self.width * self.scale
		self.new_height = self.height * self.scale

		self.image = pg.transform.scale(self.image, (self.new_width, self.new_height))

pg.init()
screen = pg.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))

Soldiers = Group()
Soldier = Soldier(30, 40, 3) # Икс, игрек и скейл
Soldiers.add(Soldier)

while True:    
	for event in pg.event.get():
		if event.type == pg.QUIT:
			pg.quit()
			sys.exit()
	screen.fill(BG_COLOR)
	Soldiers.draw(screen)
	pg.display.update()


Пожалуйста, в следующий раз вставляйте код в код пайтона
Так проще и сохраняется читаемость:
self.width = self.image.get_width()
self.height = self.image.get_height()
self.new_width = self.width * self.scale
self.new_height = self.height * self.scale


вместо
class Soldier(pygame.sprite.Sprite):
можно импортировать класс Sprite вверху и записывать проще:

from pygame.sprite import Sprite
class Soldier(Sprite):

функция Super вроде бы современней
super().__init__()
вместо
pygame.sprite.Sprite._init_(self)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы