Control de usuario
Patrocinadores
Estadísticas
Miembros:
155.176
Online:
363
Hilos:
866.649
Mensajes:
11.973.237
Stats

Índice de foros NDS Scene

Palib duda (otra)

Foro dedicado a las aplicaciones y hardware de la scene (no flash carts)

Moderadores: The Sabbat, eGladiator

pabloochan
Avatar de usuario
Adicto
 
Mensajes: 359
Registrado: 22 Abr 2006
Ubicación: No lo quieras saber

Palib duda (otra)

Mensajepor pabloochan 02 Jun 2008 16:01

Cada vez que dibujo un sprite de cualquier tamaño sale esto

Imagen

por que es problema de las palib
el source es este

Código: Seleccionar todo
#include <PA9.h>
#include "gfx/all_gfx.h"
#include "gfx/all_gfx.c"
#define suelo (160)

s8 face = 0;
s8 accion = 0;
s32 x = 5;
s32 y =160;

int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_LoadSpritePal(0,0,(void*)cuadrado_Pal);




while (1)

         
   PA_CreateSprite(0, 0,(void*)cuadrado_Sprite,OBJ_SIZE_8X8,1,0,x,y);





if (!Pad.Held.B){x+=Pad.Held.Right-Pad.Held.Left;}
if (Pad.Held.B){x+=(Pad.Held.Right-Pad.Held.Left)*2;}
PA_SetSpriteXY(0,0,x,y);


   

PA_WaitForVBL();
}
return 0;}



y otra cosas como puedo hacer un salto?

nazareth
Avatar de usuario
I'm Finishing
 
Mensajes: 876
Registrado: 03 Ene 2008
Ubicación: Donde este

Mensajepor nazareth 02 Jun 2008 17:22

Casi al final tienes esto:

if (!Pad.Held.B){x+=Pad.Held.Right-Pad.Held.Left;}
if (Pad.Held.B){x+=(Pad.Held.Right-Pad.Held.Left)*2;}
PA_SetSpriteXY(0,0,x,y);

Prueba a kitarle la ! de la primera linea del principio

pabloochan
Avatar de usuario
Adicto
 
Mensajes: 359
Registrado: 22 Abr 2006
Ubicación: No lo quieras saber

Mensajepor pabloochan 02 Jun 2008 17:43

entonces el codigo no serviria para nada por que no podria correr

Alber_h
Avatar de usuario
En el séptimo día
 
Mensajes: 521
Registrado: 25 Mar 2005
Ubicación: Cádiz

Mensajepor Alber_h 02 Jun 2008 18:45

El problema está aquí:

Código: Seleccionar todo
while (1)
{
         
   PA_CreateSprite(0, 0,(void*)cuadrado_Sprite,OBJ_SIZE_8X8,1,0,x,y);


Con esto estás haciendo que en cada vuelta del bucle principal del programa (o en cada fotograma) se cree un nuevo sprite igual que el anterior. Si la DS es capaz de mostrar 128 sprites por pantalla... 128/60... en algo más de dos segundos tienes la memoria de la DS reservada a esa pantalla a tope.
Puedes solucionarlo creando el sprite fuera del bucle ;).

Edito: en el mismo texto que aparece en la pantalla te lo dice bien claro...

Texto de la pantalla de la DS escribió:Lo siento, parece que no hay espacio suficiente para poner todos tus sprites !! Carga menos sprites, o usa PA CloneSprite o PA CreateGfx y PA CreateSpriteFromGfx para optimizar el espacio usado. También puedes usar sprites de 16 colores...


Salu2!
Imagen

pabloochan
Avatar de usuario
Adicto
 
Mensajes: 359
Registrado: 22 Abr 2006
Ubicación: No lo quieras saber

Mensajepor pabloochan 02 Jun 2008 19:23

Muchisimas gracias

Código: Seleccionar todo
#include <PA9.h>
#include "gfx/all_gfx.h"
#include "gfx/all_gfx.c"

s8 face = 0;
s8 accion = 0;


int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_LoadSpritePal(0,0,(void*)img1_Pal);
PA_InitText(0,1);

PA_CreateSprite(0, 0,(void*)img1_Sprite,OBJ_SIZE_64X64,1,0,56,65);

while (1)


PA_StartSpriteAnim(0,0,0, 5,5);


if ((accion == 0) && (face==0)){PA_StartSpriteAnim(0,0,0, 5,5);PA_SetSpriteHflip(0,0,0);};

if ((accion == 0) && (face==1)){PA_StartSpriteAnim(0,0,0, 5,5);PA_SetSpriteHflip(0,0,1);};

if (Pad.Released.Left){accion=0;face=0;};
if (Pad.Released.Right){accion=0;face=1;};



PA_WaitForVBL();
}
return 0;}



El problema aqui es que no se anima (resuelveme esto y ya podre publicar una beta muy verde)

Alber_h
Avatar de usuario
En el séptimo día
 
Mensajes: 521
Registrado: 25 Mar 2005
Ubicación: Cádiz

Re:

Mensajepor Alber_h 02 Jun 2008 20:44

pabloochan escribió:Muchisimas gracias

Código: Seleccionar todo
#include <PA9.h>
#include "gfx/all_gfx.h"
#include "gfx/all_gfx.c"

s8 face = 0;
s8 accion = 0;


int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_LoadSpritePal(0,0,(void*)img1_Pal);
PA_InitText(0,1);

PA_CreateSprite(0, 0,(void*)img1_Sprite,OBJ_SIZE_64X64,1,0,56,65);

while (1)


PA_StartSpriteAnim(0,0,0, 5,5);


if ((accion == 0) && (face==0)){PA_StartSpriteAnim(0,0,0, 5,5);PA_SetSpriteHflip(0,0,0);};

if ((accion == 0) && (face==1)){PA_StartSpriteAnim(0,0,0, 5,5);PA_SetSpriteHflip(0,0,1);};

if (Pad.Released.Left){accion=0;face=0;};
if (Pad.Released.Right){accion=0;face=1;};



PA_WaitForVBL();
}
return 0;}



El problema aqui es que no se anima (resuelveme esto y ya podre publicar una beta muy verde)


Pues el fallo es similar al anterior, la función que anima el sprite se ejecuta en cada fotograma, por lo tanto la animación empieza de nuevo en cada fotograma, lo que hace que el sprite se quede siempre igual.
Tienes varias opciones: ponerlo fuera del bucle, pero solo se animaría una vez, al iniciar el programa; ponerle un if delante para que se ejecute solo al pulsar un boton o al tocar la pantalla tactil (con un newpress) o al pulsar el sprite (SpriteTouched()).

Espero que te sirva de ayuda, salu2!
Imagen

pabloochan
Avatar de usuario
Adicto
 
Mensajes: 359
Registrado: 22 Abr 2006
Ubicación: No lo quieras saber

Mensajepor pabloochan 02 Jun 2008 21:55

Código: Seleccionar todo
#include <PA9.h>
#include "gfx/all_gfx.h"
#include "gfx/all_gfx.c"

s8 face = 0;
s8 accion = 0;


int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_LoadSpritePal(0,0,(void*)img1_Pal);
PA_InitText(0,1);

PA_CreateSprite(0, 0,(void*)img1_Sprite,OBJ_SIZE_64X64,1,0,56,65);

while (1)





if ((accion == 0) && (face==0)){PA_StartSpriteAnim(0,0,0, 5,5);PA_SetSpriteHflip(0,0,0);};

if ((accion == 0) && (face==1)){PA_StartSpriteAnim(0,0,0, 5,5);PA_SetSpriteHflip(0,0,1);};

if (Pad.Released.Left){accion=0;face=0;};
if (Pad.Released.Right){accion=0;face=1;};



PA_WaitForVBL();
}
return 0;}




si lo dejo asi no deberia  ir

keda
Avatar de usuario
¡Capitán Eglomer!
 
Mensajes: 592
Registrado: 29 Abr 2003
Ubicación: En mi barco pirata...

Re:

Mensajepor keda 04 Jun 2008 14:20

pabloochan escribió:
Código: Seleccionar todo
#include <PA9.h>
#include "gfx/all_gfx.h"
#include "gfx/all_gfx.c"

s8 face = 0;
s8 accion = 0;


int main(int argc, char ** argv)
{
PA_Init();
PA_InitVBL();
PA_LoadSpritePal(0,0,(void*)img1_Pal);
PA_InitText(0,1);

PA_CreateSprite(0, 0,(void*)img1_Sprite,OBJ_SIZE_64X64,1,0,56,65);

while (1)





if ((accion == 0) && (face==0)){PA_StartSpriteAnim(0,0,0, 5,5);PA_SetSpriteHflip(0,0,0);};

if ((accion == 0) && (face==1)){PA_StartSpriteAnim(0,0,0, 5,5);PA_SetSpriteHflip(0,0,1);};

if (Pad.Released.Left){accion=0;face=0;};
if (Pad.Released.Right){accion=0;face=1;};



PA_WaitForVBL();
}
return 0;}




si lo dejo asi no deberia  ir


Si es una pregunta, yo creo que sí que iría
Imagen
Imagen

pabloochan
Avatar de usuario
Adicto
 
Mensajes: 359
Registrado: 22 Abr 2006
Ubicación: No lo quieras saber

Mensajepor pabloochan 04 Jun 2008 15:22

ok gracias

keda
Avatar de usuario
¡Capitán Eglomer!
 
Mensajes: 592
Registrado: 29 Abr 2003
Ubicación: En mi barco pirata...

Mensajepor keda 04 Jun 2008 15:25

joer, con la letraja del code no lo veia bien. No irá por esto:

if ((accion == 0) && (face==0)){PA_StartSpriteAnim(0,0,0, 5,5);PA_SetSpriteHflip(0,0,0);} --> ; <--

if ((accion == 0) && (face==1)){PA_StartSpriteAnim(0,0,0, 5,5);PA_SetSpriteHflip(0,0,1);} --> ; <--

if (Pad.Released.Left){accion=0;face=0;} --> ; <--
if (Pad.Released.Right){accion=0;face=1;} --> ; <--


después de las llaves no tienes que poner los ;

ahora creo q si está
Imagen
Imagen

Siguiente

Volver a Scene

¿Quién está conectado?

Usuarios navegando por este foro: No hay usuarios registrados visitando el foro y 0 invitados