- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Entrada destacada
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Programar un videojuego implica
conocer bastantes conceptos, sean de programación, gráficos, animación, audio,
vídeo, etc. En este tutorial podrás conocer cómo se utilizan las formas de dibujo
más básicas que se pueden hacer con pyagme, al final se describe cómo combinar algunas figuras para hacer un dibujo como el que se muestra a en la figura.
Antes
de empezar: Como Instalar Pygame
Una vez instalada la librería,
seguimos los siguientes pasos.
1. Importar
librería
2. Inicializar
pygame
3. Definir
colores
4. Abrir
y establecer las dimensiones de una ventana
5. Establecer
un bucle principal del programa (gameloop)
6. Establecer
bucle de procesamiento de eventos
7. Limpiar
pantalla
8. Crear
los dibujos
9. Actualizar
pantalla
10. Finalizar
el programa
Podemos ver todos estos pasos resumidos y
codificados en el siguiente ejemplo, el cual abre una ventana con un fondo
negro.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | #Introducción a los gráficos en python #Dibujando escenario import pygame import random NEGRO = (0, 0, 0) ROJO = (255, 0, 0) CAFE = (90, 50, 15) pygame.init() Dimensiones = (400, 500) Pantalla = pygame.display.set_mode(Dimensiones) pygame.display.set_caption("Introducción a los Gráficos") Terminar = False #Se define para poder gestionar cada cuando se ejecuta un fotograma reloj = pygame.time.Clock() while not Terminar: #---Manejo de eventos for Evento in pygame.event.get(): if Evento.type == pygame.QUIT: Terminar = True #---La lógica del juego #---Código de dibujo---- Pantalla.fill(NEGRO) #--Todos los dibujos van después de esta línea #--Todos los dibujos van antes de esta línea pygame.display.flip() reloj.tick(20) # Limitamos a 20 fotogramas por segundo pygame.quit() |
El código anterior puede servirnos como plantilla para cualquier
programa básico de Pygame.
Introducción al dibujo
- Línea: la siguiente línea de código dibuja una línea de color verde desde el punto [10, 10] a el punto [650, 470], donde el primer valor de cada lista es la coordenada en X y el segundo la coordenada en Y [x, y]. El último parámetro indica el grosor de la línea.
- Rectángulo: para dibujar un rectángulo, igual que para la línea el primer parámetro es la variable Pantalla, después el color de la figura, y en este caso para dibujar un rectángulo usamos una lista con cuatro elementos, de los cuales el primer par corresponden a las coordenadas (x, y) de la esquina superior izquierda, los otros dos indican el tamaño de la figura (ancho y alto). Así la siguiente linea dibuja un rectángulo que en realidad es un cuadrado, con coordenadas iniciales x = 150, y = 50, con un ancho y alto de 400.
- Círculo: a esta función se le indica con una lista de dos elementos el centro del círculo, después el radio y de igual forma que la línea el ultimo parámetro es el grosor de la línea, con la excepción de que si usamos 0 el circulo se dibujará con relleno (esto funciona también para la función rect).
- Arco: un arco se dibuja utilizando un rectángulo como referencia y es con las medidas de un rectángulo que se especifica la posición, que tan largo es horizontalmente y de manera vertical, también se indica el ángulo inicial y final que están dados en radianes. Entonces para dibujar un arco que comience en 0° y termine en 180°, en las medidas de un cuadro de 400 x 400 queda de la siguiente forma.
- Polígono: podemos dibujar polígonos con “n” lados utilizando la función polygon, a la cual debemos especificarle los “n” puntos, cada uno especificado por un par de coordenadas, la lista que contendrá estos puntos, puede contener tantos puntos sean necesarios. (no es necesario cerrar la figura, el último punto se unirá automáticamente al primero).
- Elipse: Para dibujar una elipse también se dibuja sobre las medidas de un rectángulo, como si de un contenedor se tratara. Y a excepción del arco, para dibujar la elipse solo es necesario especificar el rectángulo que lo contendrá y si será relleno o un tamaño de línea.
- Texto: Para dibujar texto es un tanto diferente a dibujar figuras, primero hay que inicializar las funciones de fuente, después se crea una variable que contendrá las características de la fuente como son el tipo y tamaño. Como tercer paso se crea la imagen del texto, es aquí donde se específica el texto que queremos dibujar y su color. Finalmente se posiciona y dibuja el texto.
1 2 3 4 | pygame.font.init() fuente = pygame.font.Font(None, 25) texto = fuente.render("Hola mundo", True, NEGRO) Pantalla.blit(texto, [100, 100]) |
El siguiente ejemplo combina la mayoría de las figuras descritas anteriormente. Para conseguir el dibujo
anterior se deben utilizar bucles para dibujar formas que se repiten, a continuación se muestra el código completo para dibujar la imagen del castillo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #Introducción a los graficos en python #Dibujando escenario import pygame import random AZULNOCHE = (9, 35, 67) VERDEPASTO = (17, 99, 67) VERDE = (10, 255, 10) BLANCO = (222, 224, 200) GRIS = (186, 186, 177) GrisCastillo = (158, 158, 158) NEGRO = (2, 3, 3) ROJO = (255, 0, 0) CAFE = (90, 50, 15) Centro = [] for i in range(15): Centro.append([random.randrange(50, 390), random.randrange(0, 200)]) pygame.init() Dimensiones = (400, 500) Pantalla = pygame.display.set_mode(Dimensiones) pygame.display.set_caption("Escenario") Terminar = False reloj = pygame.time.Clock() while not Terminar: for Evento in pygame.event.get(): if Evento.type == pygame.QUIT: Terminar = True #manejo de eventos #La lógica del juego #Codigo de dibujo Pantalla.fill((255, 255, 255)) pygame.draw.rect(Pantalla, AZULNOCHE, [0, 0, 400, 300], 0) pygame.draw.rect(Pantalla, VERDEPASTO, [0, 300, 400, 300], 0) pygame.draw.circle(Pantalla, BLANCO, [25, 25], 20, 0) pygame.draw.circle(Pantalla, GRIS, [15, 15], 4, 1) pygame.draw.circle(Pantalla, GRIS, [36, 24], 3, 1) pygame.draw.circle(Pantalla, GRIS, [24, 35], 5, 1) for y in range(0, 195, 7): for x in range(0, 398, 4): pygame.draw.line(Pantalla, VERDE, [x, 310 + y], [x + 2, 305 + y], 1) for i in range(6): c = (random.randrange(50, 390), random.randrange(0, 200)) r = random.randrange(0, 4) pygame.draw.circle(Pantalla, BLANCO, c, r, 0) #---Castillo--- for x in range(0, 70, 20): pygame.draw.rect(Pantalla, GrisCastillo, [290 + x, 220, 10, 10]) pygame.draw.rect(Pantalla, NEGRO, [290 + x, 220, 10, 10], 1) pygame.draw.rect(Pantalla, GrisCastillo, [250, 200, 40, 105], 0) pygame.draw.rect(Pantalla, NEGRO, [250, 200, 40, 105], 2) pygame.draw.rect(Pantalla, NEGRO, [262, 210, 16, 16], 0) pygame.draw.rect(Pantalla, GrisCastillo, [290, 230, 70, 75], 0) pygame.draw.rect(Pantalla, NEGRO, [290, 230, 70, 75], 2) pygame.draw.rect(Pantalla, GrisCastillo, [360, 200, 40, 105], 0) pygame.draw.rect(Pantalla, NEGRO, [360, 200, 40, 105], 2) pygame.draw.rect(Pantalla, NEGRO, [372, 210, 16, 16], 0) pygame.draw.polygon(Pantalla, NEGRO, [[248, 200], [270, 178], [292, 200]]) pygame.draw.polygon(Pantalla, NEGRO, [[358, 200], [380, 178], [402, 200]]) pygame.draw.circle(Pantalla, CAFE, [325, 270], 15, 0) pygame.draw.circle(Pantalla, NEGRO, [325, 270], 15, 2) pygame.draw.rect(Pantalla, CAFE, [310, 270, 30, 30], 0) pygame.draw.rect(Pantalla, NEGRO, [310, 270, 30, 30], 1) pygame.draw.circle(Pantalla, CAFE, [325, 270], 13, 0) #fuente Fuente = pygame.font.Font(None, 25) Texto = Fuente.render("Castle of Tepec", True, ROJO) Pantalla.blit(Texto, [250, 10]) pygame.display.flip() reloj.tick(20) pygame.quit() |
El código quedaría mejor si agrupáramos cada dibujo que compone la escena en funciones, una función para dibujar la luna, una para el castillo, una para el fondo, tal vez otra para la parte del pasto y así tener mejor organizado nuestro código y pueda ser ajustado a distintos tamaños de pantalla o que pueda interactuar con otros objetos de dibujo. Si te interesa ver cómo queda organizado el programa anterior en funciones puedes ver el ejemplo aquí EjemploFunciones.py.
- Obtener enlace
- X
- Correo electrónico
- Otras aplicaciones
Comentarios
No va , alguien me puede ayudar? , se me queda la pantalla en negro
ResponderEliminarHola! Disculpa qué código estás probando? ¿el código final?
EliminarMuchas veces el problema está en la identación, el editor de código del blog suele dar problemas al copiarlo directamente. Aquí te dejo una liga al código fuente del ejemplo final, al abrir el enlace has click derecho -> guardar como, lo ejecutas y me dices que tal te fue. Esenario.py
Eliminar