Python Forum
[PyGame] Problem with colorkey
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[PyGame] Problem with colorkey
#1
Hello, in one of my project I encounter a problem with pygame.set_colorkey,
I have a code like this, where Sprite is just a class to load and get Sprite
The problem is that even if the color of the background of my image is (194, 195, 196) the background is still blit on screen
from sprites import Sprite
import pygame as py
screen = py.display.set_mode((300, 300))
Sprite.load('button_icon', 'Ressources\\Sprites\\button_icon.png')
sprt = Sprite.get('button_icon', (256, 64), (128, 0, 64, 64))
sprt.set_colorkey((194, 195, 196))
print(sprt.get_at((0, 0)))
screen.blit(sprt, (0, 0))
running = True
screen.set_colorkey((194, 195, 196))
while running:
    for event in py.event.get():
        if event.type == py.QUIT:
            running = False
            break
    py.display.flip()
This is the result of the program
[Image: image.png]
Reply
#2
What happens if you set the color key to the pixel color at (0, 0)?
sprt.set_colorkey(spri.get_at(0, 0))
What is the Sprite class? Is it some enhanced sprite?

Normally after loading an image you call convert() or convert_alpha(). Does your Sprite class do that autmatically?
Reply
#3
The Sprite class is just a class that i created to store all the sprite of my game
it just store a dict that contain sprite name and Sprite and some classmethod to get a part of a sprite loaded in Sprite or the complete sprite, with some size

And I found a solution, after setting the surface's colorkey i just blit the surface onto itself, even it's not elegant that work
Reply
#4
Converting the image first. Then set colorkey. You don't add colorkey to screen. Also you need to refresh screen.
It also better to use a path tool for joining paths. It makes it more portable.

from pathlib import Path
from sprites import Sprite
import pygame as py
screen = py.display.set_mode((300, 300))
Sprite.load('button_icon', Path('Ressources', 'Sprites', 'button_icon.png'))
sprt = Sprite.get('button_icon', (256, 64), (128, 0, 64, 64))
sprt.convert()
sprt.set_colorkey((sprt.get_at(0, 0))

running = True
while running:
    for event in py.event.get():
        if event.type == py.QUIT:
            running = False
    
    # Refresh screen
    screen.fill('black')
    screen.blit(sprt, (0, 0))
    py.display.flip()
99 percent of computer problems exists between chair and keyboard.
Reply
#5
Have you tried reviewing those codes? If I'm not mistaken, the problem is not with the sprite but with the keyboard.
<url snipped>
Gribouillis write Jun-09-2023, 09:13 AM:
Off site promotion link snipped. Please read What to NOT include in a post
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020