Programación Específica > Allegro
Detectar Colision Y Crear Un Disparo
ibito:
--- Cita de: "palpatine16" --- Te entiendo. El problema es que no encuentro tutoriales buenos donde mirar eso. Y ademas es que se aprende mejor preguntando que leeyendo en un tuto (muchos de ellos no se explican).
--- Fin de la cita ---
Yo te entiendo a ti, y es cierto, es mejor preguntar, aprendes mas, pero, creo también que las personas se enfadan de que en los foros pregunten lo mismo, lo mismo, lo mismo, lo mismo, preguntale a JuanK, yo al principio que me iniciaba (no quiero decir que soy un profesional, todavia me considero newbie jeje), hacia preguntas y leía preguntas de otros (porque no esta mal de vez en cuando, buscar en el foro preguntas similares a la tuya) y muchas veces, me "molestaba" cuando leía que "leete el manual" o "aqui hay información", pero despues de que uno repite lo mismo y lo mismo, se enfada y dice: "lee ésta información".
Ok, respecto a tu problema.
No te voy a hablar de programacion orientada a objetos, lo haces para que entiendas como funciona:
Haces un bitmap 'nave' y otro 'disparo', haces variables 'x' y 'y' para cada uno, (por ejemplo naveX, naveY, disparoX, disparoY), y 'naveX' y 'naveY' las mueves dependiendo de 'key'
por ejemplo:
--- Código: Text --- if(key[KEY_UP]) naveY--;
y para el disparo puedes:
--- Código: Text --- if(key[KEY_SPACE]) disparoY--;
Claro, esto no va a funcionar como quieres, tu tienes que ponerle mas cerebro.
Elden:
Lo de la bala, es cierto que podrías mirártelo un poco más por tu cuenta (yo creo que te hace falta leerte unos cuantos libros de programación).
Lo de las colisiones ya es un tema más delicado, te diré que existen varias maneras de hacerlo:
1----Colisión geométrica predefinida
-------------(entre 2 cuadrados): Suponiendo el cuadrado 1(x1,y1,w1,h1) y el cuadrado 2(x2,y2,w2,h2) (x e y son las coordenadas) (w es la anchura) (h es la altura) Colisionan si:
--- Código: Text --- ((x1+w1) >= x2) && (x1 <= (x2+w2)) && ((y1+h1) >= y2) && (y1 <= (y2+h2))
------------(entre 2 círculos): circulo 1 (x1,y1,r1) y circulo 2 (x2,y2,r2)
Colisionan si:
--- Código: Text --- int dx = x1 - x2;int dy = y1 - y2;dx *= dx;dy *= dy;(Sqrt(dx+dy) < (r1+r2))
------------------(etc...):
ahora mismo se me ocurren mil más (entre rombos, elipses, etc...) aunque si sabes un poco de mates podrías deducirlas todas, si te interesa alguna en especial pregúntame
2------Colisión geométrica por listas de vértices:
Existen algoritmos que saben comprobar si 2 listas de vértices se intersectan, podrías descomponerlos en triángulos por ejemplo.
3------Colisión por mascara de bits:
Según mi gusto la mejor, además se puede acelerar por hardware, básicamente consiste en comprobar si un bitmap colisiona con otro viendo si se solapan pixels.
Hay buenos manuales de colisiones por ahí, si te interesa algún caso particular coméntame.
Un saludo.
Geo:
Esto se trata de buscar, leer, leer, pensar, codificar, probar, volver a buscar, leer, volver a pensar y probar nuevamente. En el camino hay que ir ideando cómo resolver tal o cual cosa, y cuando ya leíste, pensaste, probaste y lo volviste a hacer y no te sale, entonces preguntas y, si alguien ya se había enfrentado al problema, con gusto te ayudará.
Y también, cuando hayas resuelto varias situaciones problemáticas, vienes por aquí y ayudas a quienes se enfrenten a ellas (o nos enfrentemos, que soy más que novato en esto, simplemente que ya me enfrenté a algunas cosas de las que ahorita planteas).
Para las colisiones y varias otras cosas, esta información te servirá:
http://www.vjuegos.org/modules.php?name=Content
Nada enfocado a Allegro (ni a ninguna otra API), bastante general y claro para que lo implementes con las herramientas que desees.
Por cierto, ¿alguien ha hecho algo con colisiones entre un círculo y un rectángulo? Digo, varios aquí hemos hecho al menos un Pong en el que se hace uso de este tipo de colisión (y muchos la hacemos pixel a pixel, quizá checando antes una rectángulo-rectángulo), a lo que me refiero no es tanto a detectar la colisión, sino a hacer la respuesta algo "más natural".
Saludos,
José Jorge (Geo).
palpatine16:
si es q e probado de todo(lo que se) y el disparo al pulsar enter (tecla que le puse) aparece y desaparece pero quieto en el sitio. mirare a ver q pueo hacer
P.D: Todo el dia esperando a q m avisara el correo de respuestas y nada q no m a avisado, mneos mal que me he metido al foro, que si no..... <_<
Geo:
Ok, el disparo tiene coordenadas, una vez creado, debes actualizarlas y hacer que se mueva continuamente (lo mismo que haces cuando actualizas las coordenadas de un objeto al presionar x teclas, pero aquí sin la intervención del usuario).
Saludos,
José Jorge (Geo).
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa