Diferencia entre revisiones de «Ejemplo de Animaciones en Python»

De Wikitronica
Saltar a: navegación, buscar
 
Línea 1: Línea 1:
En este ejemplo podemos ver como se crea una clase llamada Círculo, y como se la dota de movimiento que se genera aleatoriamente:
+
En este ejemplo podemos ver cómo se crea una clase llamada Círculo en [[Python]], y cómo se la dota de movimiento que se genere aleatoriamente:
  
 
<syntaxhighlight lang="python">
 
<syntaxhighlight lang="python">
Línea 6: Línea 6:
 
import os, eucly, math
 
import os, eucly, math
  
#Definir colores (los colores utilizan notacion RGB, basicamente uno lo que hace es indicar que tanto de cada color quiere en cada campo RED, GREEN, BLUE)
+
#Definir colores (los colores utilizan notación RGB, básicamente uno lo que hace es indicar que tanto de cada color quiere en cada campo RED, GREEN, BLUE)
 
negro = 0, 0, 0
 
negro = 0, 0, 0
 
blanco = 255, 255, 255
 
blanco = 255, 255, 255
Línea 13: Línea 13:
 
azul = 0, 0, 255
 
azul = 0, 0, 255
  
#Defino una enumeracion, similar a las que se usan en C para poder obtener colores al azar
+
#Defino una enumeración, similar a las que se usan en C para poder obtener colores al azar
 
colors = [rojo, azul, blanco, verde]
 
colors = [rojo, azul, blanco, verde]
  
Línea 19: Línea 19:
 
velocidad_inicial = 20;
 
velocidad_inicial = 20;
  
#Definir Tamano de Pantalla
+
#Definir Tamaño de Pantalla
 
screen_size = screen_width, screen_height = 800,600
 
screen_size = screen_width, screen_height = 800,600
  
Línea 25: Línea 25:
 
screen = pygame.display.set_mode(screen_size)
 
screen = pygame.display.set_mode(screen_size)
  
#Creo la clase circulo, en este caso position es un vector que resume las coordenadas (x,y) y Vector2 es un vector que pertenece a pyeuclide
+
#Creo la clase circulo, en este caso "position" es un vector que resume las coordenadas (x,y) y Vector2 es un vector que pertenece a pyeuclide
 
class Circulo:
 
class Circulo:
 
     def __init__(self, position, size, color = (255,255,255), velocity= eucly.Vector2(0,0), width=1):
 
     def __init__(self, position, size, color = (255,255,255), velocity= eucly.Vector2(0,0), width=1):
Línea 34: Línea 34:
 
         self.velocity = velocity
 
         self.velocity = velocity
  
     #Esta es una variante de la funcion Display ya vista, que descompone primero las coordenadas de position en rx y ry
+
     #Esta es una variante de la función Display ya vista, que descompone primero las coordenadas de position en rx y ry
 
     def display(self):
 
     def display(self):
 
         rx, ry = int(self.position.x), int(self.position.y)
 
         rx, ry = int(self.position.x), int(self.position.y)
 
         pygame.draw.circle(screen, self.color, (rx, ry), self.size, self.width)
 
         pygame.draw.circle(screen, self.color, (rx, ry), self.size, self.width)
  
     #Esta es una funcion de movimiento que reescribe la posicion final con la inicial mas la velocidad por tiempo
+
     #Esta es una función de movimiento que reescribe la posicion final con la inicial más la velocidad por tiempo
 
     def move(self):
 
     def move(self):
 
         self.position = self.position + dtime * self.velocity
 
         self.position = self.position + dtime * self.velocity
Línea 47: Línea 47:
 
         self.velocity = velocity
 
         self.velocity = velocity
  
#Esta funcion no pertenece a la clase, pero genera un vector de velocidad al azar.         
+
#Esta función no pertenece a la clase, pero genera un vector de velocidad al azar.         
 
def get_random_velocity():
 
def get_random_velocity():
 
     new_angle = random.uniform(0, math.pi*2)
 
     new_angle = random.uniform(0, math.pi*2)
Línea 60: Línea 60:
 
clock = pygame.time.Clock()
 
clock = pygame.time.Clock()
  
#Definicion de circulos para ser generados al azar
+
#Definición de círculos para ser generados al azar
 
cantidad_de_circulos = 5
 
cantidad_de_circulos = 5
 
circulos = []
 
circulos = []
  
#Esta rutina permite generar circulos aleatoriamente
+
#Esta rutina permite generar círculos aleatoriamente
 
for n in range(cantidad_de_circulos):
 
for n in range(cantidad_de_circulos):
 
     size = random.randint(15,30)
 
     size = random.randint(15,30)

Revisión actual del 16:02 20 jun 2014

En este ejemplo podemos ver cómo se crea una clase llamada Círculo en Python, y cómo se la dota de movimiento que se genere aleatoriamente:

import sys, pygame, random, pygame.mixer
from pygame.locals import *
import os, eucly, math

#Definir colores (los colores utilizan notación RGB, básicamente uno lo que hace es indicar que tanto de cada color quiere en cada campo RED, GREEN, BLUE)
negro = 0, 0, 0
blanco = 255, 255, 255
rojo = 255, 0, 0
verde = 0, 255, 0
azul = 0, 0, 255

#Defino una enumeración, similar a las que se usan en C para poder obtener colores al azar
colors = [rojo, azul, blanco, verde]

#Constante utilizada en el programa
velocidad_inicial = 20;

#Definir Tamaño de Pantalla
screen_size = screen_width, screen_height = 800,600

#Activando la ventana
screen = pygame.display.set_mode(screen_size)

#Creo la clase circulo, en este caso "position" es un vector que resume las coordenadas (x,y) y Vector2 es un vector que pertenece a pyeuclide
class Circulo:
    def __init__(self, position, size, color = (255,255,255), velocity= eucly.Vector2(0,0), width=1):
        self.position = position
        self.size = size
        self.color = color
        self.width = width
        self.velocity = velocity

    #Esta es una variante de la función Display ya vista, que descompone primero las coordenadas de position en rx y ry	
    def display(self):
        rx, ry = int(self.position.x), int(self.position.y)
        pygame.draw.circle(screen, self.color, (rx, ry), self.size, self.width)

    #Esta es una función de movimiento que reescribe la posicion final con la inicial más la velocidad por tiempo	
    def move(self):
        self.position = self.position + dtime * self.velocity

    #Esta es una funcion que permite cambiar la velocidad de el objeto		  
    def change_velocity(self,velocidad):
        self.velocity = velocity

#Esta función no pertenece a la clase, pero genera un vector de velocidad al azar.        
def get_random_velocity():
    new_angle = random.uniform(0, math.pi*2)
    new_x = math.sin(new_angle)
    new_y = math.cos(new_angle)
    new_vector = eucly.Vector2(new_x,new_y)
    new_vector.normalize()
    new_vector *= velocidad_inicial
    return new_vector

#Activando el reloj
clock = pygame.time.Clock()

#Definición de círculos para ser generados al azar
cantidad_de_circulos = 5
circulos = []

#Esta rutina permite generar círculos aleatoriamente
for n in range(cantidad_de_circulos):
    size = random.randint(15,30)
    x = random.randint(size, screen_width-size)
    y = random.randint(size, screen_height-size)
    color = random.choice(colors)
    velocity = get_random_velocity()
    my_circle = Circulo(eucly.Vector2(x, y), size, color, velocity)
    circulos.append(my_circle)


#Variable que controla la espera entre cada cambio velocidad
direction_tick = 0.0

#Definir variables temporales
fps = 60
corriendo = True

while corriendo:
     clock.tick(fps)
	
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                corriendo = False

        #el reloj le pasa a dtime_ms el tiempo entre ticks en milisegundos, este se convierte a segundos y se acumula en direction_tick
        dtime_ms = clock.tick(fps)
        dtime = dtime_ms/1000.0    
        direction_tick += dtime

        #Cuando direction_tick pasa se 1 segundo, se generan nuevas velocidades para un circulo al azar.
        if(direction_tick > 1.0):
            direction_tick = 0.0
            random_circle = random.choice(circulos)
            new_velocity = get_random_velocity()
            random_circle.change_velocity(new_velocity)



        #relleno el screen de negro
        screen.fill(negro)
     
	#rutina para mover todos los circulos, importante pintar toda la pantalla de negro antes de volver a dibujarlos, ya que si no
	#se superponen.
        for Circulo in circulos:
            Circulo.move()
            Circulo.display()

	pygame.display.flip()

pygame.quit()
sys.exit()

Contributors

GMarzinotto, JCaceres