Tontadas y pamplinas + Otras dudas

Started by Futu-block, August 19, 2016, 01:28:24 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

panreyes

En principio si usas get_point con una variable global, esta no debería ser sobreescrita sin motivo.

¿Lo haces de esta forma?
get_point( file, graph, 0, &global_x, &global_y );


Futu-block

sip, lo asocio a una variable global ya definida de antemano, aunque lo revisaré si la he declarado tarde y no me hace caso

Futu-block

#197
Quote from: Futu-block on March 05, 2019, 09:30:29 AM
Otra:
¿Sabeis como se hace para que en mode_window se pueda cerrar pulsando la X de cerrado de la ventana?
***
------------------*---------------------
por cierto, me ha salido este error, a ver quien sabe que me falla




Este error me está ocurriendo mucho, y pasa mas frecuente cuando uso colisión del raton con la imagen del proceso

¿cuantas veces se puede hacer para que no falle?

lo ultimo que estoy haciendo es que al hacer click cambie el sprite del raton le meto un bloque for:


       if (collision (type mouse))   // si el raton entra en su grafico
         size = 110;
         if (mouse.left and !lef) lef = true;          // si se clica
            if (defrente == true)
               defrente = false;
            for (r = 200; r < 219; r++)
               mouse.graph = r;
               mouse.size = 50;
               frame(100);
            end
            mouse.graph = 999;
            mouse.size = 100;
         end
         if (!mouse.left and lef) lef = false; end



y el error segun he podido encontrar en la wel es  sobre wine...asi que bennu funciona en mi pc porque tengo wine, y si me falla es porque el wine me falla, si no no hay manera de echar a andar bennu... ¿no?

panreyes

Ni idea de por qué.

Cosas que te recomendaría:
- Asegúrate de que no estás funcionando con Bennu compilado en 64 bits porque explotarán los punteros everywhere.
- No uses punteros salvo que sea necesario (da igual que no esté optimizado, los PCs van muy sobrados y no necesitas FPS)
- Usa un proceso para las colisiones con el ratón, siempre será más cómodo (y creo que igual te resuelve eso también)

Futu-block

Quote from: panreyes on March 14, 2019, 03:43:45 PM
Ni idea de por qué.

Si idea porqué, y he estado haciendo pruebas y te respondo:

Quote from: panreyes on March 14, 2019, 03:43:45 PM
Cosas que te recomendaría:
- Asegúrate de que no estás funcionando con Bennu compilado en 64 bits porque explotarán los punteros everywhere.
- No uses punteros salvo que sea necesario (da igual que no esté optimizado, los PCs van muy sobrados y no necesitas FPS)

¿que coñ* es un puntero?
ah, vale, ya me acuerdo, preguntar por regiones de memoria y eso...
cosas que ni se usar ni quiero, asi que estoy a salvo

Quote from: panreyes on March 14, 2019, 03:43:45 PM
- Usa un proceso para las colisiones con el ratón, siempre será más cómodo (y creo que igual te resuelve eso también)

Esa es la clave que me está dando porcu, estaba haciendo el método visual basic: un proceso por cada botón, cada proceso miraba si se colisionaba con el raton y se modificaba, y al haber muchos botones han venido los problemas

¿Solución? la que usaba antes que no me daba ni uno, una rejilla y solo un proceso para el ratón que diga en que cuadro de la rejilla se ha clicado y se actua... mano de santo


Gracias, ya me estaba volviendo loco

Futu-block

¿esto es normal? En el primer for uso como variables a y b, en el segundo vuelvo a usar a y b en vez de el e y f y no me responde como ponerlo con e y f:
// clonamos los graficos y lo guardamos en el array
    for (b = 0; b < 6; b++)
        for (a = 0; a < 6; a++)
            pest[b][a] = map_clone(fpg_evie, 710 + a);
        end
    end
// recortamos los sobrantes
    for (e = 0; e < 5; e++)
        for (f = 0; f < 6; f++)
            for (c = 0; c < 56; c++)
                for (d = 0; d < 48; d++)
                    if (map_get_pixel(fpg_evie, 720 + e, c, d) == rgb(255,0,0))
                        map_put_pixel(fpg_evie,pest[e][f],c, d,rgba(255,250,0,255));
                    end
                end
            end
        end
    end

si al principio del bloque for le pongo que a = 0 y b = 0 ¿porque se lo pasa por el forro?a mi no me importa usar mas variable, si combinas letras hay infinidad de variables, je je, pero ¿porque pasa?

Futu-block

#201
Quote from: panreyes on March 12, 2019, 12:53:18 PM
En principio si usas get_point con una variable global, esta no debería ser sobreescrita sin motivo.
¿Lo haces de esta forma?
get_point( file, graph, 0, &global_x, &global_y );
pues me sigue dando problemas, le tengo que meter un frame en el mismo begin y antes del loop,no se lo que afectará o no al tema, en la primera imagen no tiene el frame y cargo los &global_x, &global_y en el main  y no lo carga


sin embargo en esta otra le hago frame delante de designar el valor x,y y funciona, me pone el ojo donde es...

Distinto ya que haya puesto el punto de control donde no es





Pd: tengo problemas de edición en el foro, no me respeta los saltos de linea

Futu-block

#202
Otra cosa que me pasa es que tengo una ''Violación de segmento (`core' generado)'' porque intento guardar el punto de control 0 correspondiente al centro real de la imagen, ya declarado...



//   get_point(fpg_cuerpos,100,0,&centx,centy);
   get_point(fpg_cuerpos,100,1,&hombr1x,&hombr1y);
   get_point(fpg_cuerpos,100,2,&hombr2x,&hombr2y);

De hecho, creo que tengo algún problemilla que me crea un porron de archivos con este ''core generado''

Futu-block

mas cositas que siguen fallando, al parecer no puedes hacer get_point detras de set_point...
habrá que meterle un frame de por medio o algo...




de todas formas, como lo que hago es medir el ancho + el alto y juego con esas medidas, las guardo en una global y san Sacabó.
Me vá a resultar mas cómodo

Futu-block

Problemas con colisión y get_id:

Vamos, yo creo que hay algo que no estoy haciendo bien, esta vez es con un juego como el frogger que ya presenté en su dia en un concurso que @freeyourmind hizo en gp32spain...
Resulta que cuando está en el rio, comprueba con un mapa de durezas y muere a menos que esté sobre un tronco; hago un proceso llamado tronco y le doy un par de cualidades al cargar para que vaya a la izquierda o a la derecha (por ejemplo) así que lo que hago es comprobar si hay colisión con el tronco, le pregunta el id y lo guarda en una variable para actuar acorde con el movimiento del tronco, pero cuando salta a otro tronco con otra dirección se sigue moviendo en la misma dirección...Código por si acaso

localint direccion, velocidad;
            if (collision(type tronco))
                coli_rana = false;
                tronc = get_id(type tronco);
                switch (tronc.direccion)
                    case 0: x = x - tronc.velocidad; end
                    case 1: x = x + tronc.velocidad; end
                    case 2: x = x + tronc.velocidad; end
                end
            else
                coli_rana = true;                // activamos la colision
                rana_morida(x,y,rand(1,8));        // creamos imagen de rana muerta (probar con pegar png)
                x = -100; y = -100;                // sacamos la rana del campo de vision
            end

Seguro que hay algo que estoy haciendo mal, igual es la misma variable donde guardo en cada colisión con distintos procesos ''tipo'' tronco (ya que es el mismo) y debería usar una distinta, o lo mismo es donde lo tengo puesto, debería estar casi al final del loop, o que cuando deje de tener colisión esta variable valga cero y al colisionar otra vez pille la el id...
Todo eso si cada proceso tiene un id distinto aunque sea muchas veces el mismo
jelp plis, aclararme una mijita el tema

SplinterGU

Quote from: Futu-block on April 07, 2019, 07:51:11 PM
mas cositas que siguen fallando, al parecer no puedes hacer get_point detras de set_point...
habrá que meterle un frame de por medio o algo...




de todas formas, como lo que hago es medir el ancho + el alto y juego con esas medidas, las guardo en una global y san Sacabó.
Me vá a resultar mas cómodo

no hay que meter ningun frame.
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

El problema es que cuando deja de hacer la colisión debe de des ''get id'' y volver a hacer ''get id'' solo si hay nueva colisión con el nuevo tronco guardandolo en la misma variable...

voy a probar poniendo a 0 la colisión entre tronco y tronco, a ver si vá, me parece absurdo tela pero por probar...

Futu-block

pues nope, no va asi...
me buscaré otra manera humana de hacerlo

SplinterGU

Quote from: Futu-block on May 27, 2019, 04:23:08 PM
El problema es que cuando deja de hacer la colisión debe de des ''get id'' y volver a hacer ''get id'' solo si hay nueva colisión con el nuevo tronco guardandolo en la misma variable...

voy a probar poniendo a 0 la colisión entre tronco y tronco, a ver si vá, me parece absurdo tela pero por probar...

no entiendo que quieres hacer, collision no es una operacion barata, no entiendo para que en el mismo frame necesitas detectar varias veces la colision contra un mismo proceso... si ya colisiono una vez no necesitas buscar nuevamente, tambien puedes hacer collision(id de proceso)... o puedes resetear a mano las variables internas del collision (aunque no es recomendable)

para collision(0) puedes poner a 0 esta variable _mod_grproc_reserved.id_scan

para collision por type, podes hacer simplemente collision a un tipo diferente (tener un tipo dummy para esto, sin procesos corriendo) y luego volver a repetir por el tipo que estabas haciendolo

cualquiera de las 2 formas reiniciara de nuevo desde el primer proceso en lista...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Futu-block

no es ese el problema, el problema es que está haciendo colisión en un proceso y guardando su id en una variable que luego usa para cuando colisione con otro proceso que es un duplicado del primero pero con distintas variables.
el problema que no me distingue entre procesos iguales, será que se guarda en la misma variable o no se, pero ya lo he hecho de otra manera en el que cuando hace la colisión no le pregunta al proceso si no que actúa por defecto