Как сделать так, чтобы прямоугольник полностью покрывал плитку в Pygame - PullRequest
0 голосов
/ 20 декабря 2018

Я создаю редактор карт для плитки, которую я создаю.Я пытаюсь создать прозрачный прямоугольник вокруг плитки в редакторе карт по какой-то причине, хотя она покрывает большую часть плитки, а не все.Так как же заставить курсор пигмея оставаться в середине прозрачного прямоугольника и чтобы он покрывал всю плитку целиком?Я попытался изменить переменные mouse_x и mouse_y только на положение мыши, но оно находится на краю курсора и не прилипает к плитке.Итак, как мне получить курсор в середине прямоугольника, а затем оставить прямоугольник в плитке, где находится большая часть прямоугольника, но заполнить весь прямоугольник вместо большинства.Вот мой код редактора карт

import pygame, math
from scripts.Textures import *
from scripts.Dexti_GUI import *

pygame.init()

screen = pygame.display.set_mode((600,600), pygame.RESIZABLE)

n = []
next = False

tile_data = []

# Get Map Dimensions
MapWidth = 1
MapHeight = 1

camera_x, camera_y = 0,0
mouse_x, mouse_y = 0,0

# CREATE THE MAP WITH USERS DIMENSIONS
for x in range(0, MapWidth * 32, 32):
    for y in range(0, MapHeight * 32, 32):
        tile_data.append([x, y, "1"])

selector = pygame.Surface((32, 32), pygame.HWSURFACE|pygame.SRCALPHA)
selector.fill(Color.WithAlpha(100, Color.RoyalBlue)) #CREATES A SEE THROUGH BLUE RECTANGLE THE SIZE OF A TILE


while True:
    screen.fill(Color.Black)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            quit()
        if event.type == pygame.VIDEORESIZE:
            screen = pygame.display.set_mode((event.w, event.h), pygame.RESIZABLE)
            width = event.w
            height = event.h
        if event.type == pygame.KEYDOWN:
            if event.key == pygame.K_1:
                n.append("1")
            elif event.key == pygame.K_2:
                n.append("2")
            elif event.key == pygame.K_3:
                n.append("3")
            elif event.key == pygame.K_4:
                n.append("4")
            elif event.key == pygame.K_5:
                n.append("5")
            elif event.key == pygame.K_6:
                n.append("6")
            elif event.key == pygame.K_7:
                n.append("7")
            elif event.key == pygame.K_8:
                n.append("8")
            elif event.key == pygame.K_9:
                n.append("9")
            elif event.key == pygame.K_0:
                n.append("0")
            elif event.key == pygame.K_BACKSPACE:
                try:
                    del n[-1]
                except:
                    pass
            elif event.key == pygame.K_RETURN:
                next = True

    move = pygame.key.get_pressed()
    if move[pygame.K_w]:
        camera_y += 1
    elif move[pygame.K_s]:
        camera_y -= 1
    elif move[pygame.K_a]:
        camera_x += 1
    elif move[pygame.K_d]:
        camera_x -= 1

    #Display Map
    for tile in tile_data:
        try:
            screen.blit(Tiles.Texture_Tags[tile[2]], (tile[0] + camera_x, tile[1] + camera_y))
        except:
            print("Error creating Default Map! Be sure that a textures.py file exists in scripts")

    #Display cursor
    mouse = pygame.mouse.get_pos()
    mouse_x = math.floor(mouse[0] / 32) * 32
    mouse_y = math.floor(mouse[1] / 32) * 32
    screen.blit(selector, (mouse_x,mouse_y))

    pygame.display.flip()

Файл текстур:

import pygame

class Tiles:

    TileSize = 32

    Blocked = []

    Blocked_Types = [] # "Add Tile Number to block that tile

    def Load_texture(self, file, size):
        bitmap = pygame.image.load(file)
        bitmap = pygame.transform.scale(bitmap, (size, size))
        surface = pygame.Surface((size, size), pygame.HWSURFACE|pygame.SRCALPHA)
        surface.blit(bitmap, (0,0))
        return surface

    Grass = Load_texture(Load_texture, "Tiles\\Grass.png", 32)

    Texture_Tags = {"1": Grass} #Add texture tag here

Модуль Dexti_GUI - это просто модуль с цветами и функциями для создания текста и кнопок.

A sinle tile with cursor tile covering it Вот как я хочу, чтобы мой курсор был таким, чтобы при наведении курсора на плитку он полностью покрывал его My tiled map editor with one tile and then the cursor tile hanging off that tile Это мой редактор карт, в котором курсор находится надплитка, но плитка курсора не покрывает всю плитку

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