Pygame překreslování – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Pygame překreslování – Python – Fórum – Programujte.comPygame překreslování – Python – Fórum – Programujte.com

 

kuba
~ Anonymní uživatel
59 příspěvků
31. 8. 2009   #1
-
0
-

Dobrý den,
začal jsem pohrávat s moduly pygame, ale hned ze začátku jsem narazil na problém který mi stále neleze do hlavy.
Vykreslil jsem si pozadí do okna pomocí for cyklů. Dále jsem vykreslil obrázek a FPS. Problém nastává hned po zapnutí(jak je vidět na obrázku). Je mi jasné, že chyba je v nepřekreslování pozadí, tudíž přepsané pixely se nevrátí na výchozí barvu, vím i jak by bylo možné je překreslit, ale problém je, že v mém podání je to velmi náročné (ze 750FPS na 90FPS, protože vykresluji celé pozadí v každém cyklu znova a znova). Mohli by jste mi někdo dát radu, jak tento problém opravit? Nejspíš jsem ještě nepochopil celkově princip blitu a rectu,... :(

http://img177.imageshack.us/img177/9969/63632183.png



# -*- coding: cp1250 -*-

import pygame, os, sys
from pygame import *


def main():

pygame.init()

mx, my = 0, 0
x, y = 0, 0

obraz = pygame.display.set_mode((640, 480))
hodiny = pygame.time.Clock()


platno = pygame.image.load(os.path.join('grafika', 'tankbrigade.png')).convert()
platno.set_colorkey(0)

for i in range(20):
for j in range(20):
obraz.blit(platno, (i*32, j*32), (198, 132, 32, 32))

pygame.display.flip()

while True:

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

if event.type == KEYDOWN:
if event.key == K_UP:
my = -1
if event.key == K_DOWN:
my = 1
if event.key == K_LEFT:
mx = -1
if event.key == K_RIGHT:
mx = 1

if event.type == KEYUP:
if event.key == K_UP:
my = 0
if event.key == K_DOWN:
my = 0
if event.key == K_LEFT:
mx = 0
if event.key == K_RIGHT:
mx = 0

x += mx
y += my

tank = obraz.blit(platno, (x, y), (495, 33, 32, 32))
tank.move(x, y)

hodiny.tick()

font = pygame.font.Font(None, 18)
text = font.render(str(hodiny.get_fps()), 1, (10, 10, 10))

obraz.blit(text, (500, 15))

pygame.display.flip()

if __name__ == '__main__': main()



Nahlásit jako SPAM
IP: 89.190.90.–
rAdo
~ Anonymní uživatel
45 příspěvků
7. 1. 2010   #2
-
0
-

Už si to asi vyriešil ale ja by som to sravil tak že obrazok pozadia by som spravil rovno na velkosť obrazovky
v tvojom pripade 640 x 480 a potom pomocou blitu mazal iba tu časť po ktorej presiel tank.

Nahlásit jako SPAM
IP: 95.103.244.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 19 hostů

Podobná vlákna

Překreslovani — založil Drake

Pomalé překreslování — založil Ni3mm4nd

XNA - překreslování dělá vlny — založil Matěj Andrle

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý