Ok he creado esta jerarquía y no logro hacer que se comporte como la necesito.
En la primera imagen coloco las 2 flechas como deben quedar en la pantalla,
En la segunda imagen he rotado la flecha roja 90 grados y la verde no la sigue.
En la tercera imagen a la verde le he agregado
x = father.x;
y = father.y;
angle=father.angle;
y la verde sigue a la roja en x & y pero rota con relación a su propio pivote.
En la cuarta imagen he manipulado el pivote de la verde con
center_set(0,graph,50,200);
asi el pivote de ambas esta en el mismo lugar y finalmente logro que la verde siga perfectamente a la roja (pero esto es mas un problema que una solución).
En la quinta imagen necesito rotar la verde en la dirección contraria (tal y como se ve en la imagen)estando aun en la punta de la flecha roja pero no puedo por que el pivote lo use para seguir a la flecha roja en la imagen cuatro..........
Necesito que la flecha verde este siempre en el lugar donde la coloque con respecto a la roja, en este caso la base de la flecha verde siempre debe estar en la punta de la flecha roja y la flecha verde debe poder rotar libremente.
Supongo que me falta una parte en la jerarquia :-\ pero ya me quede bloqueado en este tema.
(https://image.ibb.co/mVxD8F/dem.jpg) (https://ibb.co/k55dav)
Gracias por su tiempo.
se me ocurre que quizas es un tema de prioridades (priority)
sin ver codigo es dificil darte una respuesta correcta.
Este es el codigo:
import "Mod_grproc";
import "Mod_proc";
import "Mod_text";
import "Mod_key";
import "Mod_mouse";
import "Mod_video";
import "Mod_map";
import "Mod_screen";
import "Mod_math";
Global
int fichero;
int imagen;
process Main()
Begin
Set_Mode(610,480,16);
set_fps(0,0);
fichero = Load_fpg("carros.fpg");
rojo(460,250,16);
End
process rojo(x,y,z,)
Begin
verde(160,90,15);
//AAA(160,139,16);
File = fichero;
Graph = 33;
center_set(0,graph,50,100);
Loop
IF (key(_left))
x-=4;
END
IF (key(_right))
x+=4;
END
IF (key(_1))
angle+=100;
END
IF (key(_2))
angle-=100;
END
//write_int(0,50,50,0,&fps);
Frame;
End
End
process verde(x,y,z)
Begin
File = fichero;
Graph = 34;
center_set(0,graph,50,100);
Loop
x = father.x;
y = father.y-100;
angle = father.angle;
Frame;
End
End
puedes poner el codigo junto al fpg en un zip?
En el zip estan el fpg, el prg y el dcb
a mi me va de lujo, no se con que version estas probando.
el unico tema que cuando me voy a la derecha revienta... algun bug... (revienta al usar una resolucion no estandard)
el set_center no es
center_set(0,graph,50,100);
tiene que ser
center_set(file,graph,50,100);
whaaaaaaat.........
como asi? le funciona y la flecha verde mantiene su posicion en la punta de la flecha roja al rotar???????
Estoy usando notepad++ v6.5.1 (unicode)
version de bennugd.
file = 0 se usa para graficos creados desde bennugd o cargados individualmente (por ejemplo, new_map, map_load, png_load, etc...), cuando haces un fpg_load, no puedes usar 0, tienes que usar el identificador devuelvo por la funcion fpg_load, (puede ser que devuelva 0, pero nadie te lo garantiza)
Es bennupack 2.6
A mi me hace esto al rotar:
https://youtu.be/bW1v0W9xp1Q (https://youtu.be/bW1v0W9xp1Q)
De la unica forma que la flecha verde sigue estando en la punta de la roja es manipulando el pivote de la flecha verde.
ahora entiendo que quieres... pense que querias que roten los 2, rotar, rotan...
no tiene nada que ver con las jerarquias... ya te paso como seria...
Lo que trato de lograr es esto:
https://youtu.be/iW8IP7Dk9X8
una tarea simple en teoria........
import "Mod_grproc";
import "Mod_proc";
import "Mod_text";
import "Mod_key";
import "Mod_mouse";
import "Mod_video";
import "Mod_map";
import "Mod_screen";
import "Mod_math";
Global
int fichero;
int imagen;
process Main()
Begin
Set_Mode(640,480,16);
set_fps(0,0);
fichero = Load_fpg("carros.fpg");
rojo(460,250,16);
End
process rojo(x,y,z,)
public
cx,cy;
Begin
priority = 20;
verde(160,90,15);
File = fichero;
Graph = 33;
center_set(file,graph,50,100);
set_point(file,graph,1,50,0);
Loop
IF (key(_left))
x-=4;
END
IF (key(_right))
x+=4;
END
IF (key(_1))
angle+=100;
END
IF (key(_2))
angle-=100;
END
if (key(_ESC))
let_me_alone();
break;
end
get_real_point(1,&cx,&cy);
//write_int(0,50,50,0,&fps);
Frame;
End
End
process verde(x,y,z)
private
rojo padre;
Begin
priority = 10;
File = fichero;
Graph = 34;
center_set(file,graph,50,100);
Loop
padre = father;
x = padre.cx;
y = padre.cy;
// angle = father.angle;
Frame;
End
End
Quote from: juguefre on June 11, 2017, 04:55:36 AM
Lo que trato de lograr es esto:
https://youtu.be/iW8IP7Dk9X8
una tarea simple en teoria........
para la primera parte de ese video, a mi respuesta, descomenta esto
// angle = father.angle;
y para la 2da parte, como lo puse
podrias buscar mi codigo de una crapcompo, creo que el juego se llamaba resident evil, y son unos zombies echos a bloques y circulos que usan esto mismo para los brazos, piernas, cabeza, vamos, para todas las articulaciones... usan pivotes y cada miembro se mueve con respecto al joint del miembro padre.
Quote from: SplinterGU on June 11, 2017, 05:02:49 AM
podrias buscar mi codigo de una crapcompo, creo que el juego se llamaba resident evil, y son unos zombies echos a bloques y circulos que usan esto mismo para los brazos, piernas, cabeza, vamos, para todas las articulaciones... usan pivotes y cada miembro se mueve con respecto al joint del miembro padre.
Creo que tengo ese juego y me parece que se llamaba Viohazard o eso recuerdo (con V) lo voy a buscar y a estudiar bien.
Mil gracias por la ayuda ya me estaba desesperando con esto.
no, es este, lastima no esta completo, pero creo que si compilas el editor de animaciones deberia funcionar (que es lo que te podria interesar mas)
http://forum.bennugd.org/index.php?topic=437.msg7875#msg7875
EDIT: efectivamente, el editor funciona. Es un esqueleto humano donde podes mover todos sus huesos, y estan vinculados unos a otros, cuando moves algo, afecta al todo.
Nuevamente mil gracias, voy a revisar ese juego tuyo completamente para entender bien este tema.
de nada, un gusto.