top of page

Aplicación de dibujo isométrico para nds

  • Foto del escritor: Samir Ramirez
    Samir Ramirez
  • 14 may 2009
  • 2 Min. de lectura

Probando PALib para la consola de Nintendo nds, he programado esta sencilla aplicación para dibujar piezas simples en perspectiva isométrica. (Más información sobre programar nds en nuestra sección). El código fuente es el siguiente:

#include <PA9.h>

// PAGfx Include #include “gfx/all_gfx.c” #include “gfx/all_gfx.h” #include “moneda.h” #include “zippo.h” int i; char posx; s32 distanciax, distanciay, distancia; typedef struct { char aparece; s16 x,y,centrox,centroy; } unidad;

unidad linea1[30]; unidad linea2[30]; unidad linea3[30];

//Fonction principale du code int main(void){

PA_Init(); //Initialision of PAlib PA_InitVBL();

PA_InitText(0,0); PA_InitText(1, 2); //Inicializamos sonido AS_Init(AS_MODE_SURROUND | AS_MODE_16CH ); AS_SetDefaultSettings(AS_PCM_8BIT, 11025, AS_SURROUND);

PA_EasyBgLoad(0, // screen 1, // background number (0-3) cuboisometrico); // Background name, used by PAGfx… PA_EasyBgLoad(1, 3, superior); // Same thing, but on the top screen… PA_LoadSpritePal(0, // Screen 0, // Palette number (void*)linea1a_Pal); // Palette name

//Creamos los sprites fuera de la pantalla for (i=0;i<30;i++) { linea1[i].aparece=0; PA_CreateSprite(0, i,(void*)linea1a_Sprite, OBJ_SIZE_16X16,1, 0, 300, 0); }

for (i=0;i<30;i++) { linea2[i].aparece=0; PA_CreateSprite(0, i+30,(void*)linea2a_Sprite, OBJ_SIZE_16X16,1, 0, 300, 0); }

for (i=0;i<30;i++) { linea3[i].aparece=0; PA_CreateSprite(0, i+60,(void*)linea3a_Sprite, OBJ_SIZE_16X16,1, 0, 300, 0); }

//Definimos las coordenadas x y de cada linea una a una //linea1

linea1[0].x=78; linea1[0].y=90; linea1[1].x=78; linea1[1].y=74; linea1[2].x=78; linea1[2].y=58;

linea1[3].x=92; linea1[3].y=98; linea1[4].x=92; linea1[4].y=82; linea1[5].x=92; linea1[5].y=66; linea1[6].x=92; linea1[6].y=50;

linea1[7].x=106; linea1[7].y=106; linea1[8].x=106; linea1[8].y=90; linea1[9].x=106; linea1[9].y=74; linea1[10].x=106; linea1[10].y=58; linea1[11].x=106; linea1[11].y=42;

linea1[12].x=120; linea1[12].y=114; linea1[13].x=120; linea1[13].y=98; linea1[14].x=120; linea1[14].y=82; linea1[15].x=120; linea1[15].y=66; linea1[16].x=120; linea1[16].y=50; linea1[17].x=120; linea1[17].y=34;

linea1[18].x=134; linea1[18].y=106; linea1[19].x=134; linea1[19].y=90; linea1[20].x=134; linea1[20].y=74; linea1[21].x=134; linea1[21].y=58; linea1[22].x=134; linea1[22].y=42;

linea1[23].x=148; linea1[23].y=98; linea1[24].x=148; linea1[24].y=82; linea1[25].x=148; linea1[25].y=66; linea1[26].x=148; linea1[26].y=50;

linea1[27].x=162; linea1[27].y=90; linea1[28].x=162; linea1[28].y=74; linea1[29].x=162; linea1[29].y=58; //linea2

linea2[0].x=86; linea2[0].y=90; linea2[1].x=86; linea2[1].y=74; linea2[2].x=86; linea2[2].y=58; linea2[3].x=86; linea2[3].y=42;

linea2[4].x=100; linea2[4].y=98; linea2[5].x=100; linea2[5].y=82; linea2[6].x=100; linea2[6].y=66; linea2[7].x=100; linea2[7].y=50; linea2[8].x=100; linea2[8].y=34;

linea2[9].x=114; linea2[9].y=106; linea2[10].x=114; linea2[10].y=90; linea2[11].x=114; linea2[11].y=74; linea2[12].x=114; linea2[12].y=58; linea2[13].x=114; linea2[13].y=42; linea2[14].x=114; linea2[14].y=26;

linea2[15].x=128; linea2[15].y=114; linea2[16].x=128; linea2[16].y=98; linea2[17].x=128; linea2[17].y=82; linea2[18].x=128; linea2[18].y=66; linea2[19].x=128; linea2[19].y=50; linea2[20].x=128; linea2[20].y=34;

linea2[21].x=142; linea2[21].y=106; linea2[22].x=142; linea2[22].y=90; linea2[23].x=142; linea2[23].y=74; linea2[24].x=142; linea2[24].y=58; linea2[25].x=142; linea2[25].y=42;

linea2[26].x=156; linea2[26].y=98; linea2[27].x=156; linea2[27].y=82; linea2[28].x=156; linea2[28].y=66; linea2[29].x=156; linea2[29].y=50; //linea3

linea3[0].x=86; linea3[0].y=106; linea3[1].x=86; linea3[1].y=90; linea3[2].x=86; linea3[2].y=74; linea3[3].x=86; linea3[3].y=58;

linea3[4].x=100; linea3[4].y=114; linea3[5].x=100; linea3[5].y=98; linea3[6].x=100; linea3[6].y=82; linea3[7].x=100; linea3[7].y=66; linea3[8].x=100; linea3[8].y=50;

linea3[9].x=114; linea3[9].y=122; linea3[10].x=114; linea3[10].y=106; linea3[11].x=114; linea3[11].y=90; linea3[12].x=114; linea3[12].y=74; linea3[13].x=114; linea3[13].y=58; linea3[14].x=114; linea3[14].y=42;

linea3[15].x=128; linea3[15].y=114; linea3[16].x=128; linea3[16].y=98; linea3[17].x=128; linea3[17].y=82; linea3[18].x=128; linea3[18].y=66; linea3[19].x=128; linea3[19].y=50; linea3[20].x=128; linea3[20].y=34;

linea3[21].x=142; linea3[21].y=106; linea3[22].x=142; linea3[22].y=90; linea3[23].x=142; linea3[23].y=74; linea3[24].x=142; linea3[24].y=58; linea3[25].x=142; linea3[25].y=42;

linea3[26].x=156; linea3[26].y=98; linea3[27].x=156; linea3[27].y=82; linea3[28].x=156; linea3[28].y=66; linea3[29].x=156; linea3[29].y=50;

//definimos el centro de las lineas

for (i=0;i<30;i++) { linea1[i].centrox=linea1[i].x+8; linea1[i].centroy=linea1[i].y+8;

}

for (i=0;i<30;i++) { linea2[i].centrox=linea2[i].x+7; linea2[i].centroy=linea2[i].y+12;

}

for (i=0;i<30;i++) { linea3[i].centrox=linea3[i].x+7; linea3[i].centroy=linea3[i].y+4;

}

//codigo principal

while(1){ // Main loop if (Stylus.Newpress) { //comprobamos boton borrar distanciax=(Stylus.X-128)*(Stylus.X-128); distanciay=(Stylus.Y-162)*(Stylus.Y-162); distancia=distanciax+distanciay;

if (distancia<144) { for (i=0;i<30;i++) { PA_SetSpriteXY(0, i, 300, 0); PA_SetSpriteXY(0, i+30, 300, 0); PA_SetSpriteXY(0, i+60, 300, 0); linea1[i].aparece=0; linea2[i].aparece=0; linea3[i].aparece=0; PA_PlaySimpleSound(zippo); } }

//comprobamos para linea1 for (i=0;i<30;i++) { distanciax=(Stylus.X-linea1[i].centrox)*(Stylus.X-linea1[i].centrox); distanciay=(Stylus.Y-linea1[i].centroy)*(Stylus.Y-linea1[i].centroy); distancia=distanciax+distanciay;

if (distancia<25) { PA_PlaySimpleSound(moneda); //PA_OutputText(1, 0, 0, “distancia: %d  “, distancia); //PA_SetSpriteXY(0,i,linea1[i].x,linea1[i].y); // PA_SetSpriteXY(0,i,5,5); //lo de arriba son pruebas if (linea1[i].aparece == 0) { linea1[i].aparece=1; PA_SetSpriteXY(0, // screen i, // sprite linea1[i].x, // x position linea1[i].y); // y…

}

else if (linea1[i].aparece == 1) { linea1[i].aparece=0; PA_SetSpriteXY(0, // screen i, // sprite 300, // x position 0); // y…

} }//cierro if distancia }//cierro bucle for //comprobamos para linea2 for (i=0;i<30;i++) { distanciax=(Stylus.X-linea2[i].centrox)*(Stylus.X-linea2[i].centrox); distanciay=(Stylus.Y-linea2[i].centroy)*(Stylus.Y-linea2[i].centroy); distancia=distanciax+distanciay; if (distancia<16) { PA_PlaySimpleSound(moneda); if (linea2[i].aparece == 0) { linea2[i].aparece=1; PA_SetSpriteXY(0, // screen i+30, // sprite linea2[i].x, // x position linea2[i].y); // y…

}

else if (linea2[i].aparece == 1) { linea2[i].aparece=0; PA_SetSpriteXY(0, // screen i+30, // sprite 300, // x position 0); // y…

} }//cierro if distancia }//cierro bucle for //comprobamos para linea3 for (i=0;i<30;i++) { distanciax=(Stylus.X-linea3[i].centrox)*(Stylus.X-linea3[i].centrox); distanciay=(Stylus.Y-linea3[i].centroy)*(Stylus.Y-linea3[i].centroy); distancia=distanciax+distanciay; if (distancia<16) { PA_PlaySimpleSound(moneda); if (linea3[i].aparece == 0) { linea3[i].aparece=1; PA_SetSpriteXY(0, // screen i+60, // sprite linea3[i].x, // x position linea3[i].y); // y…

}

else if (linea3[i].aparece == 1) { linea3[i].aparece=0; PA_SetSpriteXY(0, // screen i+60, // sprite 300, // x position 0); // y…

} }//cierro if distancia }//cierro bucle for

PA_WaitForVBL();

}//cierro if de presionar stylus }//cierro while return 0; }

Entradas recientes

Ver todo

Comentarios


3025674909|

©2020 por SM-MANUFACTURING. Creada con Wix.com

bottom of page