Problemilla con un scroll

Started by masteries, April 05, 2018, 04:41:40 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

masteries

Saludos muchachotes,

Estoy trabajando en un nuevo proyecto, de gran envergadura, orientado a Android como plataforma objetivo y me he decantado por utilizar este ligero fork de Bennu llamado PixStudio

Lo primero, he observado que rinde bastante bien, seguro que debido al uso de SDL2 y el buen trabajo que hayan hecho otros compañer@s,

Ahora al tema del hilo; estuve programando un scroll que es infinito en horizontal pero sólo tiene dos pantallas de alto; al crear el sprite (proceso) del protagonista, le asigno la camara a su identificador. El scroll funciona bien en la coordenada horizontal, pero no se está desplazando cuando muevo el sprite en la coordenada vertical. Por tanto, cuando el personaje baja o sube, la cámara no le sigue de forma vertical y me hecha al traste con el scroll de dos pantallas de alto...

Aquí está el código:



program battles;//       Battles ;  17-3-2018


//import varios
               
GLOBAL
indice;
avance;
tiles_offset;
tiles;
gfxplayer;
sprites;
idplayer;
idcamara;
pantalla;
color_texto_original;
no_graph;
BYTE unlock_fps=0;

INCLUDE "easy.inc"


BEGIN
     color_texto_original=get_text_color();
     //full_screen=true;
     set_mode(800,480,16);//color de 8 bits
     set_fps(30,0);//30,0
     tiles=fpg_load("tiles.fpg"); //bennu load_fpg  , pix  fpg_load
     gfxplayer=fpg_load("gfxfase3.fpg");
     //load_pal("sources/fase3/tiles.fpg");
     pantalla=map_new(800,960,16);//bennu new_map   , pix map_new
no_graph=map_new(0,0,16);
     render_fase();
     loop
        if(key(_enter))
           break;
        end
        if(key(_space))
           while(key(_space))
              frame;
           end
           if(unlock_fps==0)
             set_fps(0,0);//máxima velocidad
             unlock_fps=1;
           else
             set_fps(30,0);
             unlock_fps=0;
           end
        end
        frame;
     end
     fpg_unload(tiles);  //bennu unload_fpg   ,  pix  fpg_unload
     fpg_unload(gfxplayer);
     map_unload(0,pantalla);
map_unload(0,no_graph);
     exit();
END
//fin main


process render_fase()
private
INT n;
begin
file=tiles;
region_define(1,0,0,768,960);//bennu define_region  ,  pix region_define
scroll_start(0,0,pantalla,0,1,3);//1 en lugar de 1 | 2  bennu start_scroll  , pix scroll_start  el scroll va en la región 1
scroll[0].flags1=0;
//scroll[0].flags2=128;//128
player();
//scroll[0].camera=idplayer;
indice=0;
avance=0;

write(0,20,200,4,fps);
loop
        //delete_text(all_text);//debug
        write(0,140,200,4,fps);
        //write(0,170,200,4,"FPS");
        //write(0,280,200,4,"Select unlock fps limit");
        //write(0,120,220,4,"Memoria disponible(KB):");
        //write(0,240,220,4,memory_free()/1024);
//write(0,40,200,4,"Start to exit");
   frame;
end
end


process player()
begin
file=gfxplayer;
graph=1;
ctype=c_scroll;
cnumber=c_0;
//region=1;
x=384;
y=224;
z=10;
idplayer=id;
idcamara=camara();
//scroll[0].camera=camara();
loop
   delete_text(all_text);
   write(0,64,96,4,x);
   write(0,64,128,4,y);
   if(key(_right))
      flags=0;
      x += 2;
  if(x > 384)
    idcamara.x += 2;
  end
   end
   if(key(_left))
      flags=1;
      x -= 2;
  if(x < 8832)
    idcamara.x -= 2;
  end
   end
   if(key(_up))
     y -= 2;
if(y < 672)
   idcamara.y -= 2;
end 
     //scroll[0].y0 -= 2;
   end
   if(key(_down))
     y += 2;
idcamara.y += 2;
//scroll[0].y0 += 2;
   end
   //límites del scroll
   if(y<224)
       y=224;
   //scroll[0].y0 = 224;
   end
   if(y>890)
  y=890;
  //scroll[0].y0 = 672;
   end
   if(x<10) //160
      x=10; //160
   end
   if(x>8832)//1088            1120     1088
      x=8832;//1088
   end//fin límites del scroll
   //limites de la camara
   if(idcamara.x<384)
      idcamara.x = 384;
   end
   if(idcamara.x > 8832)
      idcamara.x = 8832;
   end
   if(idcamara.y < 480)
      idcamara.y = 480;
   end
   if(idcamara.y > 960)
      idcamara.y = 960;
   end
   frame;
end
end

process camara()
begin
file=0;
graph=no_graph;
ctype=c_scroll;
cnumber=c_0;
//region=1;
x=384;
y=224;
z=10;
scroll[0].camera=id;
loop
   frame;
end

end




seguramente sea una tontería, pero no sé porque no se desplaza en vertical... en cambio si configuro el scroll para que se repita también de forma vertical, si funciona bien la cámara, pero no me interesa que se repita indefinidamente también de forma vertical.


Otra cosa, en PixStudio, ¿Cuál es el color transparente? (Uso color de 16 bits), porque en BennuGD por defecto en esta modalidad de color es el RGB:0-0-0, el negro absoluto, pero en Pix los sprites están dibujando el color negro como si no fuese el color transparente.

También, ¿se puede cambiar el color transparente? (Se nota que he trasteado siempre en Fénix y Bennu sólo en color de 8 bits).

Gracias anticipadas,



masteries

Up!

Se ha añadido el código... ¡una ayudita payo!

panreyes

Buenas. Mándame también FPGs y lo pruebo :)