ANGLE+FLAGS y ADVANCE(1)

Started by TYCO, October 09, 2008, 07:13:22 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

TYCO

Program pruebas;

Begin
    set_mode(640,480,16);

    graph=new_map(30,10,16);
    map_clear(0,graph,rgb(0,255,0));

    write_int(0,0,0,0,&angle);

    x=220;
    y=220;
    angle=135000;
    size=400;

    detectores();
    obstaculo();

    While (not key(_esc))
      If (key(_right))
            angle-=5000;
        End
        If (key(_left))
            angle+=5000;
        End
        If (key(_down))
            advance(-5);
        End
        If (key(_up))
            advance(4);
        End
//*******************************************************************
// ESTE ADVANCE(1) NO FUNCIONA SI ANGLE NO VALE 0, 90, 180, 270 o 360
        advance(1);
//*******************************************************************
        Frame;
    End
End

Process detectores()

Private
    int colision;

Begin
    graph=new_map(220,80,16);
    set_center(0,graph,110,40);
    drawing_map(0,graph);
    drawing_color(rgb(255,0,0));
    draw_box(40,0,180,5);
    draw_box(180,0,220,20);

    write_int(0,0,10,0,&flags);

    While (not key(_esc))
        x=father.x;
        y=father.y;

        If (flags == 0)
            angle=father.angle;

            colision=collision(Type obstaculo);
            If (colision <> 0)
                flags=2;
            End
        Else
            angle=-father.angle;

            colision=collision(Type obstaculo);
            If (colision <> 0)
                flags=0;
            End
        End
    Frame;
    End
End

Process obstaculo()

Begin
    graph=new_map(80,80,16);
    map_clear(0,graph,rgb(0,0,255));

    x=100;
    y=100;

    While (not key(_esc))
Frame;
    End
End



1. El advance o xadvance no funciona si el angle no vale: 0, 90, 180, 270 o 360. Esto me suena de que se hablo ya, y creo recordar que se soluciono.

2. Ejecutando ese codigo: El rectangulo verde que manejas tu con las "fechas" tiene dos sensores rojos uno a la izquierda y el otro a la derecha que es un unico proceso, con flags "0" y "2" se va colocando a cada lado. Por ultimo hay un cuadrado azul haciendo de obstaculo.

PROBLEMA: Si tocamos el cuadrado azul SOLO con un flags (el "0" o el "2") cambia al otro flags, pero si tocamos con ambos flags al cuadrado azul el angle no es correcto en su colacion. Puede ser este problema venga del bugfix de los Mirrors???

Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

SplinterGU

Por supuesto no funciona... erroneamente yo cambie que si el advance daba 0, debia avanzar 1... pero eso esta mal, al advance dar un valor menor a 1 y mayor a 0, y por ser valores enteros, no avanza... lo que hay que usar en estos casos de incrementos tan reducidos es usar resolution...

No entiendo tu 2do planteo, pero supongo que te referiras a lo que corrijo en el siguiente codigo


Program pruebas;

import "mod_video";
import "mod_text";
import "mod_key";
import "mod_map";
import "mod_grproc";
import "mod_draw";


Begin
    set_mode(640,480,16);

    graph=new_map(30,10,16);
    map_clear(0,graph,rgb(0,255,0));

    write_int(0,0,0,0,&angle);

    x=220;
    y=220;
    angle=135000;
    size=400;

    detectores();
    obstaculo();

    resolution = 10; // Splinter

    While (not key(_esc))
      If (key(_right))
            angle-=5000;
        End
        If (key(_left))
            angle+=5000;
        End
        If (key(_down))
            advance(-50);
        End
        If (key(_up))
            advance(40);
        End
//*******************************************************************
// ESTE ADVANCE(1) NO FUNCIONA SI ANGLE NO VALE 0, 90, 180, 270 o 360
        advance(10); // Splinter
//*******************************************************************
        Frame;
    End
End

Process detectores()

Private
    int colision;

Begin
    graph=new_map(220,80,16);
    set_center(0,graph,110,40);
    drawing_map(0,graph);
    drawing_color(rgb(255,0,0));
    draw_box(40,0,180,5);
    draw_box(180,0,220,20);

    write_int(0,0,10,0,&flags);

    priority = father.priority - 1; // Splinter
    resolution = 10; // Splinter

    While (not key(_esc))
        x=father.x;
        y=father.y;

        If (flags == 0)
            angle=father.angle;
            colision=collision(Type obstaculo);
            If (colision <> 0)
                flags=2;
                angle=-father.angle; // Splinter
            End

        Else
            angle=-father.angle;
            colision=collision(Type obstaculo);
            If (colision <> 0)
                flags=0;
                angle=father.angle; // Splinter
            End
        End
    Frame;
    End
End

Process obstaculo()

Begin
    graph=new_map(80,80,16);
    map_clear(0,graph,rgb(0,0,255));

    x=100;
    y=100;

    priority = father.priority + 1; // Splinter

    While (not key(_esc))
Frame;
    End
End


Por favor, confirmame si esto resuelve tu problema.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

TYCO

1. Efectivamente con ese codigo funciona bien todo, gracias por las aclaraciones, error mio de novato.

2. Mira que le di vueltas al tema (se que viene el problema por el ultimo bugfix de los Mirrors) y por eso postee.

En esta parte del codigo:
        If (flags == 0)
            angle=father.angle;
            colision=collision(Type obstaculo);
            If (colision <> 0)
                flags=2;
No me fije en que si se cumplia "collision" hacia un cambio flags seguido un frame, pero no cambiaba el angle antes del frame (grave error). De hecho el problema era apreciable (con lupa y camara lenta) al cambiar de un flag a otro.
Programador, Escritor/Guionista y Deportista.

Todo Modo Gráfico tiene por detrás una Línea de Comandos.

SnowCraft Remake (100%)
Rally Mortal (87%)

SplinterGU

hay que decir que lo del mirror mas que un bugfix (que en verdad lo es) es un cambio de comportamiento a como funcionaba fenix (y que no era correcto)

me alegro de haber sido de ayuda... y espero que te guste el nuevo comportamiento de los mirrors... se pueden hacer unos efectos muy interesantes...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2