el esquema basico de fenix es tener un "proccess", con sus frames, e ir modificando la variable "graph=1 graph=2" para ir animando.
Pero que ocurre si cada frame esta formado por dos trozos de imagen vease (frame1 = piernas1+cabeza1+cuerpo1)
si dibujo todas las combinaciones de piernas,brazos y cabezas pues seria muy facil, eso si tendria que tener todas las combinaciones dibujadas.
Como se hace eso en Fenix? lo de que cada frame se compone de dos trozos.
Yo en C/C++ simplemente me haria una funcion dibujaframe() que internamente pinta los dos trozos a la vez, pero en Fenix ando perdido :(
Aiken
Bueno, hay varias formas. Para hacerlo como tu dices necesitarias crear un gráfico nuevo sobre el que dibujar (new_map), porque supongo que no querras hacerlo sobre el fondo) y luego pintar sobre el. Existen funciones como map_put, map_xput... que pintan un grafico cargado sobre otro, pero está limitado a que tanto gráfico origen como destino esten en la misma librería, algo facil de hacer si haces "map_clone" sobre los gráficos del fpg cargado. Tambien existe una funcion "map_xnput", creo que era, que elimina esa restriccion, no se si en la ayuda online o en el wiki de Fenixworld está documentada, pero buscando por el foro de Fenix seguro que hayas respuesta. Y acuerdate despues de cada frame, antes de redibujar, limpiar el gráfico (map_clear)
Pero lo suyo es que utilices un proceso por cada "miembro" movil. Cada proceso puede manejar un gráfico, así que ya sabes, solo tienes que poner cada brazo y pierna en un proceso, cambiar la variable local angle para que giren y las variables "x" e "y" para que sigan al cuerpo.
Cuando creas un proceso, este devuelve un int, que es su id (o numero de identificacion), si lo guardas en una variable y se lo pasas a un proceso "brazo", podrás averiguar su posicion a cada frame. Ejemplo:
process brazo (int id_cuerpo)
begin
z=-1; //lo ponemos más cerca que el cuerpo
loop
x=id_cuerpo.x;
y=id_cuerpo.y;
frame;
end
end
Este proceso seguirá siempre al proceso que le pases como parámetro, colocandose en su centro (o donde este su punto de control cero). Si quieres que esté más hacia la derecha, sumale algo a la x que obtengas.
Tambien puedes hacerlo usando "puntos de control" con "get_point" o "get_real_point". Eso ya es mejor que busques en la ayuda o te pases por el foro de Fenix para algo más en profundidad, porque es bastante largo para explicarlo del tiron ;)
Espero que te sirva de ayuda.
Drumpi eres un monstruo.
Con toda tu ayuda ya me has dado entretenimiento para unos dias :D
Ya son dos post mios que lees y solucionas, graaaacias ;)
Espero no daros mucho mas la coña :)
Aiken
< - >
pregunta: no se podria sobrecargar/sobreescribir la funcion frame de un proceso para que en lugar de hacer lo tipico haga otra cosa? quizas pienso demasiado en c++ :D
voy a mirar la primera opcion porque la segunda opcion la de crear un proceso me parece demasiado crear un proceso para cada brazo. Conceptualmente los "objetos" mas pequeños que tengo son los muñecos, crear proceso para los brazos es mucho bajar en el diseño. ademas tener brazos y piernas "concurrentes" me da un poco yuyu jeje :)
Aiken
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions Inc. All rights reserved.