Dudas con textos (write), el mouse y fpg de un bit

Started by master, December 31, 2013, 08:50:36 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

master

En si tengo varias dudas, pero vamos por partes:


1) ¿es posible escribir textos con write en una dirección diferente?; me refiero a escribir de derecha a izquierda, o de arriba hacia abajo


2) ¿como puedo detectar una colisión del mouse con un texto?


3) Así como se puede cambiar el color de una fuente de 1 bit con set_text_color, ¿hay forma de cambiar el color de un gráfico de un fpg de 1 bit?


4) ¿hay forma de usar la función palette_roll en modo 16 bits con un FPG de 8 bits?

MythomizeR

#1
Quote from: master on December 31, 2013, 08:50:36 PM
En si tengo varias dudas, pero vamos por partes:


1) ¿es posible escribir textos con write en una dirección diferente?; me refiero a escribir de derecha a izquierda, o de arriba hacia abajo


2) ¿como puedo detectar una colisión del mouse con un texto?


3) Así como se puede cambiar el color de una fuente de 1 bit con set_text_color, ¿hay forma de cambiar el color de un gráfico de un fpg de 1 bit?


4) ¿hay forma de usar la función palette_roll en modo 16 bits con un FPG de 8 bits?

1. Con" write" diría que no se puede, pero, a groso modo se me ocurre que puedes usar banderas (flags) (que igual no te sirve porque requieres que sea con la función "write", pero ahí va por si acaso te sirviera).
Haces un write_in_map con el texto y luego lo dibujas "espejado" en horizontal con el flag correspondiente (B_HMIRROR;).
Si lo haces como proceso, asignas el id que devuelve "write_in_map" a la variable local "graph" y luego con sus variables locales "flag" (flags = B_HMIRROR; para texto espejado en horizontal) y "angle" (angle = -90000; para texto de arriba a abajo) transformas como quieres.

2. Se me ocurre una técnica similar a la anterior: conviertes el texto en mapa mediante "write_in_map" y lo haces proceso asignándolo a la variable local "graph" y entonces con "collision(type mouse)" detectas la colisión.

3. Un sistema ortodoxo pero efectivo es que, una vez cargado el mapa en memoria, recorras todos sus pixels mediante un doble bucle anidado (o un solo bucle) para, mediante una sencilla comprobación en cada iteración, se vayan cambiando todos sus pixels al color deseado.
Y por supuestísimo esto lo puedes hacer una función cambia_color_mapa() (por ejemplo) que tenga como parámetros de entrada "file", "graph", "nuevo_color" donde dentro y antes del bucle obtienes las dimensiones del gráfico mediante la función pertinente.

4. Esto que te lo respondan los más experimentados en este aspecto porque yo no he tenido casi experiencia con ciertas cosas de los archivos .fpg.

Hay muchas técnicas para hacer todas éstas cosas, pero por lo poco que conozco el lenguaje y por darte unas primeras ideas, es lo que a bote pronto se me ocurre.

Nota: Y si lo que quieres es que las letras conserven su aspecto natural (sin espejados ni giros, como aparecen por ejemplo en una sopa de letras), pues sería hacerse una función o proceso que generase las cadenas carácter a carácter (mapa a mapa) en el sentido que le indicaras, por ejemplo.

Drumpi

1: No, no es posible. Ya se preguntó en otras ocasiones, y hubo planes, pero hoy día sólo se puede hacer creándote tu propio map usando un FPG con las letras, o con FNTs y write_in_map.

2: Como dice Mythomizer, sólo mediante write_in_map, que genera un mapa que sí se puede colisionar, pero ojo con los pixeles transparentes. En ese caso, es mejor usar collision_box o directamente por coordenadas.

3: Creo que drawing_color es la función que determina el color con el que se dibujan los FPGs/MAPs de 1 bit y las primitivas gráficas que se usan con DRAW_* (draw_line, draw_box...). No sé si afectan a los mapas que ya estuvieran en pantalla o sólo a los nuevos, como pasa con los textos y los draw.

4: En teoría, pallete_roll afecta a una paleta cargada, así que sí, en modo 16bits debería funcionar. Otra cosa es que esté afectando a la paleta del sistema o a la paleta de un proceso concreto. Cuando en 16bits sólo existía una única paleta, sí que funcionaba, pero ahora que se pueden cargar varias paletas hay que tener cuidado a cuál le haces el roll_pallete, pero no te puedo dar más indicaciones porque no he trabajado con paletas en 16bits... aun ^^U
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)