Anuncios Google

Los sprites desaparecen a la mitad de la pantalla [SOLUCIONADO]

Hola a todos,

Estaba programando el otro día mi nuevo proyecto, y al ir a probar el segundo nivel, me di cuenta de que los sprites de los enemigos desaparecían de la pantalla al llegar a la mitad y luego volvían a aparecer, y después de un tiempo probando a ver si lo soluciono no he sido capaz, por lo que posteo aquí para ver si alguien me puede echar una mano si sabe porque pasa esto. El código si queréis lo pongo, aunque por lo que he visto no hay nada mal a simple vista, aunque quizás me equivoque.

Os dejo la descarga para que veáis que es lo que pasa: http://www.mediafire.com/?6qqjnocst2lztto

En el .nds también podéis ver los valores de x de cada sprite del círculo (que es lo que falla), y como podéis ver, adquieren unos valores rarísimos...

Espero que me podáis echar una mano. Gracias por vuestra atención.

Salu2!

EDIT: Vale, tienes razón Draco, sin código como que no xD. Aquí os lo dejo:

//------------------------------------------------------------------------------
//                              NIVEL 2
//------------------------------------------------------------------------------
if (nivel==2){ 
	if(gfx==true){ 
	PA_EasyBgLoad(0,3,colisiones2); PA_EasyBgLoad(0,2,Nivel02); 
	x=43; y=34;
   PA_CreateSprite(0,0,(void*)cuadrado_Sprite,OBJ_SIZE_8X8,1,0, x, y);
   PA_CreateSprite(0,1,(void*)enemigo_Sprite,OBJ_SIZE_8X8,1,1, enemigo1x, 87);
	PA_CreateSprite(0,2,(void*)enemigo_Sprite,OBJ_SIZE_8X8,1,1, enemigo2x, 103);
	PA_CreateSprite(0,3,(void*)enemigo_Sprite,OBJ_SIZE_8X8,1,1, enemigo3x, 58);
	PA_CreateSprite(0,4,(void*)enemigo_Sprite,OBJ_SIZE_8X8,1,1, enemigo4x, 74);
	PA_CreateSprite(0,7,(void*)moneda_Sprite,OBJ_SIZE_8X8,1,2, 125, 65); moneda1=true;
	PA_CreateSprite(0,8,(void*)moneda_Sprite,OBJ_SIZE_8X8,1,2, 125, 95); moneda2=true;
	enemigo1=true; enemigo2=true; enemigo3=false; enemigo4=false; gfx=false;}
 
//	PA_OutputText(0,1,1,"%d  ",PA_EasyBgGetPixelCol(0, 3, Stylus.X, Stylus.Y));
	PA_OutputText(0,8,21, "%d", nivel); 
	PA_OutputText(0,19,21, "%d", monedas); 
	PA_OutputText(0,27,21, "  %d", muertes); 
 
	PA_OutputText(1,1,15,"x.1:%d", enemigo1x); 
	PA_OutputText(1,1,17,"x.2:%d", enemigo2x); 
	PA_OutputText(1,1,19,"x.3:%d", enemigo3x); 
	PA_OutputText(1,1,21,"x.4:%d", enemigo4x); 
 
	if(color==1){PA_SetSpriteAnim(0,0,0);} if(color==2){PA_SetSpriteAnim(0,0,1);}
	if(color==3){PA_SetSpriteAnim(0,0,2);} if(color==4){PA_SetSpriteAnim(0,0,3);}
   if(color==5){PA_SetSpriteAnim(0,0,4);} if(color==6){PA_SetSpriteAnim(0,0,5);}
 
	if(PA_EasyBgGetPixelCol(0,3,x,y) == PA_RGB(0,0,0) ||
	   PA_EasyBgGetPixelCol(0,3,x,y) == 37375 ||
	   PA_EasyBgGetPixelCol(0,3,x,y) == 58663) {movarriba=false; arriba=true;}
	else{movarriba=true; arriba=false;}
 
	if(PA_EasyBgGetPixelCol(0,3,x,y) == 33760 ||
       PA_EasyBgGetPixelCol(0,3,x,y) == 64528 ||
       PA_EasyBgGetPixelCol(0,3,x,y) == 64512 ){movabajo=false; abajo=true;}
	else{movabajo=true; abajo=false;}
 
	if(PA_EasyBgGetPixelCol(0,3,x,y) == 32799 ||
	   PA_EasyBgGetPixelCol(0,3,x,y) == 37375 ||
	   PA_EasyBgGetPixelCol(0,3,x,y) == 64528) {movizq=false; izq=true;}
	else{movizq=true; izq=false;}
 
	if(PA_EasyBgGetPixelCol(0,3,x,y) == 65504 ||
	   PA_EasyBgGetPixelCol(0,3,x,y) == 58663 ||
	   PA_EasyBgGetPixelCol(0,3,x,y) == 64512){movder=false; der=true;}
	else{movder=true; der=false;}
 
	if(enemigo1==true)enemigo1x+=2;
	if(PA_EasyBgGetPixelCol(0,3,enemigo1x,87) == 65504)enemigo1=false;
	if(enemigo1==false)enemigo1x-=2;
	if(PA_EasyBgGetPixelCol(0,3,enemigo1x,87) == 32799)enemigo1=true;
 
	if(enemigo2==true)enemigo2x+=2;
	if(PA_EasyBgGetPixelCol(0,3,enemigo2x,103) == 65504)enemigo2=false;
	if(enemigo2==false)enemigo2x-=2;
	if(PA_EasyBgGetPixelCol(0,3,enemigo2x,103) == 32799)enemigo2=true;
 
	if(enemigo3==true)enemigo3x+=2;
	if(PA_EasyBgGetPixelCol(0,3,enemigo3x,58) == 65504)enemigo3=false;
	if(enemigo3==false)enemigo3x-=2;
	if(PA_EasyBgGetPixelCol(0,3,enemigo3x,58) == 32799)enemigo3=true;
 
	if(enemigo4==true)enemigo4x+=2;
	if(PA_EasyBgGetPixelCol(0,3,enemigo4x,74) == 65504)enemigo4=false;
	if(enemigo4==false)enemigo4x-=2;
	if(PA_EasyBgGetPixelCol(0,3,enemigo4x,74) == 32799)enemigo4=true;
 
	if (movimiento==true){
	if((Pad.Held.Left || Pad.Held.Y) && movizq==true)x--; x2--;
	if((Pad.Held.Right || Pad.Held.A) && movder==true)x++; x2++;
	if((Pad.Held.Up || Pad.Held.X) && movarriba==true)y--; y2--;
	if((Pad.Held.Down || Pad.Held.B) && movabajo==true)y++; y2++;
 
	if (MB_ColisionCajas(x,y,125,65,8,8,8,8)==1 && moneda1==true){
	PA_DeleteSprite(0,7); monedas++; PA_OutputText(0,19,21, "%d", monedas); moneda1=false;}
 
	if (MB_ColisionCajas(x,y,125,95,8,8,8,8)==1 && moneda2==true){
	PA_DeleteSprite(0,8); monedas++; PA_OutputText(0,19,21, "%d", monedas); moneda2=false;}
 
	if(MB_ColisionCajas(x,y,enemigo1x,87,8,8,8,8)==1 && muerte==false){ 
	   muertes++; muerte=true; PA_OutputText(0,27,21, "  %d", muertes);}
	if(muerte==true){
	   x=43; y=34; muerte=false; moneda1=true; moneda2=true; monedas=3;
		PA_CreateSprite(0,7,(void*)moneda_Sprite,OBJ_SIZE_8X8,1,2, 125, 65); 
		PA_CreateSprite(0,8,(void*)moneda_Sprite,OBJ_SIZE_8X8,1,2, 125, 95);
		PA_OutputText(0,19,21, "%d", monedas); }
 
	if(MB_ColisionCajas(x,y,enemigo2x,103,8,8,8,8)==1 && muerte==false){ 
	   muertes++; muerte=true; PA_OutputText(0,27,21, "  %d", muertes);}
	if(muerte==true){
	   x=43; y=34; muerte=false; moneda1=true; moneda2=true; monedas=3;
		PA_CreateSprite(0,7,(void*)moneda_Sprite,OBJ_SIZE_8X8,1,2, 125, 65); 
		PA_CreateSprite(0,8,(void*)moneda_Sprite,OBJ_SIZE_8X8,1,2, 125, 95);
		PA_OutputText(0,19,21, "%d", monedas); }
 
	if(MB_ColisionCajas(x,y,enemigo3x,58,8,8,8,8)==1 && muerte==false){ 
	   muertes++; muerte=true; PA_OutputText(0,27,21, "  %d", muertes);}
	if(muerte==true){
	   x=43; y=34; muerte=false; moneda1=true; moneda2=true; monedas=3;
		PA_CreateSprite(0,7,(void*)moneda_Sprite,OBJ_SIZE_8X8,1,2, 125, 65);
		PA_CreateSprite(0,8,(void*)moneda_Sprite,OBJ_SIZE_8X8,1,2, 125, 95);
		PA_OutputText(0,19,21, "%d", monedas); }
 
	if(MB_ColisionCajas(x,y,enemigo4x,74,8,8,8,8)==1 && muerte==false){ 
	   muertes++; muerte=true; PA_OutputText(0,27,21, "  %d", muertes);}
	if(muerte==true){
	   x=43; y=34; muerte=false; moneda1=true; moneda2=true; monedas=3;
		PA_CreateSprite(0,7,(void*)moneda_Sprite,OBJ_SIZE_8X8,1,2, 125, 65);
		PA_CreateSprite(0,8,(void*)moneda_Sprite,OBJ_SIZE_8X8,1,2, 125, 95);
		PA_OutputText(0,19,21, "%d", monedas); }
 
	PA_SetSpriteXY(0, 0, x,y);	
	PA_SetSpriteX(0,1,enemigo1x); PA_SetSpriteX(0,2,enemigo2x);
	PA_SetSpriteX(0,3,enemigo3x); PA_SetSpriteX(0,4,enemigo4x);}
 
	if(PA_EasyBgGetPixelCol(0,3,x,y) == PA_RGB(31,31,31) && moneda1==false && moneda2==false){
		nivel=3; PA_OutputText(0,8,21, "%d", nivel); 
		//MB_Splash(); gfx=true; 
		} }

Tened en cuenta que está todavía en desarrollo y falta por hacer muchas funciones y demás y está bastante sucio, así que no lo critiquéis por eso, please xD

Ya está solucionado gracias a la solución que me dio exterminator, muchas gracias exter :D. También gracias a Martaper, Almamu y Draco por preocuparos :D


¿Quieres estar totalmente informado sobre el universo 3DS? Visita Magic3DS.

También puedes estar al tanto de toda la actualidad de 3DS en Twitter: @Magic3DS


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de exterminator

Veamos

Lo primero de todo es avisarte de que tienes una función repetida, observa que tienes dos if(muerte==true) que hacen exactamente lo mismo.

Respecto a tu fallo, viendo el lugar donde desaparecen las pelotas (más o menos por la mitad, es decir, el valor 128), me parece que el problema es que te pasas de capacidad con las variables enemigo1x y demás, me atrevería a decir que las has declarado como s8. Aumenta a s16 (o mejor s32), y nos comentas.

Salu2


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.

Imagen de magicblack2009

Yeah! xD

En realidad, no está 2 veces, está 4 xDD. Por eso dije que el código estaba muy sucio, porque cosas como esas me quedan por limpiar además de poner las funciones.

Ya está! :D Era eso, has dado en el clavo, ya está solucionado :DDD. Muchas gracias exterminator :D y Martaper, Almamu y Draco por interesaros :D.

Salu2!


¿Quieres estar totalmente informado sobre el universo 3DS? Visita Magic3DS.

También puedes estar al tanto de toda la actualidad de 3DS en Twitter: @Magic3DS

Imagen de Martaper

pon un %03d o borra esas

pon un %03d o borra esas lineas antes de volver a escribir o mejor... ponle unos espacios "x.1:%d   " asi no confundes los -12 con -120 o 3000, porque supongo que los valores van solo de -128 a 128 como mucho, quitando los margenes sera algo menos

parece que cuando la x es positiva dejan de verse, algo estara mal y los sacara fuera de pantalla dandole valores mayores a 256, supongo que al tener valores negativos tienes que sumarle un extra para mostrarlos, alomejor el extra que le sumas para colocarlos cuando es positivo es demasiado o lo has puesto mal. sin ver el codigo tampocco podemos dar con el error pero tiene pinta de ser eso

Imagen de Draco el dragon

Sin el codigo...

No puedo hacer nada por ayudar...

Haber si te olvidaste de algun >>8 y luego te armaste un lio con la funcion de los circulos esos.

Imagen de magicblack2009

Puesto

Y no lo utilizo, por lo que no me lo he podido dejar... De momento sin decimales y sin esos cálculos me apaño bastante bien.

Y Almamu, yo también suponía que era de eso, pero ahí está la cosa, que no sé porqué cambia de valor tan exageradamente xD.

Salu2! y gracias a los dos por preocuparos.


¿Quieres estar totalmente informado sobre el universo 3DS? Visita Magic3DS.

También puedes estar al tanto de toda la actualidad de 3DS en Twitter: @Magic3DS

Imagen de Martaper

ahora que veo el codigo, no

ahora que veo el codigo, no lo entiendo, en principio no tendria porque tener valores negativos, la x iria de 20 a 230 mas o menos, no?

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.