Как мне поместить изображение в Python? - PullRequest
0 голосов
/ 06 декабря 2018

Итак, у меня есть проблема, которую я не могу решить.Я делаю небольшого дизайнера уровней, и я хочу иметь возможность перемещать изображение, иметь возможность его размещать, а затем продолжать размещать это же изображение.У меня работает движущаяся часть изображения, я просто не могу заставить ее разместить изображение, когда нажимаю ввод.То, что я думаю происходит, это то, что оно помещает изображение, но перемещает это изображение вместе с движущимся на экране.

Не уверен.

IЯ надеялся, что кто-нибудь может помочь мне с этим.

Ниже мой код:

import sys
import pygame as pg
from pygame.locals import *
import time
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("This is a test")


pg.init()

xcrds = 17
ycrds = 13
black = (0,0,0)
sw = 1440
sh = 700

image = pg.image.load("../res/ExampleProject/TankGame/TankGameImg/barrelRust_side.png")
image = pg.transform.scale(image, (100, 100))

imgrect = image.get_rect()
imgplace = image.get_rect()

Screen = pg.display.set_mode((sw, sh))
Screen_placed = pg.display.set_mode((sw, sh))
pg.display.set_caption(' 2D Level Designer')

imgrect.left = 0
imgrect.top = 0
imgplace.top = 0 + "1"
imgplace.left = 0 + "1"

Screen.blit(image, imgrect)
pg.display.update()

while True:
    for event in pg.event.get():

        if event.type == KEYDOWN :              
            if event.key == K_ESCAPE:          
                pygame.quit()                  
                sys.exit()     
            if event.key == K_UP:
                imgrect.top -= 5
                imgplace.top -= 5
            if event.key == K_DOWN:
                imgrect.top += 5
                imgplace.top += 5

            if event.key == K_LEFT:
                imgrect.left -= 5
                imgplace.left -= 5

            if event.key == K_RIGHT:
                imgrect.left += 5
                imgplace.left += 5

            if event.key == K_RETURN:
                print("Placing Object...")
                Screen_placed.blit(image, imgplace)
                print("Image Placed!")




            if event.key == K_n:
                image_file = askopenfilename()
                image = pg.image.load(image_file).convert_alpha()
                print("Placable Updated!")


    Screen.fill((0, 0, 0))  # Clears the previous image.
    Screen.blit(image, imgrect)  # Draws the image at the new position.
    Screen_placed.fill((0, 0, 0))  # Clears the previous image.
    Screen_placed.blit(image, imgrect)  # Draws the image at the new position.
    pg.display.update()  # Updates the screen.

Если вам нужна дополнительная информация, пожалуйста, спросите.

_MouseBatteries

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Основная проблема заключается в том, что вы хотите разместить на экране кучу изображений, но у вас нет возможности отследить и нарисовать кучу изображений.Вы можете сделать что-то вроде этого:

....
Screen.blit(image, imgrect)
pg.display.update()

placed_objects = []  # this will hold all the locations of the placed objects as rectangles

while True:
....

Затем, когда вы нажмете Enter, сохраните прямоугольник (место, куда вы хотите его уронить).Для нужно , чтобы быть новым прямоугольником (в противном случае все они движутся вместе, как вы сказали)

 if event.key == K_RETURN:
     print("Placing Object...")
     placed_objects.append(pg.Rect(imgplace.x, imgplace.y, imgplace.width, imgplace.height))
     print("Image Placed!")

Затем, когда вы их рисуете:

for image_rect in placed_objects:
    Screen.blit(image, image_rect)  # draw the placed image at each stored location

примечание : в своем коде я исключил другой экран (Screen_placed).Я не уверен, почему это было там, но это склеивало работы.Я очень рекомендую один экран и способы отслеживания всех создаваемых вами объектов.

note : в будущем вам потребуется отслеживать не только прямоугольники, но и изображения.Таким образом, пользователь может выбрать новое изображение и начать размещать эти

0 голосов
/ 06 декабря 2018

Сначала вы должны использовать двойную обратную косую черту: '\\' для пути к изображению

image_file = "..\\res\\ExampleProject\\TankGame\\TankGameImg\\tileGrass_transitionE.png"

f = open("..\\Saves\\Backup\\FailSafe.txt", "a+")
image = pg.image.load("..\\res\\ExampleProject\\TankGame\\TankGameImg\\barrelRust_side.png")

, а второй должен быть числом сильный текст

imgplace.top = 0 + 1
imgplace.left = 0 + 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...