Hola amigos, en primer lugar un abrazo a todos, freaks de la programación de videojuegos.
Este puente me he dedicado a experimentar con un juego que incluye un número brutal de procesos en pantalla que colisionan unos con otros, intentando implementar las leyes de la física. Os dejo el link de descarga con código abierto y todo lo necesario para ejecutar:
(http://3.bp.blogspot.com/__SNyA7iqBq0/ST1ik8jcXXI/AAAAAAAAAQY/L4DEGQyufEQ/s400/Colisiones.0.0.png)
DESCARGAR (http://www.mediafire.com/file/wzmjuhv1nzy/Colisiones0.0.zip)
Mi cuestión es que he mirado el uso de CPU y sólo utiliza a fondo el primer núcleo, es un juego que requiere mucha CPU y me gustaría poder sacar partido a la potencia de los procesadores actuales. ¿Hay algo que pueda hacer?
aun no...
Ok, entonces intentaré mejorar un poco la eficiencia, creo que he complicado demasiado el cálculo y se puede mejorar el sistema que resuelve las colisiones. La intención es que NUNCA se solape un objeto con otro, pero es complejo conseguirlo...
La idea es buena, se trata de sacar partido a los monstruos CPU de hoy en día para hacer un juego 2D que sea todo un alarde de procesos en pantalla, mucho más allá de Metal Slug p. ej.
¿Alguna sugerencia o idea al respecto? Será bienvenida xD
Me encantan los programas de experimentación para ver hasta donde da bennu, yo muchas veces me dedico solo a eso en vez de hacer cosas útiles, soy asín de lerdo.
Voy a probarlo en mi P4
He estabilizado considerablemente las colisiones entre procesos.
Ahora es mucho menos probable el solapamiento entre ellos, aunque sigue sin ser una aproximación física perfecta :(
El juego ya tiene un objetivo de matar enemigos que aparecen por los lados, y los enemigos al morir generan una "super nova" de objetos que rebotan entre sí, como en la versión 0.0. Se les puede matar también saltando sobre sus cabezas xD
Descargar Juego (http://www.mediafire.com/file/zmwyad0mtji/VarianteColisiones0.4.zip)
Estoy trabajando en gráficos gore para hacer un juego un poco sangriento... ¿Alguna sugerencia para encontrar vísceras y huesecillos en sprite? Los tengo contados...
MOD: Te edite el post para arreglar el link... Splinter
cual de todos los archivos en el link es el del ejemplo?
Es verdad, busqué +sprites +huesos en google y nada, casi no hay. :)
aquí hay uno, no se si lo tengas, es el cráneo del Div2, si miro más te los pongo aquí, provaré tu juego, ya lo descargué. :)
creo que es el último de la segunda página splinter :)
Se me puso muy lento en los primeros segundos :) .
toma huesos en formato svg. (Usando inkscape puedes retocarlos a medida ya que son vectoriales)
http://es.wikipedia.org/wiki/Archivo:Wormian_bones.svg
http://en.wikipedia.org/wiki/Image:Human_arm_bones_diagram.svg
http://commons.wikimedia.org/wiki/Image:Human_skull_side_simplified_(bones).svg
http://wapedia.mobi/en/Image:Human_skull_side_simplified_(bones).svg
http://wapedia.mobi/commons/Image:Human_skull_front_simplified_(bones).svg
http://wapedia.mobi/es/Imagen:Human_skeleton_front.svg
http://www.nationmaster.com/encyclopedia/image/Image:Human_arm_bones_diagram.svg
y aquí tienes vísceras en el mismo formato
http://es.wikipedia.org/wiki/Wikipedia:Candidatas_a_im%C3%A1genes_destacadas/M%C3%BAsculos_del_Cuello
http://en.wikipedia.org/wiki/Image:Eye-diagram_no_circles_border.svg
http://en.wikipedia.org/wiki/Image:Respiratory_system_complete_en.svg
http://commons.wikimedia.org/wiki/Image:Digestive_system_diagram_en.svg
muy bien DCelso... 1 karma!
Quote from: SplinterGU on December 12, 2008, 12:53:06 AM
cual de todos los archivos en el link es el del ejemplo?
Perdón, puse el link del directorio, el de la actualización es éste:
http://www.mediafire.com/file/zmwyad0mtji/VarianteColisiones0.4.zip (http://www.mediafire.com/file/zmwyad0mtji/VarianteColisiones0.4.zip)
Arg, gracias DCelso, he pillado un par de cosillas, pero un juego gore con sprites de enciclopedia de medicina... xDDD
Me refería a sprites tipo Dule Nukem, Doom y cosas así, estoy destripando estos juegos para sacarles lo que necesito, ya lo colgaré como recurso cuando termine de recopilar.
Gracias again!
ah, bien, es el que baje, gracias
Juas muy original el proyecto, sigue con el. :)
me costo un poquito hacerlo correr en linux...
1) la version que libere de linux tiene el error de los flotantes, asi que no funcionaba correctamente...
2) luego de cambiar los ejecutables corregidos, funciono de primera con el mismo dcb de windows...
3) los paths y los nombres de archivos, deberian ir todos en minusculas, para una correcta portabilidad... ya que los sistema unix son sensibles a mayusculas y minusculas.
4) con un set_fps(0,0) va mejor...
5) para casos como este de muchos procesos te sugiero algun esquema de colision basado en coordenadas, no uses la funcion colision ya que es muy lenta en estos casos... luego incluire un modulo de colisiones mas extenso, con distintos metodos de colision, precision y cacheado de las mismas.
Bárbaro lo que me dices SplinterGU, es música para mis oídos, sigo con él y lo tendré en cuenta.
obviamente que el set_fps 0,0 es para probar... hay que buscar un mejor set_fps, con algun salto, considerable, para evitar que se trabe mucho si no le da el render...
Tengo lo que me merezco. La gente empieza a hacer los juegos que yo siempre quise acer :D ¡siempre he querido hacer un juego sangriento! pero sangriento en plan bizarro, que exploten las cabezas o las piernas en función de donde dispares (siempre he disfrutado torturando zombies).
Con respecto a tu prueba, la primera que probé, como que las cosas "rebotaban demasiado" sobre todo para ser de cristal XD. Voy a ver que tal la nueva versión.
Splinter ¿como que es más rápido calcular la distancia de todos los procesos a uno que detectar solo si colisionan? ¿cual es la mejor forma de hacerlo? Un saludo.
colision trabaja a nivel pixel... calcula la region de los graficos y luego de eso copia la porcion de cada uno de estos graficos rotandolos y escalandolos, y luego chequea ambos mapas para ver si colisionan a nivel pixel por pixel... lo cual es muy lento... pero muy preciso...
si necesitamos velocidad, podemos sacrificar un poco la precision y hacer por metodo de coordenadas, distancia, box, circle, etc...
Interesante Splinter, por ahora manejo 11 módulos de código separados, muchos de ellos válidos para otros juegos (carpeta TAD de mi juego). No lo había pensado pero podría hacer otro módulo para las colisiones pixel a pixel y alguna comprobación de durezas, lo pensaré para la próxima vez que me ponga a toquitear el código.
no, lo que yo dije es que la funcion colision comprueba colision pixel a pixel... nunca dije que vos podrias hacerlas pixel a pixel...
Con un mes de retraso... Ok y gracias SplinterGU.
Cuando dices lo de usar circle, ¿Te refieres a realizar la comprobacion de colisiones entre circulos que se encuentran en memoria en las mismas posiciones x,y que cada proceso?
Esa idea ya me parece bastante buena, ¿Y algo mejor?
lol tengo tantos proyectos a medias que no se cuando me pondre con esto... xD