Buenash! Alguien sabe cómo "deformar la realidad"? Un ejemplo simple: un pequeño agujero negro que atraería todo lo que hay alrededor, verías como todo se deforma acercándose a él. Ya sean las tiles o los backgrounds o los objetos, todo se deformaría. Lo mismo que esto para todo tipo de efectos. Cómo pueden hacerse? Leí algo de surfaces pero no lo tengo claro... la idea es capturar un trozo de lo que se muestra en pantalla y ahí modificarlo, pero no sé por dónde empezar para saber cómo hacerlo
Buena pregunta DARK mira yo tengo un n prototipo que Hizo PENUMBRA pero es como de atraer imanes es algo parecido no se si te ayudara .
Quizás, no sé, si es un ejemplo del cual puedo aprender algo... debería verlo.
Hmmm... se me ocurre dibujar la pantalla a una superficie, adquirir la textura de la superficie y dibujarla en una primitiva con forma de malla, entonces para distorsionar la imagen se moverían los vértices de la primitiva en el área que necesita cambiar... aunque mientras mayor sea la imagen y mayor el detalle deseado más lento será el efecto... Un concepto interesante sin duda.
Más tarde cuando tenga tiempo veré que tan simple o que tan complejo sería, si tengo suerte haré en un ejemplo.
Mira un ejemplo de Hizo OCARINA y otro que hizo Penumbra los dos muy buenos espero te ayude en algo
http://www.comunidadgm.org/preguntas-y-respuestas/atraccion-tipo-iman/msg95267/#msg95267
Sep, algo así me sonaba, usar surfaces... aunque a partir de ahí me he perdido, no tengo mucha idea xD
y estoy planeando hacer mi juego en 3D. Funcionaría también? lo que el juego haría es coger, no sé, una porción 200x200 de lo que se ve por pantalla y deformarlo, daría igual si es 2D o 3D? Aunque leí que el 3D tiene problemas con las surfaces... gracias :)
EDIT: eams, lo que yo busco es un efecto VISUAL, donde la imagen se deforme, lo del agujero negro era un ejemplo :)
Cosas como éstas:
http://gmc.yoyogames.com/index.php?showtopic=579591
con el ejemplo que hay ahí he logrado hacer que un sprite ondee como una bandera. Mola, pero molará más si logro entender cómo lo hace y extrapolarlo a más efectos xD
Uff, un tanto más complejo de lo que me esperaba, y ciertamente no le tiene ningún cariño a los fps, pero acá esta la idea base.
Me quito el sombrero killer es mucha programacion ya me gustaria hacer todo eso a mi me volveria loco..
espero te sirve DArk
De hecho acabo de ver que cometí un error, como está ahora el script de dibujo está usando casi el doble de vértices de lo que es realmente necesario, no hace una diferencia masiva, pero con efectos como este cada poquito cuenta.
El script actual es este:
var T,width,height,Tposx,Tposy,i,j;
T = surface_get_texture(application_surface);
width = array_height_2d(Xcoor);
height = array_length_2d(Xcoor,0);
Tposx = (1/(width-1));
Tposy = (1/(height-1));
for (j = 0; j < height-1 ; j++){
draw_primitive_begin_texture(pr_trianglestrip, T);
for (i=0;i < width-1; i++){
draw_vertex_texture_colour(Xcoor[i,j],Ycoor[i,j],Tposx * i,Tposy * j,c_white,1);
draw_vertex_texture_colour(Xcoor[i,j+1],Ycoor[i,j+1],Tposx * i,Tposy * (j+1),c_white,1);
draw_vertex_texture_colour(Xcoor[i+1,j],Ycoor[i+1,j],Tposx * (i+1),Tposy * j,c_white,1);
draw_vertex_texture_colour(Xcoor[i+1,j+1],Ycoor[i+1,j+1],Tposx * (i+1),Tposy * (j+1),c_white,1);
}
draw_primitive_end();
}
/*Dibuja la grilla a la pantalla por tiras horizontales
Solo habría que quitar los últimos dos vértices en el script y quitar el -1 en el width-1 del segundo for:
var T,width,height,Tposx,Tposy,i,j;
T = surface_get_texture(application_surface);
width = array_height_2d(Xcoor);
height = array_length_2d(Xcoor,0);
Tposx = (1/(width-1));
Tposy = (1/(height-1));
for (j = 0; j < height-1 ; j++){
draw_primitive_begin_texture(pr_trianglestrip, T);
for (i=0;i < width; i++){
draw_vertex_texture_colour(Xcoor[i,j],Ycoor[i,j],Tposx * i,Tposy * j,c_white,1);
draw_vertex_texture_colour(Xcoor[i,j+1],Ycoor[i,j+1],Tposx * i,Tposy * (j+1),c_white,1);
}
draw_primitive_end();
}
/*Dibuja la grilla a la pantalla por tiras horizontales
Hmmm... GM Studio no reconoce draw_vertex_texture_colour, lo he sustituido por color, parece aceptarlo pero me sale:
Push :: Execution Error - Variable Get -1.application_surface(100016, -1)
at gml_Script_draw_grid (line 3) - T = surface_get_texture(application_surface);
es de GM8.1 por lo que veo D: parece un efecto increíble y no puedo ejecutarlo...
Que versión usas Darkk
GM Studio Standard :)
Eams se refiere al número de la versión, el ejemplo fue hecho usando GMS 1.3.1336, la versión actual del canal beta, la variable application_surface fue introducida en 1.3.
Si por qué yo lo abrí y me corrió bien el ejemplo es AWESOME .
DISFRUTALO .
Gracias, tenía la versión 1.2.1279, por más que lo intento no me deja upgradear a 1.3, estoy revolviéndolo todo, por ejemplo help, update license, meto el codigo de licencia (standard) pero no me sube al 1.3. Cómo subo al 1.3, sin pasar a professional? (uso la standard de cuando fue gratuita)
(http://sia1.subirimagenes.net/img/2014/05/09/140509080905258263.jpg)
Si elijo el canal BETA, me deja bajarme el 1.3... y ahí sí. Pero es seguro usar el beta? si es beta es por algo XDD gracias penumbra :D
espero que no se me joda... probaré el ejemplo con la beta, guardando mi proyecto a parte, y trabajando sobre una copia :) os cuento que tal me va cuando lo pruebe hoy o mañana
intenta cambiando a "beta update" antes de hacer click en "check for updates". Yo también tengo la standard. Si no funciona, el último recurso creo que sería desisntalar todo y bajarte la versión más nueva :-[
EDITADO: Pues no es 100% seguro, eso lo avisan incluso en YoYo. Puede haber bugs y comportamientos inesperados. Me imagino que puedes usar el modo beta para actualizar, y luego cambiar a estable. Otra opción es descargarte la versión "early access" más reciente, que es la versión donde van sacando lo mas nuevo (y quizás inestable). Yo tengo tanto la 1.3 como la early access (las dos con la misma licencia standard) y no tengo problemas, son instalaciones distintas.
" Me imagino que puedes usar el modo beta para actualizar, y luego cambiar a estable", eso tiene sentido? bueno, creo que se ha puesto en estable automaticamente, pero si uso la version 1.3 es porque es "inestable" xDD bueno, trabajaré sobre la beta y... supongo que no se me borrará el proyecto xDD iré haciendo copias por si acaso
pues el efecto es INCREÍBLE? Por qué la cuadrícula? La he quitado y sigue funcionando, obviamente no pondría esa cuadrícula en el juego real. ES PERFECTO! No es exactamente lo que yo quería hacer, pero porque no lo dije. Dije agujero negro, y es exactamente lo que has hecho. Mi objetivo es un teletransporte doblando el espacio. Por ej, si hay un muro, doblo el espacio para teletransportarme de un lado a otro. Sería similar al efecto agujero negro, pero alargado. Supongo que con esto podré lograrlo, y si no hago dos agujeros negros (en el inicio y el final del teletransporte) :D haré pruebas y ya comentaré cómo me ha ido, gracias Killer :D Lo has hecho tú al 100%? Si es así vas pa los créditos
PD: también es increíble el efecto anti agujero negro, que en vez de atraer hacia el centro expulsa, justo al contrario :D supongo que viste que era igual que el anterior pero con un par de retoques, y por eso aprovechaste para añadirlo también. Mola! Seguramente me será útil
Te voy a ser sincero, de vez en cuando al canal BETA llega una versión con algún bug molesto, por ejemplo en esta versión actual draw_circle esta bugeado. Pero es poco común que pase y aún menos común que sea algo que te pueda joder el juego.
El concepto del canal BETA es que ahí ponen las nuevas versiones a cómo van saliendo, si después de suficiente tiempo no aparece ningún bug mayor pasan la versión BETA al canal estable.
La cuadricula la puse ahí cuando empecé con el ejemplo para ver si estaba funcionando, luego puse el background y me dio pereza dar los 3 clicks que ocupaba para quitar la cuadricula.
El código es 100% mío, el crédito no es necesario pero se agradece, el efecto de expansión fue el que hice primero, luego lo modifique por el de compresión. Como el efecto se crea al dibujar las coordenadas en los arrays lo único que hay que hacer para tener distintos efectos es usar distintas formas de modificar dichos arrays, todo sería cuestión de probar.
Una pregunta... lo he probado con el modo 3D activado y el efecto no se ejecuta, y al desactivarlo todo he visto perfectamente el efecto. Son las surfaces de alguna forma incompatibles con el 3D, o esque tengo que hacer algún truco o hay algo que desconozco sobre cómo combinar estos dos elementos?...
Hice las pruebas con el ejemplo de 3d que viene con el GMS.
Las surfaces funcionan en modo 3d, las primitivas sin embargo, por más que intento no consigo hacer que se dibujen, ni triángulos sencillos ya que estamos, pero por algún motivo rectángulos y círculos sí. No estoy seguro si es un bug o si simplemente las primitivas 2d son incompatibles con 3d y los triángulos se dibujan con primitivas mientras las otras figuras no. Aunque considerando que el 3d tiene su propio set de funciones concernientes a primitivas probablemente sea lo último.
Si las primitivas 2d no se pueden usar entonces quizás se pueda usar un modelo hecho con primitivas 3d y dibujar ese modelo en el evento GUI, aunque cuando se trata de 3d seguro tu sabes más que yo, así que tú sabrás.
No es necesario rehacer el script con coordenadas en 3D, basta con llamar a la función d3d_end() al principio del script de dibujo y d3d_start() al final.
Estaba ayudando con una modificacion del ejemplo de Killer un poco más optima, pero bueno, me tengo que ir. En la noche lo posteo.
He probado a hacer lo de desactivar y activar el 3D, tanto para la parte del draw como la de step, y sigue sin aplicarse el efecto en el modo 3D...
Cita de: eams1986 en Mayo 07, 2014, 07:17:01 PM
Mira un ejemplo de Hizo OCARINA y otro que hizo Penumbra los dos muy buenos espero te ayude en algo
http://www.comunidadgm.org/preguntas-y-respuestas/atraccion-tipo-iman/msg95267/#msg95267
hey intento entrar a ese tema y me manda al foro de preguntas y respuestas, me gustaria ver esos ejemplos
Es facil Juan sólo en el buscador escribes atracción tipo imán y te aparecerá los ejemplos ese post yo lo creé.
Dios, esto es un mareo xD He logrado hacer compatible el 3D con las surfaces, desactivando la luz antes de dibujar, y transformando el codigo de la primitiva en una primitiva 3d (solo he cambiado draw por d3d, y le he dado una z de 100, he ajustado unas cosas de resolución y ya!)
el problema es que me hace el shrink en la coordenada que quiere, no puedo controlarlo xD seguiré testeando pero es un jaleo esto... y más cuando los jugadores lo prueben en otras resoluciones, temo lo que pueda pasar
EDIT: HELL YEAH!!! lo logré! a la hora de crear la grid, multipliqué su size por la relación entre el display width y 960 (tamaño de la view, que era el size original), para ajustarlo a la pantalla completa, y ahí haciendo shrink de 480x360... funciona! un shrink permanente en el centro de la pantalla. Me preocupa qué pasaría en otras resoluciones (GM studio es jodido en ese tema) ~~