miércoles, 14 de mayo de 2008

Hoy dia por fin me hice el tiempo para volver a programar en python, en esta ocacion les traigo un pequeño programa en python que dibuja un cuadrado que se puede mover por la pantalla cuando uno presiona las flechas del teclado, en el codigo se combinan las librerias pygame y pyopenGL.

Aqui viene lo interesante, el codigo


import pygame
from pygame import *
from OpenGL.GL import *

class Character:
def __init__(self):
#--Position
self.posX = 0.0
self.posY = 0.0
self.posZ = 0.0

#--Movement
self.rot = 0.0
self.speed_left = 0.0
self.speed_right = 0.0
self.speed_top = 0.0
self.speed_down = 0.0

#--General
self.color = (1.0, 0.0, 0.0)
self.size = 0.2

def Update(self):
self.posX -= self.speed_left
self.posX += self.speed_right
self.posY += self.speed_top
self.posY -= self.speed_down

def Draw(self):
glBegin(GL_QUADS)
glColor3f(self.color[0], self.color[1], self.color[2])

glVertex3f(self.posX - self.size , self.posY - self.size , self.posZ)
glVertex3f(self.posX - self.size , self.posY + self.size , self.posZ)
glVertex3f(self.posX + self.size , self.posY + self.size , self.posZ)
glVertex3f(self.posX + self.size , self.posY - self.size , self.posZ)

glEnd()


def UpdateScreen ():
glClearColor(0.0, 0.0, 0.0, 0.0)
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)

# Select GL_MODELVIEW matrix
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()

character.Draw();
# Save current GL_MODELVIEW matrix state
glPushMatrix()

# Restore last GL_MODELVIEW matrix state
glPopMatrix()

# Flush everything to screen
glFlush()

# Flip the double-buffer
pygame.display.flip()


def SetUp():
pygame.init()

# we want a fullscreen, 1280x1024, SDL surface that supports doublebuffered OpenGL
pygame.display.set_mode((500,500),OPENGL|DOUBLEBUF)

# Select GL_PROJECTION matrix
glMatrixMode(GL_PROJECTION)

# Reset GL_PROJECTION matrix
glLoadIdentity()


def Main():
SetUp()

global character
character = Character()

while True:
character.Update()
UpdateScreen()

for event in pygame.event.get():

if event.type == QUIT:
return

if event.type == KEYDOWN:
if event.key == K_LEFT:
character.speed_left += 0.01
if event.key == K_RIGHT:
character.speed_right += 0.01
if event.key == K_DOWN:
character.speed_down += 0.01
if event.key == K_UP:
character.speed_top += 0.01

if event.type == KEYUP:
if event.key == K_LEFT:
character.speed_left = 0
if event.key == K_RIGHT:
character.speed_right = 0
if event.key == K_DOWN:
character.speed_down = 0
if event.key == K_UP:
character.speed_top = 0

Main()


Voy a seguir trabajando en este mismo tema, asi que cualquier comentario es bienvenido.

No hay comentarios: