Mi primer ejemplo en C

Par aceki

Master (147)

Portrait de aceki

03-01-2018, 01:10

Si bien es copia de alguna cosas, es algo que hice entendiéndolo, el chiste es el siguiente:

#include 
#include 


/* Constantes */
#define logop (TINY) 0 
#define sp_trig (TINY) 1 

/* prototipos, definen la funciones antes de ser utilizados*/
VOID r_print();

static TINY cora[] = { 
0x18,0x24,0x24,0x18,0x24,0x5A,0x42,0x3C,
0x00,0x18,0x18,0x00,0x00,0x24,0x3C,0x00}; 

static TINY col[] = {
0x08,0x48,0x08,0x08,0x08,0x08,0x08,0x08,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x04,0x44,0x04,0x04,0x04,0x04,0x04,0x04,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}; 

VOID r_print(x,y) /* Funcion para el sprite*/
int x;
int y;
{
	glocate(x,y);
	inispr((TINY)2);
	sprite((TINY)0, cora);
	colspr((TINY)0, col);
	putspr((TINY)0, x, y,(TINY)0, (TINY)0);
}


main(){
	int i;
	int h;
	int joystickInput;
	screen((TINY)5); 
	ginit(); 
	color((TINY)15, (TINY)1, (TINY)1); 
	
	cls(); 
	
	i = 120;
	h = 120;
	
	joystickInput = 0;
	

	r_print(i,h);
	
 	while( 1 == 1) /* while infinito */
	/* aca empieza el movimiento del sprite*/
	{
		joystickInput = gtstck(0);
		if ( joystickInput == 3 )
		{
			i = i + 1;
			r_print(i,h); 
		}
		joystickInput = 0;
		
		joystickInput = gtstck(0);
		if ( joystickInput == 1 )
		{
			h = h - 2;
			r_print(i,h); 
		}
		joystickInput = 0;
		
		joystickInput = gtstck(0);
		if ( joystickInput == 5 )
		{
			h = h + 1;
			r_print(i,h); 
		}
		joystickInput = 0;
		
		joystickInput = gtstck(0);
		if ( joystickInput == 7 )
		{
			i = i - 2;
			r_print(i,h); 
		}
		joystickInput = 0;
		
		
	}
				
	return 0;
}

Pero, tengo dos problemas dos, el primero es el refresco del sprite, tengo parpadeo cada vez que lo muevo, como puedo quitarlo? el segundo, es lo lento del avance, principalmente en izquiera y abajo, me falta algo mas para que lo haga a la velocidad de derecha y arriba?

Saludos!!

!login ou Inscrivez-vous pour poster

Par santiontanon

Paragon (1519)

Portrait de santiontanon

03-01-2018, 17:44

Pues yo no he programado nunca en C en MSX (todo lo hago en assembler), pero algo rápido que veo es que no creo que haga falta llamar a "r_print" cada vez que mueves el sprite, no? esto me da la sensación que hace un montón de cosas extra. No es suficiente con simplemente llamar a "putspr"?

Par aceki

Master (147)

Portrait de aceki

03-01-2018, 18:29

santiontanon wrote:

Pues yo no he programado nunca en C en MSX (todo lo hago en assembler), pero algo rápido que veo es que no creo que haga falta llamar a "r_print" cada vez que mueves el sprite, no? esto me da la sensación que hace un montón de cosas extra. No es suficiente con simplemente llamar a "putspr"?

Todo es posible, desconozco la funcion, por eso preguntaba a ver como podia evitar el parpadero.

Par aceki

Master (147)

Portrait de aceki

04-01-2018, 02:01

aceki wrote:
santiontanon wrote:

Pues yo no he programado nunca en C en MSX (todo lo hago en assembler), pero algo rápido que veo es que no creo que haga falta llamar a "r_print" cada vez que mueves el sprite, no? esto me da la sensación que hace un montón de cosas extra. No es suficiente con simplemente llamar a "putspr"?

Todo es posible, desconozco la funcion, por eso preguntaba a ver como podia evitar el parpadero.

Te confirmo que si, el putspr era la solucion!! muchas gracias!

Par santiontanon

Paragon (1519)

Portrait de santiontanon

04-01-2018, 05:38

Pues de nada!!! me alegro que funcione!! Yo ya hace tiempo que me pica la curiosidad por mirarme el C de MSX, a ver que tal! Smile Un dia de estos me tengo que poner!!

Par aceki

Master (147)

Portrait de aceki

04-01-2018, 13:34

Gracias por la ayuda, finalmente pude hacer que se mueva, y que con espaciadora salga, lo importante es que entendi todo jaja, obvio ayuda de por medio de mi novia que anda en desarrollo.

Saludos!!