8
votes

Y a-t-il un moyen de "effacer" une surface?

Y a-t-il un moyen de nettoyer une surface de tout ce qui a été bloqué?


5 commentaires

Quelle boîte à outils utilisez-vous? Tk, qt, gtk, wxwidgets?


Tkinter je suppose, ou je ne sais pas vraiment? Im utilisant pygame pour tous mes graphiques.


Oui, il y a certainement est un moyen.


Si c'est pygame: pourquoi ne pas simplement remplir la surface avec une couleur unie (elle doit avoir une méthode de remplissage) ....


@ERIC: Si vous utilisez PYGAME, veuillez mettre à jour la question pour dire que vous utilisez Pygame.


11 Réponses :


2
votes

Je ne sais pas quelle API utilisez-vous, alors voici une réponse vague:

Dans pratiquement tous les cas "Effacement" Une surface bloque simplement une quad couleur de la même taille que la surface sur elle. La couleur utilisée est ce que vous voulez que votre couleur claire soit.

Si vous savez comment le blit, blit simplement un quad blanc de la même taille sur la surface.


0 commentaires

0
votes

Pour Pygame, vous pouvez utiliser Surface.frillage < / p>


2 commentaires

Oui, je pourrais l'utiliser, mais voici la partie délicate: ma surface est en train d'être blindée sur une autre surface et utilise le drapeau Srcalpha pour soutenir la transparence. Si je remplis la surface entière avec une couleur unie, tout mon plateau de jeu se transformera sur cette couleur, car cette surface est en train d'être blindée sur tout ... et je ne sais pas comment résoudre ce problème


@Eric, vous devriez ajouter ces exigences à votre question



0
votes

remplir la surface avec remplissage, puis le rendre transparent avec set_alpha xxx


1 commentaires

Ah je vois ce que vous essayez de faire maintenant. Non, vous ne pouvez pas annuler un blit sur une surface. Suivez les conseils de Kylotan.



2
votes

Vous ne pouvez pas annuler un graphique écrit sur le dessus d'un autre graphique que vous ne pouvez annuler une illustration d'une craie dessinée sur le dessus d'une autre illustration de la craie sur le même tableau.

Qu'est-ce que vous feriez avec le tableau des graphiques - effacer le lot entier et la prochaine fois seulement redessinez ce que vous voulez garder.


0 commentaires

5
votes

Quand je ne me soucie pas de la performance, j'utilise: xxx

qui dessinera la couleur spécifiée (noire dans ce cas) sur toute la surface. Est-ce que c'est ce que vous vouliez dire par "clair"?

Oh, et vous avez bien sûr besoin de "retourner" la surface après cela pour qu'il soit visible à l'écran.


0 commentaires

2
votes

J'ai eu ce problème aussi

​​pour créer la surface: xxx

pour effacer la surface: xxx

Dessinez vos lignes / images, etc.

puis blit cette surface sur votre surface principale à l'aide du drapeau de mélange alpha xxx


0 commentaires

1
votes

.fill ((255.255.255,0)) semble fonctionner pour moi quand même.


0 commentaires

6
votes

Si ce que vous voulez, c'est de faire un objet de surface de pygame "propre", cela efface toutes les images blitées, pour blouer de nouvelles images à chaque boucle de jeu et garder le pixel alpha de pair sans créer une nouvelle surface, vous pouvez Remplissez-le, mais au lieu d'une couleur unie, utilisez une couleur transparente xxx

* désolé est mon anglais est mauvais, tout en apprenant toujours


0 commentaires

1
votes

J'ai utilisé ce qui suit dans un jeu que j'ai fait: xxx


0 commentaires

0
votes

Si vous souhaitez effacer une surface avant de les blâmer, vous pouvez d'abord remplir la surface avec une couleur aléatoire improbable, définissez l'alpha (colorkey) de cette couleur, puis blit le sprite d'origine avec le fond transparent sur la surface. xxx


0 commentaires

0
votes

Vous pouvez effacer une surface en le rendant transparent. Vous trouverez ci-dessous comment j'ai utilisé la couleur vide RVB pour rendre le texte clignotant en réglant la surface pour passer à une version transparente.

from __future__ import absolute_import, division, print_function
from itertools import cycle
import pygame

VISITOR_TTF_FILENAME = 'pixelFont.ttf'
BLINK_EVENT = pygame.USEREVENT + 0
empty = (255,255,255,0)


def main():
    pygame.init()
    try:
        screen = pygame.display.set_mode((800, 600))
        screen.fill((255,255,255))
        screen_rect = screen.get_rect()

        clock = pygame.time.Clock()

        font = pygame.font.Font(VISITOR_TTF_FILENAME, 50)
        on_text_surface = font.render(
            'Press Any Key To Start', True, pygame.Color('green3')
        )
        blink_rect = on_text_surface.get_rect()
        blink_rect.center = screen_rect.center
        off_text_surface = pygame.Surface(blink_rect.size)
        off_text_surface.fill(empty)
        
        blink_surfaces = cycle([on_text_surface, off_text_surface])
        blink_surface = next(blink_surfaces)
        pygame.time.set_timer(BLINK_EVENT, 1000)

        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    return
                if event.type == BLINK_EVENT:
                    blink_surface = next(blink_surfaces)

            screen.blit(blink_surface, blink_rect)
            pygame.display.update()
            clock.tick(60)
    finally:
        pygame.quit()


if __name__ == '__main__':
    main()


0 commentaires