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.

No hay comentarios: