Fedora Online Forum

Il forum della comunità italiana di Fedora

#1 20-03-2014 22:51:27

TheLamer
Appena sbarcato sul forum
Registrato: 08-03-2014
Messaggi: 18

Problema con pygame.draw.rect

Ho appena iniziato a studiare Pygame con lo scopo di sviluppare giochi per il pinguino,ma ho iniziato male.Con il seguente codice volevo disegnare un quadrato e spostarlo sull'asse x
ma al posto di spostarsi,si comporta come un barra d'avanzamento! Non riesco a individuare il motivo di tale comportamento,voi notate qualcosa?

import sys
import pygame
import time
from pygame.locals import *
pygame.init()
#Window size costants declaration
WIDTH=800
HEIGHT=600
#Color constants declaration
BLUE=(0,0,255)
RED=(255,0,0)
GREEN=(0,255,0)
YELLOW=(255,255,0)
ORANGE=(255,165,0)
PURPLE=(255,0,255)
WHITE=(255,255,255)
rectx=50
recty=50
side=75
window=pygame.display.set_mode((WIDTH,HEIGHT))
window.fill(WHITE)
pygame.display.set_caption('AnimatedScreen')
while True:
	for event in pygame.event.get():
		if event.type==QUIT:
			pygame.quit()
			sys.exit()
	pygame.display.update()
	pygame.draw.rect(window,YELLOW,[rectx,recty,side,side])
        time.spleep(0.5)
        rectx=rectx+10
	

Non in linea

#2 21-03-2014 20:17:27

romulus
Pinguino avanzato
Da Roma
Registrato: 25-06-2010
Messaggi: 330

Re: Problema con pygame.draw.rect

limitiamo i valori ad un solo pixel (quello corrispondente all'angolo basso a sinistra),
ipotizziamo uno sfondo blu e che si iniza a disegnare dal pixel 10.

- il pixel 10 passa da blu a giallo
- l'angolo viene spostato al pixel 20
- il pixel 10 deve ritornare di colore blu
- il pixel 20 passa da blu a giallo

un'altra cosa: prima si disegna e poi si fa il refresh dello schermo:

....
pygame.draw.rect(.....)
....
pygame.display.update()
....

R.


Assioma di R.: Ci sono più bit in un byte di quanti tu ne riesca a contare.
Avatar by manuoceane from Tux Factory

Non in linea

#3 21-03-2014 21:22:57

TheLamer
Appena sbarcato sul forum
Registrato: 08-03-2014
Messaggi: 18

Re: Problema con pygame.draw.rect

Grazie romulus per la risposta.In effettin hai ragione,ogni volta devo ridisegnare lo sfondo.Ho corretto con questo codice:

import sys
import pygame
import time
from pygame.locals import *
pygame.init()
#Window size costants declaration
WIDTH=800
HEIGHT=600
#Color constants declaration
BLUE=(0,0,255)
RED=(255,0,0)
GREEN=(0,255,0)
YELLOW=(255,255,0)
ORANGE=(255,165,0)
PURPLE=(255,0,255)
WHITE=(255,255,255)
rectx=50
recty=50
side=75
window=pygame.display.set_mode((WIDTH,HEIGHT))
pygame.display.set_caption('Killer')
while True:
	for event in pygame.event.get():
		if event.type==QUIT:
			pygame.quit()
			sys.exit()
	window.fill(WHITE)
	if rectx + side < WIDTH: 
		rectx+=1;
	pygame.draw.rect(window,YELLOW,[rectx,recty,side,side])
	pygame.display.update()

Non in linea

Piè di pagina