Недопустимая позиция PyGame для Blit
Я создаю небольшой дизайнер уровней в Python (используя PyGame). Предполагается, что программа позволяет просто поместить изображение, переключаться между изображениями, экспортировать в файл PNG, а также экспортировать путь к изображению и координаты туда, где он был размещен в текстовом документе. Я заставил все эти компоненты работать, но я застрял с одним последним компонентом, который читает текстовый документ обратно в PyGame и помещает все изображения в правильные места с правильными спрайтами.
То, как я это делаю в настоящее время (которое было переписано и почти работает), выдает ошибку всякий раз, когда я пытаюсь прочитать один из моих экспортированных файлов.
Ошибка конечно:
stamped_surface.blit(image, (xcrds, ycrds))
TypeError: invalid destination position for blit
Вот мой код:
import pygame as pg
import threading
import time
import pygame
from random import *
from tkinter.filedialog import askopenfilename
from tkinter.filedialog import asksaveasfile
image_file = "../res/ExampleProject/TankGame/TankGameImg/tileGrass_transitionE.png"
f = open("../Saves/Backups/FailSafe.txt", "a+")
f.write("""
#################################################
# PyEngine #
# FailSafe #
# File #
# By MouseBatteries #
#################################################
""")
pg.init()
xcrds = 17
ycrds = 13
black = (0,0,0)
sw = 1280
sh = 720
screen = pg.display.set_mode((sw, sh))
pg.display.set_caption('thing')
image = pg.image.load(image_file).convert()
start_rect = image.get_rect()
image_rect = start_rect
running = True
stamped_surface = pg.Surface((sw, sh))
while running:
event = pg.event.poll()
keyinput = pg.key.get_pressed()
# Escape Program
if keyinput[pg.K_ESCAPE]:
fname = "../Saves/Design_complete.png"
pg.image.save(stamped_surface, fname)
print("File saved at {} ".format(fname))
quit()
#Save Work In Project File
if keyinput[pg.K_s]:
fname = "../Saves/LevelSave.png"
pg.image.save(stamped_surface, fname)
print("File saved at {} ".format(fname))
#Open New Selectable
if keyinput[pg.K_n]:
image_file = askopenfilename()
image = pg.image.load(image_file).convert()
print("Placable Updated!")
if keyinput[pg.K_e]:
fname = "../Saves/Export.png"
pg.image.save(stamped_surface, fname)
print("File saved at {} ".format(fname))
pg.quit()
#Recreate Terrain From File
if keyinput[pg.K_o]:
fileDest = askopenfilename()
openFile = open(fileDest, "r")
for line in openFile:
li = line.strip()
if li.startswith("Pec:"): #pec stands for "PyEngineCoords"
reimgpath = (line.rstrip())
nopecimgpath = reimgpath.replace("Pec:", "")
print(nopecimgpath)
image = pg.image.load(nopecimgpath).convert()
pg.display.update()
if li.startswith("Crdsx:"):
xposcrds = (line.rstrip())
xcrds = xposcrds.replace("Crdsx:", "")
x = int(xcrds)
print(x)
pg.display.update()
if li.startswith("Crdsy:"):
yposcrds = (line.rstrip())
ycrds = yposcrds.replace("Crdsy:", "")
y = int(ycrds)
print(y)
pg.display.update()
stamped_surface.blit(image, (xcrds, ycrds))
elif event.type == pg.QUIT:
running = False
elif event.type == pg.MOUSEMOTION:
image_rect = start_rect.move(event.pos)
elif event.type == pg.MOUSEBUTTONDOWN:
stamped_surface.blit(image, event.pos)
print("Image Placed!")
print(image_file, event.pos)
f.write("\nPec:" + image_file + "\nCrdsx:")
print(event.pos)
xpos_str = str(pg.mouse.get_pos()[0])
ypos_str = str(pg.mouse.get_pos()[1])
f.write(xpos_str)
f.write("\nCrdsy:")
f.write(ypos_str)
f.flush()
screen.fill(black)
screen.blit(stamped_surface, (0, 0))
screen.blit(image, image_rect)
pg.display.flip()
Эта программа имеет файловую систему и определенные элементы управления, чтобы сделать вещи, так что вот они:
ESC KEY - программа автоматического экспорта для справки и выхода из программы
Клавиша S - сохраняет поверхность в виде файла PNG.
Клавиша N - предлагает пользователю выбрать новый спрайт для использования.
Клавиша E - экспорт изображения в PNG с приглашением файла
Клавиша O - открывает файл с данными координат и данными пути к изображению.
Изображение корневой файловой системы: https://i.imgur.com/KouhmjK.png
Несколько вещей, которые вы должны знать: эта программа автоматически сохраняет каждую позицию файла в файл, который содержит координаты и пути к изображениям.
Файловая система относительно проста в обращении, глядя на код, но, если вам нужна помощь, пожалуйста, спросите.
1 ответ
Блиц ((источник, адресат, область), ...)) -> (Rect, ...) вы пропускаете пункт назначения. Читать здесь
И если вы используете координаты, используйте квадратные скобки [x-co,y-co], например:
block.blit(image,[0,0])