Anuncios Google

parallax

Buenas:

Haber este problema:

Tengo dos fondos utilizando parallax, y quiero poner un sprite por ejemplo en la coordenada x: 284 y: 85 , se salen de la pantalla, lo se, pero quiero que al moverme a la derecha o a la izquierda el sprite se mueva como el fondo, a ver si me explico:

El parallax me deja mover los fondos y asi el efecto de que se mueve el personaje, pero quiero poner otro sprite que siga con el parallax y que si se sale de la pantalla al moverme a la derecha hasta que en la pantalla aparezca el sprite, pero que se mueva a la misma velocidad que mi sprite y que si salta el sprite ese se valla para abajo y si bajo para abajo el sprite suba.

He intentado hacerlo pixel a pixel calculando el movimiento de mi sprite y cambiarle el valor al otro para sumar o restar, nada. Y si muevo el sprite un pixel si el otro se movio se mueve demasiado lento respecto al personaje.

Ayuda llevo casi 12h con el problema. Gracias.


Be Libre my Friend.


Anuncios Google

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de OdnetninI

Que se mueva el personaje,

Que se mueva el personaje, mas bien la sensacion ya esta hecho, me refiero a poner un sprite en esas coordenadas y que el fondo al moverse mueva el sprite a la misma velocidad.

Imaginamos un cuadrado en un fondo de 512x512 y esta en als coordenadas 15,25 y quiero crear un sprite en la coordenada 456,229 y que al mover el fondo el sprite se mueve en la misma direccion y velocidad. Pero no el cuadrado el cuadrado ya esta hecho, sino el sprite en las coordenadas 456,229


Be Libre my Friend.

Imagen de OdnetninI

a ver, yo muevo los fondos

a ver, yo muevo los fondos asi:

	PA_InitParallaxX(0, 0, 0, 256, 256);
if ((((mario.x-mario.scrollx)>>8) > 112) && ((mario.x>>8) < 2000-144)){ // Scroll more...
			mario.scrollx = mario.x - (112<<8);
		}
		if ((((mario.x-mario.scrollx)>>8) < 112) && ((mario.x>>8) > 64)){
			mario.scrollx = mario.x - (112<<8);
		}
 
		if ((((mario.y-mario.scrolly)>>8) > 64) && ((mario.y>>8) < 768-128)){ // Scroll more...
			mario.scrolly = mario.y - (64<<8);
		}
		if ((((mario.y-mario.scrolly)>>8) < 64) && ((mario.y>>8) > 64)){
			mario.scrolly = mario.y - (64<<8);
		}
mario.screenx = (mario.x-mario.scrollx)>>8; 
 
 PA_ParallaxScrollX(0, mario.scrollx>>8);		
		PA_SetSpriteXY(0, 0, mario.screenx, mario.screeny);


Be Libre my Friend.

Imagen de kNightFox

Scroll...

Si el sprite mide 8x8 el codigo seria....

		// Lee el teclado
		scanKeys();
		keys = keysHeld();
		if (keys & KEY_UP) y --;
		if (keys & KEY_DOWN) y ++;
		if (keys & KEY_LEFT) x --;
		if (keys & KEY_RIGHT) x ++;
 
		// Limites del movimiento
		if (x < 0) x = 0;
		if (x > 767) x = 767;
		if (y < 0) y = 0;
		if (y > 511) y = 511;
 
		// Posicion del fondo
		bg_x = (x - 128);
		if (bg_x < 0) bg_x = 0;
		if (bg_x > 512) bg_x = 512;
		bg_y = (y - 96);
		if (bg_y < 0) bg_y = 0;
		if (bg_y > 320) bg_y = 320;
 
		// Posicion del Sprite
		spr_x = (x - bg_x) - 4;
		spr_y = (y - bg_y) - 4;
		NF_MoveSprite(1, 0, spr_x, spr_y);
 
		NF_SpriteOamSet(1);				// Actualiza el Array del OAM
 
		swiWaitForVBlank();				// Espera al sincronismo vertical
 
		oamUpdate(&oamSub);				// Actualiza a VRAM el OAM Secundario
 
		NF_ScrollBg(1, 2, bg_x, bg_y);	// Actualiza el scroll

 

Adaptalo a tu gusto...


Nuestra web oficial:
http://www.nightfoxandco.com/
 
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
 
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.

 

Imagen de OdnetninI

Pero eso es para mover el

Pero eso es para mover el fondo respecto al sprite que manda, yo quiero mover otro sprite diferente.

Imagen de kNightFox

Mas ejemplos...

Es que se os tiene que dar todo bien mascadito eh?

		// Calcula la posicion de los coches segun la pantalla
		for (screen = 0; screen < 2; screen ++) {
			// Calcula todos los coches del circuito
			for (n = 0; n < CAR_MAXNUM; n ++) {
				// Excepto si es el coche principal
				if (n != id) {
					// Calcula la posicion del coche en pantalla
					CAR[n].x = (CAR[n].fx >> 8);
					CAR[n].y = (CAR[n].fy >> 8);
					CAR[n].sx[screen] = ((CAR[n].x - TRACK.x[screen]) - CAR_SPRITE_WIDTH);
					CAR[n].sy[screen] = ((CAR[n].y - TRACK.y[screen]) - CAR_SPRITE_HEIGHT);
					// Posiciona el Sprite del coche en la pantalla
					// si esta en el campo de vision de la camara
					if (
						((CAR[n].x - TRACK.x[screen]) < -(CAR_HEIGHT))
						||
						((CAR[n].y - TRACK.y[screen]) < -(CAR_HEIGHT))
						||
						((CAR[n].x - TRACK.x[screen]) > (256 + CAR_HEIGHT))
						||
						((CAR[n].y - TRACK.y[screen]) > (192 + CAR_HEIGHT))
						) {
							// Esconde el Sprite
							CAR[n].sx[screen] = -64;
							CAR[n].sy[screen] = -64;
							CAR[n].on_screen[screen] = false;
					} else {
						CAR[n].on_screen[screen] = true;
					}
				}
			}
		}

Ejemplo que sirve para las dos pantallas a la vez y para tantos esprites como te de la gana, incluido el principal...


Nuestra web oficial:
http://www.nightfoxandco.com/
 
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
 
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.

 

Imagen de OdnetninI

3 cosas: 1-No te cabrees

3 cosas:

1-No te cabrees porque los novatos tenemos que aprender, aunque tengamos muchas dudas solo aprender

2-Ese ejemplo esta muy bien

3-Entiendo todo excepto que significaria track(pista), pero no lo comprendo.


Be Libre my Friend.

Imagen de kNightFox

No me cabreo por que seais

No me cabreo por que seais novatos, me cabrea que pidais el codigo hecho en vez de entender que hace un codigo y adaptarlo. Y por cierto, si no eres capaz con el primer ejemplo de hacer que un sprite siga el scroll, casi que aparques esto y empieces con cosas mas faciles... Por que es:

x en pantalla = X donde esta en sprite en el fondo - posicion X actual del fondo;

si (x en pantalla > 256 ) x en pantalla = 256;

si (x en pantalla < -64) x en pantalla = -64;

posicion del sprite en pantalla (x en pantalla, y en pantalla);

Y en serio, estas formulas son de lo mas sencillito que te vas a encontrar en programacion (es una simple resta y una verificacion de rango), y si aun no eres capaz de resolverlas por ti mismo, es sintoma de que lo que estas haciendo de momento te va grande.


Nuestra web oficial:
http://www.nightfoxandco.com/
 
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
 
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.

 

Imagen de kNightFox

Pues si usa el parallax de

Pues si usa el parallax de PALIb que no le pase nada... Mas que nada por que el calculo de los fondos respecto al principal lo hace internamente y le tocara o leer el registro de scoll de la capa o calcularlo a mano. O mover el a mano las capas sin parallax de PALIB


Nuestra web oficial:
http://www.nightfoxandco.com/
 
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
 
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.

 

Imagen de OdnetninI

no, se no se, vere que puedo

no, se no se, vere que puedo hacer, aunque yo creo que en ningun momento pedi codigo, pero bueno

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.