Anuncios Google

Problema extraño con el scroll

Me ocurre un error extraño en el scroll, quiero que el fondo se mueva
con el sprite, y eso es lo que ocurre en el eje x. Pero en el eje y
funciona de forma inversa (pulsas arriba y se va a abajo, pulsas abajo
y se va a arriba. Curiosamente lo mismo pasa con el sprite cuando antes
no pasaba)

Da igual del modo que lo ponga, siempre funciona a la inversa.

Tengo las siguientes variables para el scroll:

s32 scrollx = 0;
s32 scrolly = 0;

Y el siguiente codigo para mover el sprite/ desplazar la pantalla:

if (mouse.velocidad == 0){
mouse.velocidad++;
}

// Esto es para evitar velocidades negativas. El sprite tiene su propia velocidad se me olvido comentar...

if (mouse.velocidad == 10){
mouse.velocidad--;
}

// Esto es para ponerle un limite a la velocidad

mouse.velocidad += Pad.Newpress.R - Pad.Newpress.L;

// Esto es para cambiar la velocidad...

mouse.x += (Pad.Held.Right - Pad.Held.Left)*mouse.velocidad;
mouse.x += (Pad.Held.A - Pad.Held.Y)*mouse.velocidad;

// Mover el sprite en su rango x...

mouse.y += (Pad.Held.Up - Pad.Held.Down)*mouse.velocidad;
mouse.y += (Pad.Held.B - Pad.Held.X)*mouse.velocidad;

//mover el sprite en su rango y...

PA_SetSpriteXY(0,0,mouse.x,mouse.y);

// Centra el sprite en las variables anteriores que hemos modificado para asi moverlo...

scrollx += (Pad.Held.Right - Pad.Held.Left)*mouse.velocidad;
scrolly += (Pad.Held.Up - Pad.Held.Down)*mouse.velocidad;

// Lo mismo del sprite pero para el scroll, lo de la velocidad es por si el sprite va mas rapido, que el fondo tambien vaya

PA_BGScrollXY(0,2,scrollx,scrolly);

// Hago scroll usando las variables anteriores que hemos modificado...

Alguna idea?

Saludos


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.

Lol, la que se ha montado

Lol, la que se ha montado aqui en un momento jeje.

 

Ya lo solucione, lo que hice fue invertir el signo, seria:

 

scrolly -= (Pad.Held.Up - Pad.Held.Down)*mouse.velocidad;

 

De esa forma, al pulsar arriba siempre saldra negativo y al pulsar abajo saldra siempre positivo... Lo mismo es, invertir los controles como ha dicho exterminator...

 

Bueno gracias por comentar.

 

Saludos

Imagen de exterminator

Muy sencillo

fíjate que las coordenadas de la DS, tiene la peculiaridad de que la parte superior derecha de la pantalla es el punto (0,0), ¿no?. Si nos centramos en la coordenada Y, la esquina inferior izquierda es el punto (0,191). ¿Que deducimos con esto? Que al mover hacia abajo, la coordenada Y aumenta de forma positiva.

Ahora bien, los comandos Pad.Held devuelven dos clases de variables: 1 si se pulsa y 0 si no. Ahora veamos tu ecuación:

scrolly += (Pad.Held.Up - Pad.Held.Down)*mouse.velocidad;

Comprueba por tí mismo. Al pulsar arriba, (evidentemente no se puede pulsar abajo a la vez), la ecuación sería esto:

scrolly += (1 - 0)*mouse.velocidad;

Esto daría un resultado positivo, que al sumar a la coordenada, aumentaría positivamente, que en la coordenada Y se traduce como ¡ir hacia abajo!. Lo mismo para el sprite.

¿Como solucionar esto? Simplemente cambiando el orden de los Pad.Held:

scrolly += (Pad.Held.Down - Pad.Held.Up)*mouse.velocidad;

Salu2

PD: Sé que te he dado el rollo, pero si no te explico el porqué va bien haciendo esto, volverás a tener el mismo problema en otro proyecto.

PPD:Si no te importa para la próxima utiliza el comando código del editor.


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.

Imagen de exterminator

Lo de las esquinas

no te lo voy a negar, lo tenía todo del revés y al borrar se me olvidó fijarme, mea culpa :P

Lo que sí te voy a discutir es lo de la ecuación. Si es como tú escribes, si lo usamos en un emulador en el ordenador, donde sí se puede pulsar arriba y abajo a la vez, siguiendo tu ecuación pasaría esto:

scrolly += (-1) - (+1)*mouse.velocidad;

scrolly += (-1)+(-1)*mouse.velocidad;

scrolly += (-2)*mouse.velocidad;

En consecuencia, iría hacia arriba al doble de velocidad. Sin embargo, yo pulso arriba y abajo simultáneamente, y no se mueve. Lógico si empleamos esta ecuación:

scrolly += (1 - 1)*mouse.velocidad;

scrolly += 0*mouse.velocidad;

scrolly += 0;

Además, en código binario es más complicado usar -1, no creo que mollusk y compañía se complicasen tanto la vida, puesto que 0 y 1 se usa como sí o no.

Yo lo veo así, y las pruebas parecen demostrarlo. Aunque las pruebas también demostraban que el Sol giraba alrededor de la Tierra... :P

Salu2

PD: En tu firma creo que tienes etiquetas mal cerradas, me aparecen las palabras Responder y Su nombre: con el mismo enlace.

PPD: Que alguien me explique por qué me desaparece la opción de editar comentario cuando le da la gana.


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.

Imagen de exterminator

Tocado y hundido :P

Toda la razón del mundo, cosa lógica cuando tú sabes del tema y yo sólo hago suposiciones...

Esta vez admitiré mi derrota, pero no creas que has ganado aún. Has ganado una batalla, pero no la guerra xD.

Salu2


Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.

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.