Zdravím,potrebujem pomoc,ako do PyGame importujem obrázok,nar. loptu,no potrebujem ju bez pozadia,cisto loptu,lebo ten obrazok je stvorec takze mam biely stvorec na modrom pozadi s loptou vo vnutri :-) Diky
Fórum › Python
Pygame -obrazok bez pozadia
#1 Tinux
Ahoj, použij key color. Pygame potom nebude vykreslovat Pixely oné barvy, musíš si ale zjistit, jaký kód má ta barva pozadí
Ukázkový kód:
# pokud má obrázek červené pozadí, tak ta červená se nezobrazí
image = pygame.image.load("some_image.png").convert()
image.set_colorkey((255, 0, 0))
Robim tu hru kde mas dole ten obdlznik s ktorym hybes a gulickou nicis tie hore,po grafickej stranke to mam,jedine co mi chyba je uhol odrazu :P Ak chces kod tak ti ho poslem do spravy...lebo som uz aj videl ako vyratat uhol medzi 2 bodmi ale neviem to zakomponovat do mojho kodu
To asi nepojde ,neviem preco :P aj ked som sa prihlasil ,ok dam ti ho sem,keby cokolvek pytaj sa,trochu som to spravil kedze chlapik mi poradil na stacku ze proste len zmenim os ak narazim zboku co ale nie je optimalne riesenie podla mna :P
import pygame
import sys
scr_w=640
scr_h=480
scr=pygame.display.set_mode((scr_w,scr_h))
sprites_group=pygame.sprite.Group()
blocks_group=pygame.sprite.Group()
main_block_group=pygame.sprite.Group()
class blockToDestroy(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.blockToDestroy_w=35
self.blockToDestroy_h=15
self.img=pygame.image.load("C:\Python34\locktodes.png").convert()
self.image=pygame.Surface([self.blockToDestroy_w,self.blockToDestroy_h])
self.rect=self.image.get_rect()
self.image.blit(self.img,(0,0))
class Block(pygame.sprite.Sprite):
def __init__(self):
super().__init__()
self.block_w=80
self.block_h=20
self.img=pygame.image.load("C:\Python34\ock.png").convert()
self.image=pygame.Surface([self.block_w,self.block_h])
self.rect=self.image.get_rect()
self.image.blit(self.img,(0,0))
self.rect.y=400
self.rect.x=scr_w/2
self.speed_block_x=1
class Ball(pygame.sprite.Sprite):
def __init__(self):
block=Block()
super().__init__()
self.ball_w=30
self.speed_ball_y=0
self.speed_ball_x=0
self.img=pygame.image.load("C:\Python34\kocka.png").convert()
self.image=pygame.Surface([self.ball_w,self.ball_w])
self.rect=self.image.get_rect()
self.image.blit(self.img,(0,0))
self.rect.x=350
self.rect.y=block.rect.y-self.ball_w
class Game():
def __init__(self):
self.jump=-10
self.background=pygame.image.load("C:\Python34\images.png").convert()
self.running=True
self.block=Block()
self.lopta=Ball()
sprites_group.add(self.block)
main_block_group.add(self.block)
sprites_group.add(self.lopta)
self.onGround=True
def checkBounds(self):
if self.block.rect.x<0:
self.block.rect.x=0
if self.block.rect.x>scr_w-self.block.block_w:
self.block.rect.x=scr_w-self.block.block_w
if self.lopta.rect.x<0:
self.lopta.speed_ball_x*=-1
if self.lopta.rect.x+self.lopta.ball_w>scr_w:
self.lopta.speed_ball_x*=-1
def spriteCollision(self):
if pygame.sprite.spritecollide(self.lopta,blocks_group,True):
self.lopta.speed_ball_y*=-1
def checkMainBlock(self):
if pygame.sprite.spritecollide(self.lopta,main_block_group,False):
self.lopta.speed_ball_y*=-1
def gameOver(self):
if self.lopta.rect.y>400:
sys.exit()
pygame.quit()
quit()
def event(self):
self.keys=pygame.key.get_pressed()
for e in pygame.event.get():
if e.type==pygame.QUIT:
self.running=False
if self.keys[pygame.K_RIGHT]:
self.block.rect.x+=self.block.speed_block_x
elif self.keys[pygame.K_LEFT]:
self.block.rect.x-=self.block.speed_block_x
elif self.keys[pygame.K_UP] and self.onGround:
self.lopta.speed_ball_y=-1
self.lopta.speed_ball_x=-1
self.lopta.rect.y+=self.lopta.speed_ball_y
self.lopta.rect.x+=self.lopta.speed_ball_x
if self.lopta.rect.y<0:
self.lopta.speed_ball_y=1
self.checkBounds()
if self.lopta.rect.y==370:
self.onGround=True
else:
self.onGround=False
def makeBlocks(self):
for i in range(0,120,20):
for j in range(0,640,40):
self.btd=blockToDestroy()
self.btd.rect.x=j
self.btd.rect.y=i
blocks_group.add(self.btd)
sprites_group.add(self.btd)
def main(self):
self.makeBlocks()
while self.running:
self.event()
scr.blit(self.background,(0,0))
self.spriteCollision()
self.checkMainBlock()
self.gameOver()
sprites_group.draw(scr)
pygame.display.flip()
newGame=Game()
newGame.main()
pygame.quit()
quit()
nie je to bohvieako upravené,mozu tam byt nejake drobnosti :-))
#21 Tinux
Celkem dobrá práce, akorát míček se odraží od "pálky" divně a navíc máš pevnou cestu k obrázkům :)
Načítání obrázků se dá vyřešit takto:
path = os.path.dirname(os.path.realpath(__file__))
def load_image(name):
return pygame.image.load(os.path.join(path, name)).convert()
#v kódu při načítání obrázků stačí napsat
img = load_image("image.png")
Obrázky musí být ve stejné složce jako je hra
To som presne hladal diky:-)) no ten pohyb som robil takto nejak : http://sketchtoy.com/65560873
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Zmena farby pozadia — založil Twit
Zmena pozadia buttona — založil bbeni
WPF - TextBlock - zmeniť farbu pozadia dynamicky, časti textu — založil yterbium
Zobrazení duplicit bez seskupení ( bez GROUP BY) — založil pidgin
Python a Pygame — založil quest
Moderátoři diskuze