Что означает сглаживание в этом коде шрифта для pygame? - PullRequest
0 голосов
/ 05 мая 2018
class Score(pygame.Surface):   

pygame.font.Font.render(Text, antialias, color, Background) 

Я пытаюсь создать код, который будет реализовывать текстовый файл, который попадает на мою поверхность Pygame. Я хочу, чтобы это отображалось в верхнем правом углу экрана. Моя проблема в том, что я не понимаю, что делает сглаживание и что я помещаю в область кода сглаживания. Я ставлю Int или какую-то строку. Вот еще код, чтобы показать, чтобы дать вам представление о том, что я собираюсь. Я надеюсь, что это поможет получить мой ответ.

import pygame
from pygame.locals import *
from sys import exit

class Ball(pygame.Surface):
    """ A bouncy ball """
    x = 320
    y = 0
   speedx = 0
   speedy = 250
   def get_top(self):
       return self.y

   def get_bottom(self):
    return self.y + self.get_height()

   def get_left(self):
    return self.x

   def get_right(self):
    return self.x + self.get_width()

   def is_hit(self, paddle):

       if self.get_bottom() >= paddle.get_top():
           if self.get_right() >= paddle.get_left():
               if self.get_left() <= paddle.get_right():
                   if self.get_top() <= paddle.get_top():
                    self.speedy = self.speedy * -1
                    self.y = self.y - 3
                    if paddle.motion == "Left":
                        self.speedx -= 20
                    if paddle.motion == "Right":
                        self.speedx += 20

class Paddle(pygame.Surface):
    """ A Paddle """
    x = 200
    y = 260
    motion = "None"

def get_top(self):
    return self.y

def get_bottom(self):
    return self.y + self.get_height()

def get_left(self):
    return self.x

def get_right(self):
    return self.x + self.get_width()
class Score(pygame.Surface):
pygame.font.Font.render("name.png",
if __name__ == "__main__":

pygame.init()
infoObject = pygame.display.Info()
screen_w = 640
screen_h = 480
screen = pygame.display.set_mode((screen_w, screen_h), 0, 32)


clock = pygame.time.Clock()

screencolor = (0,255,255)
color  = (255, 0, 0)
color2 = (0,0,255)
radius = 7
pos = (radius,radius)

screen.fill(screencolor)

wipe = pygame.Surface((screen_w,screen_h))
pygame.draw.rect(wipe, screencolor, pygame.Rect(0,0,screen_w,screen_h))
paddle = Paddle((70,10))

pygame.draw.rect(paddle, color2, pygame.Rect(0,0,70,10))




sprite = Ball((radius*2,radius*2))
pygame.draw.circle(sprite, color, pos, radius)
sprite.set_colorkey((0,0,0))

paddle_old_position = paddle.x

Fullscreen = False

while True:

    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            exit()


    paddleX, test = pygame.mouse.get_pos()
    paddle.x = paddleX - (paddle.get_width() / 2)

    screen.blit(wipe, (0,0))
    screen.blit(paddle, (paddle.x,260))
    screen.blit(sprite, (sprite.x, sprite.y))




    time_passed = clock.tick()
    time_passed_seconds = time_passed / 1000.0

    distancemovedy = time_passed_seconds * sprite.speedy
    sprite.y += distancemovedy

    distancemovedx = time_passed_seconds * sprite.speedx
    sprite.x += distancemovedx

    if paddle.x < paddle_old_position:
        paddle.motion = "Left"

    if paddle.x > paddle_old_position:
        paddle.motion = "Right"



    sprite.is_hit(paddle)

    paddle_old_position = paddle.x

    if sprite.get_bottom() > screen_h:
        sprite.speedy = abs(sprite.speedy) * -1
    if sprite.get_top() < 0:
        sprite.speedy = abs(sprite.speedy) 
    if sprite.get_right() > screen_w:
        sprite.speedx = abs(sprite.speedx) * -1
    if sprite.get_left() < 0:
        sprite.speedx = abs(sprite.speedx)

    if event.type == KEYDOWN:
            if event.key == K_f:
                Fullscreen = not Fullscreen
                if Fullscreen:
                    screen = pygame.display.set_mode((screen_w, screen_h), FULLSCREEN, 32)

                else:
                    screen = pygame.display.set_mode((screen_w, screen_h), 0, 32)

    pygame.display.update()

Ответы [ 2 ]

0 голосов
/ 05 мая 2018

Anti-Aliasing - это технология, используемая компьютерами для плавной визуализации пикселей.

Скажем, у вас есть линия, если она прямая, она выглядит просто отлично, но если вы сделаете ее диагональной, она станет зубчатой, как лестничная клетка.

Это то, где приходит сглаживание. Он ищет пятна, которые могут быть сглажены, и порождает полупрозрачный пиксель, в конце это делает форму гладкой, а не неровной и пиксели заметны (отсюда и «псевдоним»).

Если вы установите аргумент в значение true, ваша форма станет гладкой, без, она будет негладкой, иногда вам захочется использовать false, если вам когда-нибудь понадобится выполнить некоторые пиксельные манипуляции.

TL; DR, Просто установите его в True для обычного использования, но иногда вам может понадобиться использовать false для продвинутых манипуляций.

0 голосов
/ 05 мая 2018

Аргументом antialias является логическое значение. Если true, символы будут иметь гладкие края. Вы можете прочитать об этом в документации.

https://www.pygame.org/docs/ref/font.html#pygame.font.Font.render

Сглаживание делает изображения сглаженными по краям с помощью размытия пикселей

https://www.definition.net/upload/media/1_mpzptseunyptpkpvzvctyyrqxxqzxbzz.png

...