Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mensajes - brunoxzx

166
Preguntas y respuestas / Re:Seleccionar por preferencia
Septiembre 02, 2013, 06:40:16 PM
Creas un objeto que sea un pariente para todos los objetos seleccionables, y a cada hijo de ese pariente le creas una variable prioridad, que entre mayor sea más fácil de seleccionar será.

Luego usas algo como esté script, puedes cambiar el collision point por otra cosa, ej:

[gml]priority_collision(mouse_x, mouse_y, par_seleccionable);[/gml]
[gml]var ide, list=ds_queue_create(), p, ID;

do  {
     ide=collision_point(argument0, argument1, argument2, true, true);
     with(ide){
           ds_queue_enqueue(list, id);
           x-=99999;
           y-=99999;
           if (p>prioridad) ID=id;
    }
}
while( ide>=0 );

while( !ds_queue_empty(list) ) with( ds_queue_dequeue(list) {
     x+=99999;
     y+=99999;
}
return(ID);[/gml]
167
Cita de: Jangse en Septiembre 01, 2013, 03:42:04 PM
Salvo este script como gravedad. Osea, no debo poner gravedad().

Me voy a los eventos del personaje y en step selecciono el D&D de Execute Script (No Execute Code). Y selecciono en la ventana que se abre el script gravedad. Luego ¿Se debe rellenar las casillas que pone argument0, argument1, argument2, etc...?
Lo guardas sin paréntesis. Rellenas los argumentos que uses en el script (en esté caso el argumento 0 y argument 1). Yo prefiero siempre ejecutar los scripts usando la accion de execute code y luego poniendo dentro del código "Gravedad(270, 12)".

Cita de: Jangse en Septiembre 01, 2013, 03:42:04 PM
¿O en el script creado por nosotros podemos eliminar el argument0 y poner 270 (Dirección hacia abajo?

Me gustaría ver un juego simple de como hacer llamadas a los scripts del árbol de recursos y luego como se seleccionan dentro de los eventos.

Sí quieres que la gravedad sea personalizable, el script tendría que ser mas o menos así. Aunque si la gravedad siempre va ir en direccion 270, no es necesario. Cambias todos los argument0 por 270.
[gml]if place_free (x+lengthdir_x(argument0),y+lengthdir_y(-argument1))
{gravity = argument0}
else
{gravity = 0}
if vspeed > argument1
{vspeed = argument1}[/gml]
Por cierto, quizá para acciones cortas o que no vayas a repetir, no necesites hacer scripts, después se vuelven enredosos y es una poquitin más lento (in-notable solo en bucles larguísimos) llamar aun script que usar la accion "execute code".
168
Cita de: Jangse en Septiembre 01, 2013, 09:48:02 PM
Pues entonces pierde la esencia del programa. Bajo ese punto de vista, se pone uno a estudiar C++ y se olvida del GM (Me refiero a la versión Studio). Por que entonces se convertirá en un programa del montón.
Para nada, normalmente es mucho más rápido y fácil desarrollar en gm.
169
Cita de: Jangse en Septiembre 01, 2013, 09:16:44 PM
Tampoco entiendo que tanto el Sr. Mark Overmars (Creador de GM) y el Sr. Guido van Rossum (Creador del lenguaje Python) son holandeses ambos. Y últimamente se aplica el Python para enseñar los fundamentos de la programación en las escuelas. Debido a que es mas fácil para coger conceptos de programación que el C o el C++. Por ese motivo, creo, debería a ver sido escogido para aplicarlo al Game Maker. Y no tantas mezclas y tantos líos. Digo yo...

Nah. Por mi que quiten el pascal y que los nuevos aprendan la sintaxis de C, me parece más rápida en cuanto a escritura, eso de usar palabras como comandos no me gusta.

Por otra parte, recuerda que Mark Overmars ya no trabaja más en el desarrollo de game maker por lo que yoyo se ha tomado algo mas seriamente entrar al mercado y hasta se han medio olvidado de los principiantes, las d&d están desactualizadas, los ejemplos de gm studio solo usan código (con sintaxis de C) y hasta he leído que para la siguiente versión de gm la sintaxis de pascal quedará olvidada.
170
Como ya han dicho antes puedes usar la sintaxis que quieras, escribir prácticamente todo junto o usar la sintaxis te pascal junto con la de c++, pero por supuesto, tu código no va a ser para nada legible. Los then, begin, end o usar un solo "=" para comparación son parte de la sintaxis que gm tiene de pascal, que está implementada para tener versatilidad, aunque yo lo veo más bien como algo confuso.

En lo personal te recomiendo que no uses la sintaxis de pascal. Casi nadie usa la sintaxis de pascal en ejemplos y a muchos les parece raro que uses un solo "=" para la comparación. Aunque en realidad, como se ha dicho antes, puedes usar lo que te parezca más cómodo, más bonito o más cool.

Lo único es que si vas a trabajar en equipo o hacer un código que alguien más verá uses una sintaxis especifica que se repita a través de todo tu proyecto, ya sea la de pascal o la de c++. Si no sabes como es la sintaxis de pascal que tabulaba automáticamente, tranquilo simplemente observa. Lo mismo para c++.
171
Cita de: Jangse en Agosto 31, 2013, 10:33:35 AM
Gracias por el archivo. En todo caso, tengo un programa (que todos conoceréis) que transforma los D&D a GML.

Entonces...según entiendo:

Para crear un programa en GML (extenso) se ha de hacer en el árbol de recursos. Osea, donde están las carpetas que definen sprites, objetos, rooms, etc...

Y las piezas de código se han de usar seleccionando un evento y luego el D&D de Execute Code. En este Execute Code, no se pueden definir variables ni utilizar argumentos. Lo único que se puede hacer es ejecutar las funciones internas predefinidas por Game Maker ¿No? Si queremos usar las nuestras propias hemos de hacer llamadas a los scripts creados en el árbol de recursos. No se si es así. Por que me lío mas que la pata de un romano.
Básicamente. Aunque sí se pueden definir variables en códigos (en el evento create) y con la instrucción "var" se pueden definir variables temporales para cualquier código o script.
172
if distance_to_object(obj_RedPlayer) < 10000000 then
? eso lo puedes eliminar, es completamente inecesario.
173
No debería. Sí el objeto no tiene colisión con el muro simplemente no sucede nada, revisa que no sea pariente de un objeto que tenga colisión. ¿Que código usas para que tu personaje persiga al enemigo? no debes de usar las funciones de mp_, para esté caso te recomiendo usar la función "move_towards_point(x,y,sp)".
174
Desarrollo de Scripts / Re:Dibujar curvas bezier
Agosto 29, 2013, 08:27:47 PM
Cita de: brunoxzx en Agosto 29, 2013, 07:58:58 PM
Edit:Wow quien lo diría, ya existía una función para dibujar los paths. En fín, con está podrías dibujarlos en 3d, de cualquier ancho o diversos colores.

Sí increíblemente me acabo de dar cuenta, algo antes de ver tu post. Muy extraño por que ese script lo hice hace varios meses y creo haber buscado esa función. Bueno al menos es algo más personalizable, por ejemplo podrías usar los valores de velocidad del path, para definir distintos colores entre punto y punto.

Edit: Mira http://yal.cc/gamemaker-bezier-curve-path-simulation/ alguien que quería exactamente lo mismo que hace mi script (y que aparentemente termino haciendo algo más complicado). Es prueba de que mi script no fue hecho inútilmente, xD.
175
Desarrollo de Scripts / Re:Dibujar curvas bezier
Agosto 29, 2013, 07:58:58 PM
Quieres probar?. así es como los dibujo:

draw_path.
[gml]
    //argument0 path
    /*argument1 presicion 1=perfecto valores, mayores lo hacen mas cuadrado
            (es cada cuantos pixeles se dibuja una linea, si vas a usar 1 puedes cambiar la función draw_line por draw point).*/
    if ( path_get_length(argument0)>0 ){
        var x1, y1, x2, y2, t;
        t=1/(path_get_length(argument0)/argument1);
   
        x1=path_get_x(argument0, 0);
        y1=path_get_y(argument0, 0);
   
        for(i=t; i<1; i+=t){
            x2=path_get_x(argument0, i);
            y2=path_get_y(argument0, i);
       
            draw_line(x1, y1, x2, y2);
       
            x1=x2;
            y1=y2;
        }
    }
[/gml]

Edit:Wow quien lo diría, ya existía una función para dibujar los paths. En fín, con está podrías dibujarlos en 3d, de cualquier ancho o diversos colores.
176
No entiendo a que te refieres, pero suena a que estás cambiado muchas veces el objeto que sigue la cámara. -¿Como implementaste el código?
177
Desarrollo de Scripts / Re:Dibujar curvas bezier
Agosto 29, 2013, 06:44:04 AM
Genial Texic. Es raro que en todos estos años nadie haya posteado un script para dibujar algún tipo curva.

El script se ve corto y eficiente. Normalmente yo uso los paths que creo dinamicamente para dibujar curvas en parte por flojo, pero también por que creo que pueden ser algo más eficientes, sin embargo no estoy seguro, lo que me gusta es que se puede definir un sin fin de puntos.

Sobre los nombres creo que spline es como el conjunto de tipos de curvas definidas en porciones, mientras que las belizer son solo un tipo de entre otros tipos splines.
178
Usa la variable view_object, allí pones la id de la instancia que la view sigue.

Ej: Obj control global Left Pressed.
[gml]
var ide=collision_point(mouse_x, mouse_y, all, false, true);
if (ide>=0) view_object=ide;
[/gml]
179
Ups, me había olvidado por completo de esté tema  ???. Cuando está clase de cosas me sucedan, podrían enviarme un mp. Quizá debería haber una norma, que dejara hacer repost cuando tu post se ha perdido en el inmenso abismo de las preguntas que quedaron sin responder.

Bueno. Primero que nada sugiero que todos tus tiles de pasto estén puestas en el mismo depth y como había dicho antes alineadas por un numero cualquiera, de preferencia una potencia de dos.

Bueno. Hay dos soluciones, la más simple y también con la que obtienes menos rendimiento, es la siguiente:
[gml]
    //TileFind(depth, x, y, alignx, alginy);
    //Ej: TileFind(1000, mouse_x, mouse_y, 32, 32);
    return( tile_layer_find(argument0, (argument1 div argument3)*argument3, (argument2 div argument4)*argument4 );
[/gml]
Está se puede optimizar un poquitín usando operadores a nivel de bits para evitar las divisiones y multiplicaciones, sin embargo lo veo inútil ya que el tiempo que toma buscar los tiles es enorme (solo un poco más rápido que buscar un objeto) y no haría prácticamente ningún cambio.

Bueno, el segundo modo guardar la posición de todos tus tiles de pasto en un array bidimensional o una grilla, entonces saber si hay un tile en determinada posición sería prácticamente igual de rápido que acceder a  una variable.

Esté método tiene la desventaja de que necesitas hacer un pre-proceso al iniciar el room. Que dependiendo del numero de tiles puede llegar a demorarse más de un segundo. Esto por supuesto puede evadirse, pero necesitarás algunos conocimientos sobre carga de archivos.

[gml]
     //TileMapCreate(array, depth, celdasX, celdasY, alingX, alingY);
     for(var i=(argument2-1), i>=0 ; i--){
          for(var j=(argument3-1), j>=0 ; j--){
                argument0[0, 0]=tile_layer_find(argument1, i * argument4), tile_layer_find(argument1, j * argument5));
          }
     }
     return(argument0);
[/gml]

Como dije, esté script puede llegar a tomar su tiempo, así que lo que yo haría para evadir esto es que en la copia final de mi juego, creo un archivo binario, de texto o guardo una estructura (como una lista) con todas las posiciones de los tiles de pasto por cada room. Luego simplemente creo un script para cargar está lista dentro de mi array y listo se convierte en un proceso mucho más rápido si se hace bien.

[gml]
     //TileMapFind(array, x, y, alignx, aligny);
     return(argument0[argument1 div argument3, argument2 div argument4]);
[/gml]


Y un ejemplo para usar estós últimos dos.

Creas un objeto control que sea persistente y que esté en todos tus rooms con pasto.
En el evento create, haces esto.
[gml]
APasto[0, 0]=0;
[/gml]

Ev room start:
[gml]
APasto=TileMapCreate( APasto, -999, room_width div 32, room_height div 32, 32, 32);
[/gml]

Y bueno en cualquier otro objeto que quieras puedes hacer esto.
Ev draw:
[gml]
draw_text(10, 10, "El mouse está en el pasto?: ");
if ( TileMapFind(APasto, mouse_x, mouse_y, 32, 32)>=0 )  {
      draw_text(10, 30, "Sí");
      //sound_play(sound_pasto);
}else draw_text(10, 30, "No;
[/gml]
180
Pues con un simple random puedes hacerlo así.
[gml]
direction=random_range(70, 110);
[/gml]

Si quieres que el misil tienda más a ir hacia los lados que hacia arriba o viceversa, puedes usar algo como el random Gaussiano que Zela aporto como un script.