Anuncios Google

(Palib) Duda gravedad

Pos eso mismo, esto lo que llevo hecho:

 

y+= gravedad;
PA_SetSpriteY(0,1,y);
 
if ((PA_GetSpriteY(0,0)+15 - PA_GetSpriteY(0,1) <= 4)&& (PA_GetSpriteY(0,0)+15 - PA_GetSpriteY(0,1) >= -3)){
gravedad = 0;
}
else{
gravedad = 1;
}

 

El problema de este metodo es que quiero que el sprite 0 se pueda rotar a
voluntad. Por lo cual, se produce algunas colisiones erroneas:

 

angulo += Pad.Held.Left - Pad.Held.Right;
PA_SetRotsetNoZoom(0,0,angulo);

 

Aqui os dejo los sprites (el primero es el 0 y el otro es el 1):

 

 

 

Y eso es todo.

 

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.

Pos el dichoso codigo se

Pos el dichoso codigo se resiste XDD.

He hecho una pequeña prueba, he seleccionado un punto de la base de la bola (8,14). Se supone que cuando ese punto toque la linea negra, tendria que salir un texto:

 if (PA_GetSpritePixel(0,0,PA_GetSpriteX(0,0)+8,PA_GetSpriteY(0,0)+14) == PA_RGB(0,0,0)){
PA_OutputSimpleText(1,5,5,"Hecho");
}

Sin embargo, al compilar me suelta ese warning:

"Comparison is always false due to limited range of data type"

Y efectivamente nunca se me ha cumplido ^^. Alguna idea?

Saludos!

Imagen de exterminator

El mismo error te lo dice

Si la comparación será siempre falsa por causa del rango limitado del dato. Eso viene a significar como cuando en una variable u8 le metes numeros negativos, te sales de los numeros que abarcas.

No soy mucho de GetPixel pero te comento lo que yo creo: prueba a sustituir PA%GetSpriteX y GetSpriteY, por las variables que uses para actualizar su posicion en pantalla.

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.

Pense que fuera las

Pense que fuera las coordenadas, asi que probe a compilar poniendo coordenadas pequeñas a ver si no me saltaba el warning:

 if (PA_GetSpritePixel(0,0,4,5) == PA_RGB(0,0,0)){
PA_OutputSimpleText(1,5,5,"Hecho");
}

 

Y la respuesta es que el dichoso warning sigue existiendo. Creo que tiene que ver con que el GetSpritePixel no te da los colores en RGB, pero entonces como los da?.

Saludos!

Imagen de The Dark Master

Es que en RGB creo que no

Es que en RGB creo que no los da, lo mas facil que puedes hacer es poner esto:

PA_OutputText(bg, coorx, coory, "Palette Color : %d   ", PA_EasyBgGetPixel(bg, capa, Stylus.X, Stylus.Y));

Pon lo correspondiente en bg, capa y en coorx y coory y ponlo debajo del while...

Me estaras preguntando porque xD pero es muy util, donde pulses con el Stylus ese texto te dice el numero de color almacenado en la paleta del Bg que estas pulsando y ese numero que te da lo cambias por el PA_RGB .

Salu2


Pero eso es para el fondo,

Pero eso es para el fondo, no para el sprite ^^.

PD: Para saber el color de un pixel del fondo no es PA_EasyBgGetPixelCol?. Al menos es el que siempre uso ^^.

Imagen de WhiteSkull

Otro método

 

Pero lo que quieres, es que esa bola se balancee sobre esa tabla, la cual puede inclinarse, no? Entonces no te servirá ese sistema de colisión, ya que el sistema ese sólo toma las coordenadas de posición de cada Sprite, la forma más sencilla para hacer que la bola se desplace por la tabla es poner mínimo tres sensores, que consisten en un capturador de pixeles, la tabla estaría pintada con esos pixeles de colisión, si uno de los sensores no recoge ese pixel de ese color, entonces tiende a mover el objeto hacia donde se encuentra el sensor, también el factor velocidad se vería afectado ya que es lo que propicia la inercia, evitando que el objeto cuando se deslice sobre la pendiente hasta llegar a un plano se detenga bruscamente...

 

Aquí en ésta imagen observamos dos casos, la bola de color verde dispone de tres snesores, coloreados, rojo para la derecha, azul para la izquierda y amarillo para la parte de apoyo o inferior. El color clave, aquí en este caso, es el magenta o rosado.

 

En el caso A, en éste caso el apoyo, en color amarillo, detecta el color rosa de la tabla, por lo que la coordenada Y no se ve afectada, no cae, pero los sensores de los laterales no detectan colision, por lo que tenderan a tirar de un lado y otro, cómo la fuerza por los dos extremos es igual, el objeto no se moverá ni a un lado ni a otro, si no interfiere otra condición.

 

En el caso B, el apoyo no detecta el color de colisión, por lo que caerá, incrementando la coordenada Y, el punto de la izquierda, el azul (según cómo se mire), detecta el color de colisión, por lo que puede ser empujado o no ceder la coordenada X, en cambio el rojo, el lado contrario, se encuentra sin colisionar y tenderá a incrementar X. El movimiento resultante es que cae hacia la derecha.

 

Así quedaría muy tosco, pero si estos puntos los incrementas o los reproduces alrededor en 360º puedes conseguir un movimiento auténtico de bola... evitando movimientos escalonados...

 

Espero que te ayude ésta referencoia a solucionar tu problema.

Si eso es lo que queria

Si eso es lo que queria hacer, en principio el metodo que iba a emplear es poner "gravedad". Y segun en angulo de inclinacion del "palo" la pelota se moveria para un lado u otro. Como caeria por la gravedad iria en sentido diagonal.

Aunque tu metodo es muchisimo mas sencillo, asi que si he entendido bien. Cojo algunos puntos alrededor de la bola, y compruebo que esos puntos esten tocando la parte negra del sprite, de lo contrario ocurre tal cosa, como que la bola se desplaze para tal dirrecion.

La idea esta clara, queda pasarla a codigo. Haber que me sale ;).

¡Gracias y saludos!

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.