Página 1 de 2
Ir a la página 1, 2  Siguiente
 

Mensaje [Homebrew] Por Favor Miren El Codigo O Me Suicido...

#1  Jean La Montarde 27 Agosto 2009, 08:24 PM

Llevo cerca de 72 horas ininterrumpidas intentando crear una gravedad de plataforma 2D y bueno , no lo he conseguido, entre una cosa y otra el personaje caia hasta la coordenada Y de la plataforma pero al salirse en la coordenada X, donde estaba el fin de la plataforma, este no caia. Bueno es un pequeño paso para el homebrew pero un gran paso para mi ignorancia supina y automutilacion mental que me produce el C. Tras este fracaso decido suprimir cualquier rastro de esta "gravedad" defectuosa por lo que SE SUPONE el personaje deberia flotar indefinidamente y poder variar su coordenada X hacia derecha o izquierda con el pad...

Bueno , pues no quiere, ahora cae hasta el limite del "suelo" de la pantalla y ... estoy hasta los ********** ****** ...

Mirad el codigo a ver si alguien encuentra algo

//----------------------------------------------------------------------*/
//    BBVSGG  20-8-09
//    Jean La Montarde     La cueva de las mandragoras
//----------------------------------------------------------------------*/
#include "sgl.h"
#include "sprites.h"
#define     SystemWork      0x060ffc00              /* System Variable Address */
#define     SystemSize      (0x06100000-0x060ffc00) /* System Variable Size */
///Introduccion de los graficos en la memoria///
static void set_sprite(PICTURE *pcptr, Uint32 NbPicture, TEXTURE *texptr)
{
    TEXTURE *txptr;
 
    for(; NbPicture-- > 0; pcptr++){
        txptr = texptr + pcptr->texno;
        slDMACopy((void *)pcptr->pcsrc,
            (void *)(SpriteVRAM + ((txptr->CGadr) << 3)),
            (Uint32)((txptr->Hsize * txptr->Vsize * 4) >> (pcptr->cmode)));
    }
}
///Introduccion de los graficos en la memoria///

static cabecera(void)
{
    slPrint("BBVSGG     Jean La Montarde", slLocate(1,1));
    slPrint("------------------------------------------",slLocate(0,2));
    slPrint("La cueva de las mandragoras     20-8-09",slLocate(1,26));
}

void ss_main(void)
{  
    static FIXED pos[XYZ];
    static FIXED limpos[XY];
    static FIXED limneg[XY];;
    slInitSystem(TV_320x224,tex_sprites,1);
    set_sprite(pic_sprites,14,tex_sprites);
    FIXED posbg[XYZS]={toFIXED(0),toFIXED(0),toFIXED(169),toFIXED(1)};
    FIXED posplat[XYZS]={toFIXED(0),toFIXED(50),toFIXED(169),toFIXED(1)};
    pos[X]=toFIXED(0.0);
    pos[Y]=toFIXED(0.0);
    limpos[X]=toFIXED(145);
    limpos[Y]=toFIXED(90);
    limneg[X]=toFIXED(-145);
    limneg[Y]=toFIXED(-90);
    ANGLE ang=DEGtoANG(0.0);
    cabecera();
    Uint32 spriteID=1;
    Uint32 corriendo=2;
    Uint32 corriendo_flip=6;
    Uint8 index=0;
    
    while(TRUE)
        {
        slDispSprite(posplat, attr_sprites + 0, ang);
        slDispSprite(posbg, attr_sprites + spriteID, ang);
        posbg[X]=pos[X];
        posbg[Y]=pos[Y];
        if(pos[X]<limneg[X])pos[X]=limneg[X],spriteID=5;
        if(pos[X]>limpos[X])pos[X]=limpos[X],spriteID=1;
        if(pos[Y]>limneg[Y])pos[Y]=limneg[Y];
        if(pos[Y]<limpos[Y])pos[Y]=limpos[Y];
        if( (Smpc_Peripheral[index].data & PER_DGT_KR) == 0)
        {
            corriendo++;
            if(corriendo>=5)corriendo=2;
            spriteID=corriendo;
            pos[X]=pos[X]+toFIXED(4.0);
        }
        if( (Smpc_Peripheral[index].data & PER_DGT_TA) == 0)
        {
            pos[X]=toFIXED(0.0);
            pos[Y]=toFIXED(0.0);
        }
        if( (Smpc_Peripheral[index].pull & PER_DGT_KR) == 0)
        {
            spriteID=1;
        }
        if( (Smpc_Peripheral[index].data & PER_DGT_KL) == 0)
        {
            corriendo_flip++;
            if(corriendo_flip>=9)corriendo_flip=6;
            spriteID=corriendo_flip;
            pos[X]=pos[X]-toFIXED(4.0);
        }
        if( (Smpc_Peripheral[index].pull & PER_DGT_KL) == 0)
        {
            spriteID=5;
        }
        slSynch();
        }
}
////CABECERA DE COMPILACION///
extern Uint32   _bstart, _bend;
int main(void)
{
    Uint8    *dst;
    Uint16  i;
    for(dst = (Uint8 *)&_bstart; dst < (Uint8 *)&_bend; dst++)
    {
        *dst = 0;
    }
    for(dst = (Uint8 *)SystemWork, i = 0; i < SystemSize; i++)
    {
        *dst = 0;
    }
    ss_main();
}
////CABECERA DE COMPILACION///



Aqui la ISO para que alguien lo pruebe en emulador , a ver si el problema es de mi emulador...


PD: Por curiosidad , si a vosotros el personaje se cae tambien como me ocurre a mi , por favor , probad a pulsar A , si todo marcha bien el personaje deberia de volver al centro de la pantalla . Hacedme el favor de decidme que ocurre al soltarlo , deberia caer hacia el suelo de nuevo , pero aqui en mi ordenador en vez de caer , casi se teletransporta...






AINS, tengo que dejar el homebrew es malo para mis nervios
 



 
avatar
spain.png Jean La Montarde Sexo: Masculino
SEGA Fan
SEGA Fan
 
Registrado: Julio 2009
Mensajes: 181
  • Volver arriba Página inferior
 

Mensaje Re: Por Favor Miren El Codigo O Me Suicido...

#2  Indiket 27 Agosto 2009, 09:47 PM

Mmm es raro, cosillas:

static FIXED limneg[XY];; //sobra un ;

if(pos[X]<limneg[X])pos[X]=limneg[X],spriteID=5;
if(pos[X]>limpos[X])pos[X]=limpos[X],spriteID=1;

Después de limneg y limpos, en vez de coma debería de ser un ; (son dos instrucciones supongo). Si es así, esas dos instrucciones necesitarian unos corchetes.

Pregunta: posbg es el muñeco? Si es así, pk no dibujar pos en vez de posbg? (con lo cual posbg ya no tendría sentido).
 



 
avatar
blank.gif Indiket Sexo: Masculino
Administrador
Administrador
Donante Unreleased €
DC Coder
 
Registrado: May 2009
Mensajes: 257
  • Volver arriba Página inferior
 

Mensaje Re: Por Favor Miren El Codigo O Me Suicido...

#3  Jean La Montarde 27 Agosto 2009, 11:04 PM

Raro de cojones...  prueba la iso y fliparas XD

respecto a lo primero pos si , se me habrá colado un ; pero dudo que sea eso...XD

en cuanto a lo segundo si , se supone que cada IF tiene dos instrucciones si se da la situación y vamos en teoría funciona bien...

La pregunta , pues porque por alguna razón desconocida , la saturn no puede sumar valores a coordenadas empleadas para el dibujo directamente , es decir si uso posbg para determinar la posición inicial de un sprite, no puedo utilizar ese vector/función(no se cual seria la definición apropiada) para sumar coordenadas , así que por cada elemento que se use hay que usar otro vector/función para "moverlo" o localizarlo espacialmente(mi idea para la gravedad , determinar con coordenadas donde estaba la plataforma, pero no he encontrado la manera...XD)

Por favor probar lo del boton A , si baja "suavemente" o sin animar
 



 
avatar
spain.png Jean La Montarde Sexo: Masculino
SEGA Fan
SEGA Fan
 
Registrado: Julio 2009
Mensajes: 181
  • Volver arriba Página inferior
 

Mensaje Re: Por Favor Miren El Codigo O Me Suicido...

#4  Indiket 27 Agosto 2009, 11:18 PM

Quizá sea porqué declaras como static las variables (pos). Si no me acuerdo mal, static era como que sólo puedes disponer de una instancia de esa variable en memoria. Si no es necesario, probaria de quitar el tag static.
 



 
avatar
blank.gif Indiket Sexo: Masculino
Administrador
Administrador
Donante Unreleased €
DC Coder
 
Registrado: May 2009
Mensajes: 257
  • Volver arriba Página inferior
 

Mensaje Re: Por Favor Miren El Codigo O Me Suicido...

#5  Ryo Suzuki 28 Agosto 2009, 01:37 AM

Me encantan estos post, aunque todavia no entiendo casi nada

E indiket metiendo baza... colega! te veo programando pa Saturn en un futuro
 




____________
Ayúdame a mantener este y otros proyectos, pulsa aquí

sega_firma

Choose a job you love, and you will never have to work a day in your life. (Confucius)
 
avatar
japan.png Ryo Suzuki Sexo: Masculino
Alfonso Martínez González
Webmaster
Webmaster
Shenmue Freak
 
Registrado: Agosto 2005
Ubicación: 難波
Mensajes: 10781
  • Volver arriba Página inferior
 

Mensaje Re: Por Favor Miren El Codigo O Me Suicido...

#6  dmc 28 Agosto 2009, 01:46 AM

Yo es que aún estoy en pascal.  
 



 
avatar
spain.png dmc Sexo: Masculino
SEGA Fan
SEGA Fan
 
Registrado: Junio 2009
Ubicación: Castilla
Mensajes: 229
  • Volver arriba Página inferior
 

Mensaje Re: Por Favor Miren El Codigo O Me Suicido...

#7  Jean La Montarde 28 Agosto 2009, 01:48 AM

Ryo (y quien sea) si tienes un rato , prueba la ISO y responded a estas preguntas

-¿Se queda el personaje en el centro?
-¿Baja suavemente o instantanemente?

Gracias por vuestro tiempo...

Indiket , mañana probare si me da tiempo que tengo parranda , sino ya hasta mediados de septiembre nada , tengo que perder el tiempo un rato con los examenes de septiembre XDD
 



 
avatar
spain.png Jean La Montarde Sexo: Masculino
SEGA Fan
SEGA Fan
 
Registrado: Julio 2009
Mensajes: 181
  • Volver arriba Página inferior
 

Mensaje Re: Por Favor Miren El Codigo O Me Suicido...

#8  Indiket 28 Agosto 2009, 02:26 AM

- Sí, está en el centro mientras aprietas A.
- Baja de golpe al dejar la A.

Facundo sabrá más que yo qué es lo que falla

Ryo, los caminos del homebrew son inexcrutables! Y dmc, Pascal no lo aprendí pero no es nada despreciable!!!
 



 
avatar
blank.gif Indiket Sexo: Masculino
Administrador
Administrador
Donante Unreleased €
DC Coder
 
Registrado: May 2009
Mensajes: 257
  • Volver arriba Página inferior
 

Mensaje Re: Por Favor Miren El Codigo O Me Suicido...

#9  dmc 28 Agosto 2009, 03:12 AM

Indiket escribió: [Ver mensaje]
- Sí, está en el centro mientras aprietas A.
- Baja de golpe al dejar la A.

Facundo sabrá más que yo qué es lo que falla

Ryo, los caminos del homebrew son inexcrutables! Y dmc, Pascal no lo aprendí pero no es nada despreciable!!!


Si el gesto era porque no podía ayudar. Pues no mola hacer un ajedrez y esas cosas.  
 



 
avatar
spain.png dmc Sexo: Masculino
SEGA Fan
SEGA Fan
 
Registrado: Junio 2009
Ubicación: Castilla
Mensajes: 229
  • Volver arriba Página inferior
 

Mensaje Re: Por Favor Miren El Codigo O Me Suicido...

#10  FacundoARG 28 Agosto 2009, 05:14 AM

Hola, Jean. Priemo felicitaciones, esta muy bueno el proyecto 8).
 Ultimamente estoy enquilombado (liado para uds), con trabajo, tesis, estudio, etc. Ya tengo casi listos los tutos que faltan, pero como simepre me queda algun detalle por cerrar.  

No desesperes, yo estuve 1 Mes y medio para aprender el Sistema de coalisiones (es lo que vos tratas de hacer) y ademas tenía en ese entonces 3 años de Desarrollo en C/C++, Pascal, Basic, Java, Assambler y PHP. Pero todo esto no es necesario    . También va para dmc, todos los lenguajes son en un 50% iguales, lo que ustedes deben aprender es a Programar, no con un solo lenguaje sino entender los metodos de la programación. Es simple y pero nada que lleve poco tiempo, luego de que logren este objetivo va a apreder a usar cualquier lenguaje en muy poco tiempo. Espero comprendan la idea.

Volviendo a lo tuyo y darte una posible solución. El error yo lo veo aca

   if(pos[Y]>limneg[Y])pos[Y]=limneg[Y];
    if(pos[Y]<limpos[Y])pos[Y]=limpos[Y];


Estas lineas controlan supuestamente la posicion en Y de tu muñeco. El problema es el siguente, más justamente en la segunda linea.

Más arriba (en el código) declaraste, que limpos[Y]=90. Bien. Luego si apretas "A", se pone en 0. Pero......
Cuando vuelve el bucle al inicio. Pregunta el siguente if que escribiste

     if(pos[Y]<limpos[Y])pos[Y]=limpos[Y];

Si lo reemplazas por los valores en ese instante sería lo siguiente:

   si (0<90)  entonces    pos[Y]=90;

Comprendes, lo que estoy poniendo. Osea, luego de esta linea (arriba), pos[Y] vale 90, y es por eso que justamente cuando suletas la A, se vuelve al fondo de la pantalla. Lo que lograras con esto si comentas la linea ( // ) sera poner el muñeco en la posicion 0 en Y. Pero lo que vos queres es gravedad, entonces debes incrementar en cada ciclo, la variable Y. De esta forma
pos[Y]=pos[Y] + FIXED(1.0);

Esto irá incrementando en un pixel, la posicion en Y, lo que te va a dar la sensacion de que se esta cayendo    .
Luego faltaría (te lo dejo a vos) que controles, que no se te escape de la pantalla, en un pozo infinito.

Lo que tenes que hacer, para la próxima es:

1 - Siempre los calculos se hacen antes de pintar, por ende; tenes que poner las linas de slPutDisp justo antes del slSynch()

2 - Estas aplicaciones son chicas, entonces tenes que subir el proyecto zipeado, debe pesar 200kb, o enviarmelo por MP.

3 - Tenes que escribir comentario (usando // ) , como suelo hacer yo en los tutoriales; asi comprendemos mejor el código.


PD - Yo tampoco nací sabiendo, se aprende de muchisimos errores; y hasta a veces es bueno comenzar desde cero   . Y también faltan muchas cosas por aprender, por ejemplo el control de los frames en Saturn.
 




____________
SegaSaturn Developer Addict
 
avatar
argentina.png FacundoARG Sexo: Masculino
Colaborador SEGASATURNO
Colaborador SEGASATURNO
Professional Videogamer Coder
Donante Unreleased €
 
Registrado: Diciembre 2006
Ubicación: San Luis
Mensajes: 691
  • Volver arriba Página inferior
 


Ocultar¿Este tema fue útil?
Compartir este tema
Correo a un amigo Facebook Twitter Windows Live Favorites MySpace del.icio.us Digg SlashDot google.com LinkedIn StumbleUpon Blogmarks Diigo reddit.com Blinklist co.mments.com
technorati.com DIGG ITA linkagogo.com meneame.net netscape.com newsvine.com yahoo.com Fai Informazione Ok Notizie Segnalo Bookmark IT fark.com feedmelinks.com spurl.net

Página 1 de 2
Ir a la página 1, 2  Siguiente