PyGame - текст с тенью - PullRequest
       4

PyGame - текст с тенью

0 голосов
/ 24 октября 2018

У меня есть задание, в котором нам нужно создать функции для отображения текста на экране в python / pygame.Эту часть я понимаю.Что я не знаю, так это то, что вы должны создать функцию, которая создает тень.Я знаю, как сделать тень, я просто не знаю, как сделать другую функцию, чтобы сделать это, и у меня есть возможность вызывать из уже существующей текстовой.Это то, что я до сих пор

import pygame
import sys
pygame.init()

screenSizeX = 1080
screenSizeY = 720
screenSize = (screenSizeX,screenSizeY)
screen = pygame.display.set_mode(screenSize,0)
pygame.display.set_caption("Test Functions")

WHITE = (255,255,255)
GREEN = (0,255,0)
BLUE = (0,0,255)
RED = (255,0,0)
YELLOW = (255,255,0)
BLACK = (0,0,0)
MAGENTA = (139,0,139)

def horCenter(font, size, text, colour, y, shadow, pos):
    if shadow == True:

    fontTitle = pygame.font.SysFont(font, size)
    textTitle = fontTitle.render(text, True, colour)
    textWidth = textTitle.get_width()
    screen.blit(textTitle, (screenSizeX/2 - textWidth/2, y))

def verCenter(font, size, text, colour, x):
    fontTitle = pygame.font.SysFont(font, size)
    textTitle = fontTitle.render(text, True, colour)
    textHeight = textTitle.get_height()
    screen.blit(textTitle, (x, screenSizeY/2 - textHeight/2))

def cenCenter(font, size, text, colour):
    fontTitle = pygame.font.SysFont(font, size)
    textTitle = fontTitle.render(text, True, colour)
    textHeight = textTitle.get_height()
    textWidth = textTitle.get_width()
    screen.blit(textTitle, (screenSizeX/2 - textWidth/2, screenSizeY/2 - textHeight/2))   




pygame.display.update()

go = True
while go:
    for event in pygame.event.get():
        if event.type ==pygame.QUIT:
            go = False


    screen.fill(WHITE)
    horCenter("Comic Sans MS", 40, "Text1", MAGENTA, 100)
    verCenter("Georgia", 10, "Tex2", GREEN, 500)
    cenCenter("Impact", 50, "Text3", RED)
    verCenter("Verdana", 60, "89274", BLACK, 50)
    pygame.display.update()

pygame.quit()
sys.exit()

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Я понял это с помощью ответа Кингсли.Теперь вы можете добавить тень или нет, где она расположена и какого она цвета.Может быть, есть более простой способ, но у меня это получилось.

import pygame
import sys
pygame.init()

screenSizeX = 1080
screenSizeY = 720
screenSize = (screenSizeX,screenSizeY)
screen = pygame.display.set_mode(screenSize,0)
pygame.display.set_caption("Test Functions")

WHITE = (255,255,255)
GREEN = (0,255,0)
BLUE = (0,0,255)
RED = (255,0,0)
YELLOW = (255,255,0)
BLACK = (0,0,0)
MAGENTA = (139,0,139)


def horCenter(font, size, text, colour, yPos, shadow, shadowPlace, shadowColour):   
    fontTitle = pygame.font.SysFont(font, size)
    textTitle = fontTitle.render(text, True, colour)
    textWidth = textTitle.get_width()
    xPos = screenSizeX/2 - textWidth/2
    if shadow == "True":
        dropShadow(font,size,text,colour, xPos,yPos, shadowPlace, shadowColour)
    else:
        screen.blit(textTitle, (xPos, yPos)) 

def verCenter(font, size, text, colour, xPos, shadow, shadowPlace, shadowColour):
    fontTitle = pygame.font.SysFont(font, size)
    textTitle = fontTitle.render(text, True, colour)
    textHeight = textTitle.get_height()
    yPos = screenSizeY/2 - textHeight/2
    if shadow == "True":
        dropShadow(font,size,text,colour, xPos,yPos, shadowPlace, shadowColour)
    else:
        screen.blit(textTitle, (xPos, yPos))

def cenCenter(font, size, text, colour, shadow, shadowPlace, shadowColour):
    fontTitle = pygame.font.SysFont(font, size)
    textTitle = fontTitle.render(text, True, colour)
    textHeight = textTitle.get_height()
    textWidth = textTitle.get_width()
    xPos = screenSizeX/2 - textWidth/2
    yPos = screenSizeY/2 - textHeight/2
    if shadow == "True":
        dropShadow(font,size,text,colour, xPos,yPos, shadowPlace, shadowColour)
    else:
        screen.blit(textTitle, (xPos, yPos))


def dropShadow(font, size, text, colour, xPos,yPos, shadowPlace, shadowColour):
    fontTitle = pygame.font.SysFont(font, size)
    textTitle = fontTitle.render(text, True, colour)
    shadowTitle = fontTitle.render(text, True, shadowColour)
    if shadowPlace == "bottomRight":
        newXPos = xPos +2
        newYPos = yPos + 2
        screen.blit(shadowTitle, (newXPos,newYPos))
        screen.blit(textTitle, (xPos,yPos))
    elif shadowPlace == "bottomLeft":
        newXPos = xPos - 2
        newYPos = yPos + 2
        screen.blit(shadowTitle, (newXPos, newYPos))
        screen.blit(textTitle, (xPos, yPos))
    elif shadowPlace == "topRight":
        newXPos = xPos - 2
        newYPos = yPos - 2
        screen.blit(shadowTitle, (newXPos, newYPos))
        screen.blit(textTitle, (xPos, yPos))
    elif shadowPlace == "topLeft":
        newXPos = xPos + 2
        newYPos = yPos - 2
        screen.blit(shadowTitle, (newXPos, newYPos))
        screen.blit(textTitle, (xPos, yPos))


pygame.display.update()

go = True
while go:
    for event in pygame.event.get():
        if event.type ==pygame.QUIT:
            go = False


    screen.fill(WHITE)
    horCenter("Comic Sans MS", 40, "Thanos", MAGENTA, 100, "True", "topLeft", YELLOW)
    verCenter("Georgia", 10, "HULK SMASH", GREEN, 800, "True", "bottomRight", BLACK)
    cenCenter("Impact", 50, "MARVEL", RED, "True", "bottomRight", BLACK)
    verCenter("Verdana", 60, "Black Widow", BLACK, 50, "True", "topRight", RED)
    pygame.display.update()

pygame.quit()
sys.exit()
0 голосов
/ 24 октября 2018

Тень может быть визуализирована путем рисования текста дважды.Первая - это серая версия текста со смещением, затем фактический текст в исходной позиции.

def dropShadowText(screen, text, size, x, y, colour=(255,255,255), drop_colour=(128,128,128), font=None):
    # how much 'shadow distance' is best?
    dropshadow_offset = 1 + (size // 15)
    text_font = pygame.font.Font(font, size)
    # make the drop-shadow
    text_bitmap = text_font.render(text, True, drop_colour)
    screen.blit(text_bitmap, (x+dropshadow_offset, y+dropshadow_offset) )
    # make the overlay text
    text_bitmap = text_font.render(text, True, colour)
    screen.blit(text_bitmap, (x, y) )

Таким образом, вы можете назвать его следующим образом:

dropShadowText(screen, "Hello World", 36, 50, 50)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...