Ошибка python pygame: TypeError: аргумент должен быть последовательностью объектов rectstylePython

Программы на Python
Гость
Ошибка python pygame: TypeError: аргумент должен быть последовательностью объектов rectstyle

Сообщение Гость »

[*](Английский неестественен, потому что используется переводчик. Извините. ) *
Я сделал хорошую игру. Я хотел бы знать, как обнаружить простые коллизии в pygame.

Итак, я использовал этот код.

if self.p_hitbox.rect.colliderect(self.tile_hitboxes[0]): print("test") но это не работает! и это дало ошибку:

AttributeError: Объект pygame.rect.Rect не имеет атрибута rect. импортировать json импортировать pygame импортировать систему DIR = r"C:\Users\PC\PycharmProjects\625 game\6.25 game\data\img\\" Карта класса: def __init__(я, экран): self.assets = \ { «Bricks1»: pygame.image.load(DIR + «Bricks1.png»), «Bricks2»: pygame.image.load(DIR + «Bricks2.png»), «Bricks3»: pygame.image.load(DIR + «Bricks3.png»), «Этаж1»: pygame.image.load(DIR + «Этаж1.png»), «Этаж2»: pygame.image.load(DIR + «Этаж2.png»), «Этаж3»: pygame.image.load(DIR + «Этаж3.png»), "Player1": (pygame.transform.scale(pygame.image.load(DIR + "Player2.png"), (22 * 3, 33 * 3))) } self.assets["Player1"].set_colorkey((255, 255, 255)) # 하얀색 부분 제거 self.p_hitbox = self.assets["Player1".get_rect() # 플레이어 히트박스 설정 self.root = screen # 스크린 설정 self.tilesize = 60 # 타일 기본 크기 self.mapW, self.mapH = 0, 0 # карта 가로, 세로 설정 self.tile_list = [] self.new_tile_list = [] self.tile_hitboxes = [] self.move_pos = [-60, 0] self.move_speed = 5 с open(r"..\map\room1.json") как f: self.map1 = json.load(f) def _load(self, номер карты): print("размер карты: " + str(eval('self.map%d["size"]' % номер_карты))) self.mapW, self.mapH = eval('self.map%d["size"]' % номер_карты) р = 0 для w в диапазоне (1, self.mapW + 2): для h в диапазоне (1, self.mapH + 2): пытаться: p = eval(f"self.map{mapnumber}[\"tilemap\"][f\"{w};{h}\"]") self.tile_list.append(p) print("--------\n" + f"pos:{w};{h}\ntype:" + p["type"] + "\nimg: " + p["img"] ) кроме KeyError: Распечатать("-------") print("존재하지 않는 칸 또는 오류, 건너뜁니다") защита draw_set (сам): для меня в диапазоне (len(self.tile_list)): self.new_tile_list.append( pygame.transform.scale(self.assets[self.tile_list['img']], (self.tilesize, self.tilesize))) print(self.assets[self.tile_list['img']].get_rect()) self.tile_hitboxes.append(self.assets[self.tile_list['img']].get_rect()) печать (self.tile_hitboxes) def var_set(self, type, result): eval(f"self.{type} = {result}") защита ничья (сам): для меня в диапазоне (len(self.tile_list)): json_map1 = self.tile_list m = self.new_tile_list self.root.blit(m, (json_map1["pos"][0] * self.tilesize - self.tilesize + self.move_pos[0], json_map1["pos"][1] * self.tilesize - self.tilesize + self.move_pos[1])) событие определения (самостоятельное): P = pygame.key.get_pressed() если P[pygame.K_s]: M.move_pos[1] -= self.move_speed если P[pygame.K_w]: M.move_pos[1] += self.move_speed если P[pygame.K_d]: M.move_pos[0] -= self.move_speed если P[pygame.K_a]: M.move_pos[0] += self.move_speed столкновение = self.p_hitbox.colliderect(self.tile_hitboxes[0]) цвет = (255, 0, 0), если столкновение, иначе (255, 255, 255) #print(цвет) если __name__ == "__main__": pygame.init() Экран = pygame.display.set_mode((640, 480)) M = Карта (Экран) Часы = pygame.time.Clock() М._загрузка(1) M.draw_set() пока правда: Screen.fill((255, 255, 255)) М.дро() М.событие() Screen.blit(M.assets["Player1"], (287, 215)) pygame.display.update() для события в pygame.event.get(): если event.type == pygame.QUIT: pygame.quit() sys.exit() Часы.тик(60) Как исправить эту ошибку?

Я думал, что текст «тест» будет напечатан при столкновении с игроком и tile_hitbox. Но это вызвало ошибку.

Я пробовал другие ответы, но постоянно получаю ошибки.

Вернуться в «Python»