[NDS]Una dudilla

Miren, mi problema es que el sdk saca fallos de donde no los hay...

yo pongo el codigo:

#include

#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"


typedef struct{
s32 x, y;
s32 flip;
s32 scrollx;
s32 scrolly;
short orientacion;
short velocidad;
short ancho;
short alto;
}sprite;

sprite jugador;

int ancho_mapa;
int alto_mapa;
short tile_transparente;

void mueve_jugador(void);
void mueve_fondos(void);

void CheckCollisions(void);
u8 GetTile(s16 x, s16 y);
u8 LeftCollision(void);
u8 RightCollision(void);
u8 DownCollision(void);

int main(void) {

PA_Init();
PA_InitVBL();

PA_InitText(1, 0);

PA_LoadSpritePal(0, 0, (void*)sprite1_Pal);

PA_LoadPAGfxLargeBg(0, 1, mapa1_1);
PA_LoadPAGfxLargeBg(0, 2, mapa1_2);
PA_LoadPAGfxLargeBg(0, 3, mapa1_3);

PA_InitParallaxX(0, 0, 256, 256, 256);
PA_InitParallaxY(0, 0, 256, 256, 256);

ancho_mapa = 1024;
alto_mapa = 384;
tile_transparente = 0;

jugador.x = 0<<8; jugador.y = 0<<8;
jugador.flip = 0;
jugador.scrollx = 0;
jugador.scrolly = 0;
jugador.orientacion = 2;
jugador.velocidad = 512;
jugador.ancho = jugador.alto = 32;

PA_CreateSprite(0, 0,(void*)chara1_Sprite, OBJ_SIZE_32X32,1, 0, jugador.x>>8, jugador.y>>8);
PA_SetSpritePrio(0,0,2);

while(1)
{
mueve_jugador();

mueve_fondos();

PA_WaitForVBL();
}

return 0;
}


void mueve_fondos(void){

if((((jugador.x-jugador.scrollx)>>8) > 128-(jugador.ancho/2)) && ((jugador.x>>8) < ancho_mapa-128-(jugador.ancho/2)))
jugador.scrollx = jugador.x - ((128-(jugador.ancho/2))<<8);
else if ((((jugador.x-jugador.scrollx)>>8) < 128-(jugador.ancho/2)) && ((jugador.x>>8) > 128-(jugador.ancho/2)))
jugador.scrollx = jugador.x - ((128-(jugador.ancho/2))<<8);

if((((jugador.y-jugador.scrolly)>>8) > 96-(jugador.alto/2)) && ((jugador.y>>8) < alto_mapa-96-(jugador.alto/2)))
jugador.scrolly = jugador.y - ((96-(jugador.alto/2))<<8);
else if ((((jugador.y-jugador.scrolly)>>8) < 96-(jugador.alto/2)) && ((jugador.y>>8) > 96-(jugador.alto/2)))
jugador.scrolly = jugador.y - ((96-(jugador.alto/2))<<8);

PA_ParallaxScrollX(0, jugador.scrollx>>8);
PA_ParallaxScrollY(0, jugador.scrolly>>8);

PA_SetSpriteXY(0, 0, (jugador.x-jugador.scrollx)>>8, (jugador.y-jugador.scrolly)>>8);
}


u8 GetTile(s16 x, s16 y){
if (x < 0) return 1;
return mapa1_2_Map[((y>>3)*128) + (x>>3)];
}

u8 LeftCollision(void){
if( GetTile((jugador.x>>8)+10, (jugador.y>>8)+16) == tile_transparente )
if( GetTile((jugador.x>>8)+10, (jugador.y>>8)+31) == tile_transparente )
return 1;
else
return 0;
else
return 0;
}

u8 RightCollision(void){
if( GetTile((jugador.x>>8)+22, (jugador.y>>8)+16) == tile_transparente )
if( GetTile((jugador.x>>8)+22, (jugador.y>>8)+31) == tile_transparente )
return 1;
else
return 0;
else
return 0;
}

u8 DownCollision(void){
if( GetTile((jugador.x>>8)+16, (jugador.y>>8)+32) == tile_transparente )
return 1;
else
return 0;
}

u8 UpCollision(void){
if( GetTile((jugador.x>>8)+16, (jugador.y>>8)+15) == tile_transparente )
return 1;
else
return 0;
}


void mueve_jugador(void){

if(Pad.Newpress.Up) {
PA_StartSpriteAnimEx(0, 0, 6, 8, 5, ANIM_UPDOWN, -1);
jugador.flip = 0;
jugador.orientacion = 0;
}
else if(Pad.Newpress.Right) {
PA_StartSpriteAnimEx(0, 0, 0, 2, 5, ANIM_UPDOWN, -1);
PA_SetSpriteHflip(0, 0, 0);
jugador.flip = 0;
jugador.orientacion = 1;
}
else if(Pad.Newpress.Down) {
PA_StartSpriteAnimEx(0, 0, 3, 5, 5, ANIM_UPDOWN, -1);
jugador.flip = 0;
jugador.orientacion = 2;
}
else if(Pad.Newpress.Left) {
PA_StartSpriteAnimEx(0, 0, 0, 2, 5, ANIM_UPDOWN, -1);
PA_SetSpriteHflip(0, 0, 1);
jugador.flip = 1;
jugador.orientacion = 3;
}


if((Pad.Released.Left)||(Pad.Released.Up)||(Pad.Released.Down)||(Pad.Released.Right)){

if(Pad.Held.Up) jugador.orientacion = 0;
if(Pad.Held.Right) jugador.orientacion = 1;
if(Pad.Held.Down) jugador.orientacion = 2;
if(Pad.Held.Left) jugador.orientacion = 3;

if( jugador.orientacion == 0 ){
PA_StartSpriteAnimEx(0, 0, 6, 8, 5, ANIM_UPDOWN, -1);
jugador.flip = 0;
}
if( jugador.orientacion == 1 ){
PA_StartSpriteAnimEx(0, 0, 0, 2, 5, ANIM_UPDOWN, -1);
PA_SetSpriteHflip(0, 0, 0);
jugador.flip = 0;
}
if( jugador.orientacion == 2 ){
PA_StartSpriteAnimEx(0, 0, 3, 5, 5, ANIM_UPDOWN, -1);
jugador.flip = 0;
}
if( jugador.orientacion == 3 ){
PA_StartSpriteAnimEx(0, 0, 0, 2, 5, ANIM_UPDOWN, -1);
PA_SetSpriteHflip(0, 0, 1);
jugador.flip = 1;
}
}


if(!((Pad.Held.Left)||(Pad.Held.Right)||(Pad.Held.Up)||(Pad.Held.Down))){
if( jugador.orientacion == 0 )
PA_SetSpriteAnim(0, 0, 7);
if( jugador.orientacion == 1 )
PA_SetSpriteAnim(0, 0, 1);
if( jugador.orientacion == 2 )
PA_SetSpriteAnim(0, 0, 4);
if( jugador.orientacion == 3 )
PA_SetSpriteAnim(0, 0, 1);
}


jugador.x += (Pad.Held.Right*RightCollision() - Pad.Held.Left*LeftCollision())*jugador.velocidad;

if( jugador.x < 0 ) jugador.x = 0;
if( jugador.x >> 8 > ancho_mapa - jugador.ancho )
jugador.x = (ancho_mapa - jugador.ancho) << 8;

jugador.y += (Pad.Held.Down*DownCollision() - Pad.Held.Up*UpCollision())*jugador.velocidad;

if( jugador.y < 0 ) jugador.y = 0;
if( jugador.y >> 8 > alto_mapa - jugador.alto )
jugador.y = (alto_mapa - jugador.alto) << 8;


PA_OutputText(1, 2, 9, "X : %d ", jugador.x >> 8);
PA_OutputText(1, 2, 10, "Y : %d ", jugador.y >> 8);
PA_OutputText(1, 2, 11, "Scrollx : %d ", jugador.scrollx>>8);
PA_OutputText(1, 2, 12, "Scrolly : %d ", jugador.scrolly>>8);

PA_OutputText(1, 2, 4, "col_iz : %d ",!LeftCollision() );
PA_OutputText(1, 2, 5, "col_de : %d ",!RightCollision() );
PA_OutputText(1, 2, 6, "col_ab : %d ",!DownCollision() );
PA_OutputText(1, 2, 7, "col_ar : %d ",!UpCollision() );
}


Tengo todos los sprites y tal bien transformados,todas las carpetas en su sitio y el fallo al compilar es este:

main.c
c:/devkitPro/source/tile_engine/source/main.c: In function 'main':
c:/devkitPro/source/tile_engine/source/main.c:42: error: 'mapa1_1_Info' undeclared (first use in this function)
c:/devkitPro/source/tile_engine/source/main.c:42: error: (Each undeclared identifier is reported only once
c:/devkitPro/source/tile_engine/source/main.c:42: error: for each function it appears in.)
c:/devkitPro/source/tile_engine/source/main.c:43: error: 'mapa1_2_Info' undeclared (first use in this function)
c:/devkitPro/source/tile_engine/source/main.c:44: error: 'mapa1_3_Info' undeclared (first use in this function)
make[1]: *** [main.o] Error 1
make: *** [build] Error 2


Porque me da ese fallo con las imagenes de mapa?

Gracias y salu2
Haz clean, a ver si se te va...
¿Has comprobado que has convertido bien TODAS las imagenes?

Comprueba los archivos all_gfx.c y all_gfx.h y mira que este la variable mapa1_1_Info, mapa1_2_Info, mapa1_3_Info.

Quizas sea culpa de la funcion que usas, supongo que una de las lineas de error es esta:
PA_LoadPAGfxLargeBg(0, 1, mapa1_1);

Puede que la función al ser tan simple, busca segun el nombre que le pones, esto es:
Metes mapa1_1 como nombre
la funcion busca eso y otras tantas variables mas que tienen por nombre mapa1_1_blablabla.
Comprueba que tanto la version de PAlib y PAGfx son las ultimas

A ver que sale [hallow]
anda, ese codigo me suena ;)

Dime de donde lo has bajao y te digo que te pasa (es que no me acuerdo si es mi primer motor 2d... el segundo... )
es el del engine 2d pero con distintos sprites, se trata d un cohe y una carretera
he cambiao las palib y m compila, pero m dice k hay conflicto entre

mueve_jugador();

mueve_fondos();

y

void mueve_fondos(void){

void mueve_jugador(void){

si kito las lineas

mueve_jugador();

mueve_fondos();

me aparece abajo la carretera y el sprite del coche, pero no m aparecen arriba las coordenadas del estilius ni nada, aparece la pantalla de arriva negra

si no quito las lineas esas m aparece la carretera sin el sprite, y en la pantalla de arriba m aparecen las coordenadas del pad y del stylius, pero cuando toco la tactil no s actualizan...

El mensaje del ham mas concretamente es este:

main.c
c:/devkitPro/source/coche/source/main.c: In function 'main':
c:/devkitPro/source/coche/source/main.c:57: warning: implicit declaration of function 'mueve_jugador'
c:/devkitPro/source/coche/source/main.c:59: warning: implicit declaration of function 'mueve_fondos'
c:/devkitPro/source/coche/source/main.c: At top level:
c:/devkitPro/source/coche/source/main.c:67: warning: conflicting types for 'mueve_fondos'
c:/devkitPro/source/coche/source/main.c:59: warning: previous implicit declaration of 'mueve_fondos' was here
c:/devkitPro/source/coche/source/main.c:128: warning: conflicting types for 'mueve_jugador'
c:/devkitPro/source/coche/source/main.c:57: warning: previous implicit declaration of 'mueve_jugador' was here
arm-eabi-g++ -g -mthumb-interwork -mno-fpu -L/c/devkitPro/PAlib/lib -specs=ds_arm9.specs main.o -L/c/devkitPro/PAlib/lib -lpa9 -L/c/devkitPro/libnds/lib -lnds9 -o build.elf
Nintendo DS rom tool 1.33 - Jan 28 2007 21:02:20
by Rafael Vuijk, Dave Murphy, Alexei Karpenko
built ... coche.ds.gba
dsbuild 1.21 - Jan 28 2007
using default loader


El código lo teneis en el primer post, no lo puedo subir pork es mu grande...
Plata escribió:he cambiao las palib y m compila, pero m dice k hay conflicto entre

mueve_jugador();

mueve_fondos();

y

void mueve_fondos(void){

void mueve_jugador(void){

si kito las lineas

mueve_jugador();

mueve_fondos();

me aparece abajo la carretera y el sprite del coche, pero no m aparecen arriba las coordenadas del estilius ni nada, aparece la pantalla de arriva negra

si no quito las lineas esas m aparece la carretera sin el sprite, y en la pantalla de arriba m aparecen las coordenadas del pad y del stylius, pero cuando toco la tactil no s actualizan...

El mensaje del ham mas concretamente es este:



El código lo teneis en el primer post, no lo puedo subir pork es mu grande...


Eso te pasa porque C por defecto, asigna a la funciones el tipo int si no se lo especificas tu:

Por ejemplo, tu puedes declarar una funcion asi:

funcion()
{
}

Pues esa funcion, seria de tipo int y sin argumentos.

Asi que logicamente, si primero se encuentra el uso de una funcion, antes de haberla declarado (esto es, que por ejemplo, uses una funcion desde main y la funcion main se declara antes que la funcion que estas usando) la toma por defecto como de tipo int e incluso si le especificas parametros, por defecto trata de pasar estos tipos a la funcion.

Evidentemente, si despues en la declaracion de la funcion, los tipos no coinciden, te dara error.

Para solucionar este problema, lo que tendrias que hacer, es predeclararla antes del main (podrias ponerlas despues de los includes) de esta forma:

void mueve_fondos(void);

Es decir, de igual forma que ves las declaracions en los ficheros de cabecera (.h), que precisamente, se utilizan para evitar ese problema qu tienes ;)
Lo e puesto como tu dices:

#include
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

void mueve_jugador(void){

void mueve_fondos(void){



El mensaje d error:

El cabron del HAM escribió:main.c
c:/devkitPro/source/coche/source/main.c: In function 'mueve_fondos':
c:/devkitPro/source/coche/source/main.c:31: warning: 'main' is normally a non-static function
c:/devkitPro/source/coche/source/main.c:23: warning: unused variable 'tile_transparente'
c:/devkitPro/source/coche/source/main.c: In function 'LeftCollision':
c:/devkitPro/source/coche/source/main.c:97: error: 'jugador' undeclared (first use in this function)
c:/devkitPro/source/coche/source/main.c:97: error: (Each undeclared identifier is reported only once
c:/devkitPro/source/coche/source/main.c:97: error: for each function it appears in.)
c:/devkitPro/source/coche/source/main.c:97: error: 'tile_transparente' undeclared (first use in this function)
c:/devkitPro/source/coche/source/main.c: In function 'RightCollision':
c:/devkitPro/source/coche/source/main.c:107: error: 'jugador' undeclared (first use in this function)
c:/devkitPro/source/coche/source/main.c:107: error: 'tile_transparente' undeclared (first use in this function)
c:/devkitPro/source/coche/source/main.c: In function 'DownCollision':
c:/devkitPro/source/coche/source/main.c:117: error: 'jugador' undeclared (first use in this function)
c:/devkitPro/source/coche/source/main.c:117: error: 'tile_transparente' undeclared (first use in this function)
c:/devkitPro/source/coche/source/main.c: In function 'UpCollision':
c:/devkitPro/source/coche/source/main.c:124: error: 'jugador' undeclared (first use in this function)
c:/devkitPro/source/coche/source/main.c:124: error: 'tile_transparente' undeclared (first use in this function)
c:/devkitPro/source/coche/source/main.c: In function 'mueve_jugador':
c:/devkitPro/source/coche/source/main.c:134: error: 'jugador' undeclared (first use in this function)
c:/devkitPro/source/coche/source/main.c:200: error: 'ancho_mapa' undeclared (first use in this function)
c:/devkitPro/source/coche/source/main.c:206: error: 'alto_mapa' undeclared (first use in this function)
c:/devkitPro/source/coche/source/main.c: In function 'LeftCollision':
c:/devkitPro/source/coche/source/main.c:104: warning: control reaches end of non-void function
c:/devkitPro/source/coche/source/main.c: In function 'RightCollision':
c:/devkitPro/source/coche/source/main.c:114: warning: control reaches end of non-void function
c:/devkitPro/source/coche/source/main.c: In function 'DownCollision':
c:/devkitPro/source/coche/source/main.c:121: warning: control reaches end of non-void function
c:/devkitPro/source/coche/source/main.c: In function 'UpCollision':
c:/devkitPro/source/coche/source/main.c:128: warning: control reaches end of non-void function
make[1]: *** [main.o] Error 1
make: *** [build] Error 2


eso no era...
salu2
Plata escribió:Lo e puesto como tu dices:



El mensaje d error:



eso no era...
salu2


Vamos a ver, lo primero, te agradecería que si tu problema es que tienes excasos conocimientos de C, trataras de suplirlo por tu cuenta, utilizando manuales, libros y haciendo programas pequeños que te sirvan para ejercitar lo que aprendas y que te ayuden a entender el por qué de las cosas.

Este foro es de Desarrollo y aunque a algunos de nosotros no nos importa explicar las cosas (aparte de tratar de echarnos una mano, unos a otros), es importante que cuando alguien te explique algo, seas capaz de COMPRENDER lo que te explica. Y para eso, hace falta una serie de conocimientos basicos.


Bien, dicha la parrafada... te voy a explicar lo que está sucediendo.


Yo te he dicho (mas o menos) "predeclara la funcion antes del main() y despues de los includes, de esta forma: void funcion(); "

Y tu lo que has hecho, es que te has llevado toda la funcion hacia arriba, por lo que ahora te da OTROS errores.


No es lo mismo, amigo, lo que yo te he dicho y lo que tu has hecho:

Si tu predeclaras una funcion de esta forma:

void manolo(float a);

Esto le indica al compilador que cuando encuentre una funcion en uso manolo(1); en tu codigo, la funcion es de tipo void (sin retorno) y el parametro tiene que ser un float (en este caso, lo normal es que obtuvieras un warning al pasar un 1 entero, pero el compilador lo convertiria a float)


Esto es diferente de abrir llaves, que en este caso, estás definiendo la funcion en ese sitio.

Si te resulta confuso, entiende que la primera forma se utiliza para que el compilador conozca los tipos de la funcion y parametros que encuentre antes del punto donde declaras la funcion.

Ejemplo de uso:

void manolo(int a); // predeclaracion


int main()
{
manolo(5); // uso

return 0;
}

void manolo(int a) // declaracion de la funcion
{
printf("%i\n",a); // un ejemplo
}



Los errores que te aparecen por haber "subido" la funcion a donde los ha hecho, son todo del tipo "variable no declarada". Eso te ocurre porque las variables se declaran DESPUES de esas funciones.


Al igual que en el caso de las funciones, las variables TAMBIEN se pueden predeclarar, solo que en este caso, se les añade la palabra "extern" para indicar que la funcion SE DEFINE en otro punto:


Ejemplo:


extern int pepe; // predeclaracion, no asignar valor aqui

int main()
{
printf("%i\n",pepe); // imprime el valor de pepe
return 0;
}


int pepe=5; // define pepe como int y con el valor 5


Espero que esto te aclare unas cuantas cosas. Mirate los ficheros .h en los programas y veras que utilizan este formato para predeclarar funciones y variables.
estoy estudiando c, pero todavia se poco...
voy a intentar aver si me sale
gracias x aguantarme y salu2
EDITO: Lo hice, no m da problemas al compilar pero en el emu pasa lo mismo k cuando da error.
igual no t entendido, el codigo seria esto:?

#include
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"

void mueve_fondos(void); [COLOR=red]<-----Lineas que añado
void mueve_jugador(void);[/COLOR]

typedef struct{
s32 x, y;
s32 flip;
s32 scrollx;
s32 scrolly;
short orientacion;
short velocidad;
short ancho;
short alto;
}sprite;

sprite jugador;

int ancho_mapa;
int alto_mapa;
short tile_transparente;

void CheckCollisions(void);
u8 GetTile(s16 x, s16 y);
u8 LeftCollision(void);
u8 RightCollision(void);
u8 DownCollision(void);

int main(void) {

PA_Init();
PA_InitVBL();

PA_InitText(1, 0);

PA_LoadSpritePal(0, 0, (void*)sprite1_Pal);

PA_LoadPAGfxLargeBg(0, 1, mapa1_1);
PA_LoadPAGfxLargeBg(0, 2, mapa1_2);
PA_LoadPAGfxLargeBg(0, 3, mapa1_3);

PA_InitParallaxX(0, 0, 256, 256, 256);
PA_InitParallaxY(0, 0, 256, 256, 256);

jugador.x = 0<<8; jugador.y = 0<<8;
jugador.flip = 0;
jugador.scrollx = 0;
jugador.scrolly = 0;
jugador.orientacion = 2;
jugador.velocidad = 512;
jugador.ancho = jugador.alto = 32;

PA_CreateSprite(0, 0,(void*)chara1_Sprite, OBJ_SIZE_32X32,1, 0, jugador.x>>8, jugador.y>>8);
PA_SetSpritePrio(0,0,2);

while(1)
{
mueve_jugador();

mueve_fondos();

PA_WaitForVBL();
}

return 0;
}

void mueve_fondos(void){ <-----Linea que dá problemas


if((((jugador.x-jugador.scrollx)>>8) > 128-(jugador.ancho/2)) && ((jugador.x>>8) < ancho_mapa-128-(jugador.ancho/2)))
jugador.scrollx = jugador.x - ((128-(jugador.ancho/2))<<8);
else if ((((jugador.x-jugador.scrollx)>>8) < 128-(jugador.ancho/2)) && ((jugador.x>>8) > 128-(jugador.ancho/2)))
jugador.scrollx = jugador.x - ((128-(jugador.ancho/2))<<8);


if((((jugador.y-jugador.scrolly)>>8) > 96-(jugador.alto/2)) && ((jugador.y>>8) < alto_mapa-96-(jugador.alto/2)))
jugador.scrolly = jugador.y - ((96-(jugador.alto/2))<<8);
else if ((((jugador.y-jugador.scrolly)>>8) < 96-(jugador.alto/2)) && ((jugador.y>>8) > 96-(jugador.alto/2)))
jugador.scrolly = jugador.y - ((96-(jugador.alto/2))<<8);


PA_ParallaxScrollX(0, jugador.scrollx>>8);
PA_ParallaxScrollY(0, jugador.scrolly>>8);


PA_SetSpriteXY(0, 0, (jugador.x-jugador.scrollx)>>8, (jugador.y-jugador.scrolly)>>8);
}

u8 GetTile(s16 x, s16 y){
if (x < 0) return 1;
return mapa1_2_Map[((y>>3)*128) + (x>>3)];
}

u8 LeftCollision(void){
if( GetTile((jugador.x>>8)+10, (jugador.y>>8)+16) == tile_transparente )
if( GetTile((jugador.x>>8)+10, (jugador.y>>8)+31) == tile_transparente )
return 1;
else
return 0;
else
return 0;
}

u8 RightCollision(void){
if( GetTile((jugador.x>>8)+22, (jugador.y>>8)+16) == tile_transparente )
if( GetTile((jugador.x>>8)+22, (jugador.y>>8)+31) == tile_transparente )
return 1;
else
return 0;
else
return 0;
}

u8 DownCollision(void){
if( GetTile((jugador.x>>8)+16, (jugador.y>>8)+32) == tile_transparente )
return 1;
else
return 0;
}

u8 UpCollision(void){
if( GetTile((jugador.x>>8)+16, (jugador.y>>8)+15) == tile_transparente )
return 1;
else
return 0;
}

void mueve_jugador(void){ <-----Linea que dá problemas

if(Pad.Newpress.Up) {
PA_StartSpriteAnimEx(0, 0, 6, 8, 5, ANIM_UPDOWN, -1);
jugador.flip = 0;
jugador.orientacion = 0;
}
else if(Pad.Newpress.Right) {
PA_StartSpriteAnimEx(0, 0, 0, 2, 5, ANIM_UPDOWN, -1);
PA_SetSpriteHflip(0, 0, 0);
jugador.flip = 0;
jugador.orientacion = 1;
}
else if(Pad.Newpress.Down) {
PA_StartSpriteAnimEx(0, 0, 3, 5, 5, ANIM_UPDOWN, -1);
jugador.flip = 0;
jugador.orientacion = 2;
}
else if(Pad.Newpress.Left) {
PA_StartSpriteAnimEx(0, 0, 0, 2, 5, ANIM_UPDOWN, -1);
PA_SetSpriteHflip(0, 0, 1);
jugador.flip = 1;
jugador.orientacion = 3;
}

if((Pad.Released.Left)||(Pad.Released.Up)||(Pad.Released.Down)||(Pad.Released.Right)){


if(Pad.Held.Up) jugador.orientacion = 0;
if(Pad.Held.Right) jugador.orientacion = 1;
if(Pad.Held.Down) jugador.orientacion = 2;
if(Pad.Held.Left) jugador.orientacion = 3;


if( jugador.orientacion == 0 ){
PA_StartSpriteAnimEx(0, 0, 6, 8, 5, ANIM_UPDOWN, -1);
jugador.flip = 0;
}
if( jugador.orientacion == 1 ){
PA_StartSpriteAnimEx(0, 0, 0, 2, 5, ANIM_UPDOWN, -1);
PA_SetSpriteHflip(0, 0, 0);
jugador.flip = 0;
}
if( jugador.orientacion == 2 ){
PA_StartSpriteAnimEx(0, 0, 3, 5, 5, ANIM_UPDOWN, -1);
jugador.flip = 0;
}
if( jugador.orientacion == 3 ){
PA_StartSpriteAnimEx(0, 0, 0, 2, 5, ANIM_UPDOWN, -1);
PA_SetSpriteHflip(0, 0, 1);
jugador.flip = 1;
}
}


if(!((Pad.Held.Left)||(Pad.Held.Right)||(Pad.Held.Up)||(Pad.Held.Down))){
if( jugador.orientacion == 0 )
PA_SetSpriteAnim(0, 0, 7);
if( jugador.orientacion == 1 )
PA_SetSpriteAnim(0, 0, 1);
if( jugador.orientacion == 2 )
PA_SetSpriteAnim(0, 0, 4);
if( jugador.orientacion == 3 )
PA_SetSpriteAnim(0, 0, 1);
}


jugador.x += (Pad.Held.Right*RightCollision() - Pad.Held.Left*LeftCollision())*jugador.velocidad;

if( jugador.x < 0 ) jugador.x = 0;
if( jugador.x >> 8 > ancho_mapa - jugador.ancho )
jugador.x = (ancho_mapa - jugador.ancho) << 8;

jugador.y += (Pad.Held.Down*DownCollision() - Pad.Held.Up*UpCollision())*jugador.velocidad;

if( jugador.y < 0 ) jugador.y = 0;
if( jugador.y >> 8 > alto_mapa - jugador.alto )
jugador.y = (alto_mapa - jugador.alto) << 8;


PA_OutputText(1, 2, 9, "X : %d ", jugador.x >> 8);
PA_OutputText(1, 2, 10, "Y : %d ", jugador.y >> 8);
PA_OutputText(1, 2, 11, "Scrollx : %d ", jugador.scrollx>>8);
PA_OutputText(1, 2, 12, "Scrolly : %d ", jugador.scrolly>>8);

PA_OutputText(1, 2, 4, "col_iz : %d ",!LeftCollision() );
PA_OutputText(1, 2, 5, "col_de : %d ",!RightCollision() );
PA_OutputText(1, 2, 6, "col_ab : %d ",!DownCollision() );
PA_OutputText(1, 2, 7, "col_ar : %d ",!UpCollision() );
}
Plata escribió:estoy estudiando c, pero todavia se poco...
voy a intentar aver si me sale
gracias x aguantarme y salu2
EDITO: Lo hice, no m da problemas al compilar pero en el emu pasa lo mismo k cuando da error.
igual no t entendido, el codigo seria esto:?



Si, seria asi.¡ como lo haces :)

Lo otro, no se que será: quiza haya alguna incompatibilidad con el emulador que estes usando.

Los emuladores estan bien para algunos usos, pero la unica forma de saber que todo funciona bien, es probando en consola (por algo cree la utilidad Wifiloader y tengo una SD destrozada de hacer miles de cambios probando mis programas (tanto en GP2X, como en NDS))

Yo te recomendaria que trataras de hacer ejemplos lo mas sencillos que puedas para practicar y ver que es lo que va bien o va mal con el emulador.

Por cierto, usa "make clean" para eliminar los ficheros precompilados que puedan dar problemas, por si las moscas.

Lo que no me has dicho, es si obtienes una pantalla en negro o que tipo de problema tienes al ejecutar ese codigo (yo no estoy familiarizado con las PA Lib, pero seguro que otro podria decirte si teienes algun fallo de inicializacion de ls libs)
no creo k sea eso pork estoy con otros homebrew y no m da problema.

ami me aparece todo normal, pero no m aparece el sprite y el fondo y todo eso no s mueven :(
salu2
11 respuestas