Muy buenas gente. Tengo un problema que seguramente sea una tontería y sea fácil el arreglo, pero no doy con la solución.
En una pantalla de opciones tengo 3 deslizadores que lo que hacen es darme valores R G B según donde los ponga.
Estos valores los meto en los blendop_tint del proceso que pongo debajo. Lo que me crea una mascara de color que superpongo sobre una imagen en blanco y negro.
El problema es que solo me actualizan los valores si voy a la pantalla anterior, por lo tanto no me actualiza al vuelo en el momento.
PROCESS Imagenfigmascara(x,y,cual)
PRIVATE
begin
z=-20;
blendop = blendop_new();
switch (cual);
case 0:
blendop_tint (blendop, 1.0, skin_rojo, skin_verde, skin_azul);
blendop_assign(player_fpg,graph,blendop);
blendop_translucency(blendop,0.45); end; // cara
case 1:
blendop_tint (blendop, 1.0, ojo_rojo, ojo_verde, ojo_azul);
blendop_assign(player_fpg,graph,blendop);
blendop_translucency(blendop,0.45); end; // ojo
case 2:
blendop_assign(player_fpg,graph,blendop);
blendop_tint (blendop, 1.0, pelo_rojo, pelo_verde, pelo_azul);
blendop_translucency(blendop,0.45); end; // pelo
end;
loop
switch (cual);
case 0: file=player_fpg; graph=1; // cara
end
case 1: file=player_fpg; graph=2; // ojo
end
case 2: file=player_fpg; graph=cuentapelo+50; // pelo
end
end
frame;
end
end
Al igual que el fpg y el graph que tengo dentro del Loop supongo que tendría que meter los skin_rojo... ojo_rojo... de alguna manera pero no se como.
Es la primera vez que uso Blendop y por mas que miro en los ejemplos, estos solo me dicen como hacerlo a través de la pulsación de una tecla.
Se agradece cualquier ayuda.
Yo hace eones que no uso blendops, pero creo que tienes que meter el Blendop_tint dentro del loop. Ten en cuenta que son FUNCIONES, se ejecutan en el momento en que se llaman, no generan procesos y, mucho menos, actualizan los valores si modificas los valores: estás pasando datos por valor, no por referencia (a menos que le pases punteros, pero BlendopTint no admite punteros).
El Blendop_assign y Blendop_traslucency, como entiendo que no se cambian, con que se ejecuten una vez, ya vale.
Tienes razón. Los Blendop_tint van dentro del Loop y con eso arreglado.
Lo que también e tenido que cambiar a sido poner /2 a cada valor de skin_rojo, verde... ya que al llegar el deslizador a media barra este me empezaba a hacer cosas raras con el color.
(https://i.imgur.com/JtxaI4ym.jpg) (https://i.imgur.com/GCkdnOlm.jpg)
Gracias por la ayuda :)
Creo que, más bien que poner un /2 deberías controlar los valores que contienen skin_rojo, verde, etc desde el sitio donde les asignas valor, no desde el proceso. No saber si le estás metiendo valores positivos, negativos o te estás saliendo del rango de uso al asignarlo, puede ser peligroso, por eso, desde este proceso que has escrito, dentro del bucle, sería interesante que comprobases que skin_rojo y demás contienen valores válidos para la función BLENDOP_TINT antes de aplicársela. Sí, puede que sea una comprobación absurda y que consuma tiempo de CPU, pero a menos que estés MUY apurado de recursos, una capa extra de seguridad en tu código nunca está de más.