viernes 21 de marzo de 2008

Ploteo Isometrico

Hoy les traigo un codigo sencillo para ploteos isometricos, pero primero deben poner el codigo en la misma carpeta que la imagen que les dejo a continacion




Esta imagen tiene una carecteristica muy especial, y es que es el doble de ancha que de alta, en este caso tiene 64 pixeles de ancho y 32 de alto, aunque el canvas de la imagen es de 32*32, el resto que no es visible es transparente, tambien pudimos haber ocupado un fondo blanco y usar colorkey pero no este caso preferi ocupar el canal alpha que traen los png's

Volviendo al tema interesante, el ploteo isometrico consiste en poner esta imagen u otras de las mismas caracteristicas a lo largo de la pantalla, para lograr esto debes poner sucesivamente las imagenes a lo largo del eje x, pero cuando lleguemos al final del eje y nos toque empezar a rellenar la segunda fila, la imagen la pones solo la mitad de un imagen mas abajo que la anterior, y una imagen mas a la derecha que la anterior y solo la mitad de la imagen mas abajo, despues cuando terminemos esa fila empezamos llenando el eje x desde el principio y el eje y de nuevo la mitad de la imagen en pixeles mas abajo, esta estructura se repite cuantas veces quieras.

Aqui les dejo un codigo para que puedan ver como funciona

#-------Empieza Codigo-----------
#Isometric Plot
import pygame
from pygame import *

TILESIZE = 64
SCREEN = pygame.display.set_mode((800, 600))
BLUE = (0, 0, 200)
GROUND_IMAGE = pygame.image.load('grass.png')

def plot():
SCREEN.fill((0, 200 , 0))

"""Aqui en el range es donde vamos a poner cuantos tiles queremos dibujar
En este caso son 15 tiles en la direccion y, y 10 tiles en la direccion x
y por lo tanto vamos a dibujar 150 tiles"""

for y in range(0, 15):
for x in range(0, 10):
"""tenemos 2 tipos de posiciones en este ploteo,
posiciones de pixeles y posiciones de tiles,
la posiciones de pixeles se incrementan de 1 en 1,
las de tile depende del ploteo que queramos,
en este caso nuestra imagen mide 64*32 pixeles,
por lo tanto cada posicion horizontal esta a 64 pixeles
de la siguiente, pero en el caso vertical,
las imagenes estan distanciadas por 32 pixeles
y dijimos que habia que moverse desde
la mitad de la imagen para abajo
o sea: imagen/4 para abajo
"""

tile_x = x * TILESIZE
tile_y = y * TILESIZE/4

if y % 2 == 0: # si estamos en una fila par(partiendo desde 0 seria la fila 0,2,4,6,8)
SCREEN.blit(GROUND_IMAGE, (tile_x, tile_y))

else:
tile_x += 32 # corregimos la posicion para las filas impares
SCREEN.blit(GROUND_IMAGE, (tile_x, tile_y))


def main():
clock = pygame.time.Clock()
fps = 40

ready = False
while not(ready):
clock.tick(fps)
print clock.get_fps()

plot()

pygame.display.update()

events = pygame.event.get()
for event in events:
if event.type == QUIT:
return
if event.type == KEYDOWN:
ready = True

main()
#-------Termina Codigo-----------

Hay otros tipos de ploteo y todavia nos queda mucho por hablar acerca de este.
Nos vemos.