› Foros › Multiplataforma › Desarrollo
#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() );
}
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
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
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...
#include
#include "gfx/all_gfx.c"
#include "gfx/all_gfx.h"
void mueve_jugador(void){
void mueve_fondos(void){
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
Plata escribió:Lo e puesto como tu dices:
El mensaje d error:
eso no era...
salu2
#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:?