Noviembre 10, 2011, 08:29:08 PM Ultima modificación: Noviembre 12, 2011, 04:09:34 AM por elviskelley
necesito crear un conjunto de instancias del mismo object repitiendo segun la distancia entre el punto en que se crea la primera instancia hasta el punto de llegada, por hacer un ejemplo digamos que el object se llama extrella. Seria asi, objEstrella. Tengo 5 puntos de partida (coordenadas x,y,) y logico 5 puntos de culminacion de esas instancias (coordenadas x,y, finales) por dar un ejemplo.
Punto de partida 1.
(0,0) instance_create(0,0,objEstrella) =punto de partida. ahora quiero que se sigan creando estrellas hasta el punto final. ejemplo (0,128) es decir la ultima estrella se crea asi instance_create(0,128,objEstrella); la estrella posee un sprite de 32x32. Si nos fijamos desde el punto (0,0) al (0,128) huboi una variacion de la Y=128 osea que en linea recta abajo de la primera estrella, dejando entre la primera y la ultima 2 espacios vacios.
?por que? y aqui viene lo que deseo.
si la primera es en 0,0 la ultima en 0,128. y el sprite es de 32x32 entre estas se podria colocar instancias en estas coordenadas inicia: (0,0) lo que deseo que haga es que se repita hasta la coordenada final-.
ejemplo. si lo colocara asi tendria la solucion, pero no me sirve asi.
instance_create(0,0,objEstrella) Punto a crear la primera
instance_create(0,32,objEstrella) Repeticion
instance_create(0,64,objEstrella) Repeticion
instance_create(0,96,objEstrella) Repeticion
instance_create(0,128,objEstrella) ultima a crear.

El echo es que no quiero usar tanto Array, y menos tantos instance_create
por que esto es un ejemplo pero el uso que le dare serian demaciados arrays o instance_create. pense en el codigo repeat o un for, pero en este momento no se me ocurre como integrarlo.


[gml]// script(fx, fy, lx, ly, obj, n);
var fx, fy, lx, ly, obj, n, l, d;
fx = argument0;
fy = argument1;
lx = argument2;
ly = argument3;
obj = argument4;
n = argument5;

l = point_distance(fx, fy, lx, ly) / n;
d = point_direction(fx, fy, lx, ly);

for (i = 0; i <= n; i += 1) {
    instance_create(fx + lengthdir_x(l, d) * i, fy + lengthdir_y(l, d) * i);
}[/gml]
Es un script, ponele el nombre que quieras y llamalo con los siguientes argumentos:

0: x inicial,
1: y inicial,
2: x final,
3: y final,
4: objeto a crear,
5: n?mero de objetos a crear.

Tu ejemplo ser?a as?, si el script se llama "tengo_hambre":
[gml]tengo_hambre(0, 0, 0, 128, objEstrella, 5);[/gml]

No est? probado.
Vim.

El nombre del script es muy innovador jajaja.
Aun no lo pruebo, aunque se que como esta no me funciona, pero es muy parecido a lo que intentaba hacer, mi "error" usar el seno y coseno, en ves de lengthdir_..., bueno aunque variara mucho las coordenadas x,y. pero us?ndolo con adactandolo a lo que necesito, puede que funcione, aun no lo se, luego edito y te comento.

Bueno, de hecho lo que hace lengthdir_{x,y} "detr?s de c?maras" son operaciones matem?ticas con seno y coseno. Mir?, as? se implementar?a un lengthdir_x:
[gml]// lengthdir_x(len, dir);
var len, dir;
len = argument0;
dir = argument1;
return cos(degtorad(dir)) * len;[/gml]
lengthdir_y ser?a lo mismo pero con seno y -len.
De todas formas es mejor usar lengthdir porque es m?s r?pido.

En fin, si el c?digo de mi anterior post no era lo que quer?as entonces no entend? bien la pregunta.
Vim.

Este fue el resultado el cual no fue favorable.
var n, l, d, xf, yf;

xf=argument0; //aca coloca las coordenadas x
yf=argument0  //las coordenadas y
//Estoy usandolo en el event create, ya que esas instancias solo deben crear una ves-


n=point_distance(x, y, xf, yf)/18; //devuelve cuantos caben dejando un espacio.

l = point_distance(x, y, xf, yf) / n; //longitud
d = point_direction(x, y, xf, yf); //direccion.

for (i = 0; i <= n; i += 1) {instance_create(x + lengthdir_x(l, d) * n, y + lengthdir_y(l, d) * n,object0);}

//la falla es que no va a la direccion xf, yf.
se dirige desde x,y, que es la x,y, del obj que llama el script
y xf,yf serian la x,y, de una instancia anterior. aunque pongo las coordenadas en xf,yf, me da el mismo resultado osea la direccion en las que son creadas es esta inicia en el obj que llama el script pero la linea de creada por la instancias culmina por lo general en las coordenadas 32,32 ecepto de una que iniciaba en la que resulto la cual iniciaba en 384,80 y el el punto final eram xf,yf =288,400; fue la unica en la que resulto. no entiendo el por que ya que no veo la logica del por que no funciona. no te dejo el juego por que en verdad nunca lo coloque en el juego siempre pruebo codigos nuevos en nuevos ejemplos si funcionan con el Merge Game los agrego.

A ver, cambi? esto:
[gml]for (i = 0; i <= n; i += 1) {instance_create(x + lengthdir_x(l, d) * n, y + lengthdir_y(l, d) * n,object0);}[/gml]
Por esto:
[gml]for (i = 0; i <= n; i += 1) {instance_create(x + lengthdir_x(l, d) * i, y + lengthdir_y(l, d) * i,object0);}[/gml]
Vim.

Presiona Right para que se creen los circulos rojos.
La idea es que los circulos nuevos al crearse crean una linea con
los circulos amarillos asia el circulo rojo anterior.
Dejo adjunto el editable.
presiona Right.

No tengo el GM. Si no explic?s el problema con palabras, no te puedo ayudar. Lo siento.
Vim.

#8 Noviembre 11, 2011, 09:26:15 PM Ultima modificación: Noviembre 12, 2011, 04:07:00 AM por elviskelley
bueno use draw_line.... para que se dibujen lineas de la forma correcta en que deben crearse las instancias.
y tome una captura de pantalla.
las lineas es correcto los circulos que se crean veras como esta mal direccionados.

El primer script de wadk funciona a la perfecci?n  :-\, dejo adjunto (usa el click derecho para crear las bolitas)

#10 Noviembre 12, 2011, 03:22:15 AM Ultima modificación: Noviembre 12, 2011, 04:03:49 AM por elviskelley
Edit: Crei era un bug del game maker, pero no fue asi abajo vean la solucion.

Bueno esta solucionado. Muchas gracias por la ayuda.

#11 Noviembre 12, 2011, 03:42:50 AM Ultima modificación: Noviembre 12, 2011, 03:45:36 AM por Wadk
Hombre, esa imagen tan inocente como se ve, pesa m?s de un megabyte. Hacete un favor y dej? de usar el formato bmp.

En fin, me tuvo un buen rato pensando el problema, y finalmene encontr? el error.
Lo introdujiste vos cuando modificaste el script. Busc?.


Si me llev? tiempo esto, que cuando fui a postear el mensaje me encontr? con dos mensajes nuevos ;).
As? que bueno, como veo que te est?s confundiendo bastante...
Todo lo que mencion?s en el post anterior es inv?lido, el verdadero error era este:
[gml] xf=argument0; //aca coloca las coordenadas x
yf=argument0  //las coordenadas y [/gml]
En la segunda l?nea deber?a decir argument1. Y eso era todo.
Vim.

#12 Noviembre 12, 2011, 03:50:49 AM Ultima modificación: Noviembre 12, 2011, 04:08:31 AM por elviskelley
Jajajajajaajajaajajajaja Que tonteria, yo pensando que era un bug del game maker jajaja. use dos valores distintos con un mismo argument jajaja. Por eso dicen que dos cabezas piensan mas que una.
Gracias por aclararlo, seguia dandole vueltas, del por que no me funciono jajaja.
Si hice la prueba y funciono bien mi modificacion del script.
La idea de modificarlo, no fuera que no me gustara tu script Original, si no que me parecio, mejor el resumir a solo 2 argument.Y ahi el error 2 argument en uno solo jajaja queria hacer gemelos jajaja.

AH! y yo de imagenes uso es PNG, pero esa es una que tome con el F9, y la guarda bmp.