Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - panreyes

Páginas: [1] 2 3 ... 135
1
Mesa de Ayuda / Re:Rendimiento del programa
« en: Noviembre 16, 2017, 10:47:44 am »
La verdad es que a la función let_me_alone le falta un parámetro que, dependiendo de una local, mate a ciertos procesos y a otros no.

Yo tengo hecho algo parecido en mis librerías, evita matar procesos que deben permanecer en cualquier caso con una local "unkillable"

2
No sé cuánto tiempo llevo peleándome con las codificaciones, pero hasta día de hoy no me había puesto a intentar resolverlo.

La solución es muy simple:
- Para el código fuente utilizad la codificación Windows-1252
- Para archivos con fopen y demás: CP 850

Aquí os dejo un código para que lo comprobéis por vosotros mismos. Recordad guardar el PRG en formato ANSI o CP850.
Código: [Seleccionar]
import "mod_file";
import "mod_key";
import "mod_text";
import "mod_say";

Private
int fp;
string tildes="áéíóúñ¡";
Begin
write(0,0,0,0,"PRG: "+tildes);
say("PRG: "+tildes);

fp=fopen("lee_tildes.txt",o_write);
fputs(fp,tildes);
fclose(fp);

fp=fopen("lee_tildes.txt",o_read);
tildes=fgets(fp);
fclose(fp);
write(0,0,20,0,"FGETS: "+tildes);
say("FGETS: "+tildes);

while(!key(_esc)) frame; end
End

Pd: Los ASCII en decimal de los diferentes caracteres son los siguientes:
Citar
á = 160
é = 130
í = 161
ó = 162
ú = 163
¡ = 173
¿ = 168
Á = 181
É = 144
Í = 214
Ó = 224
Ú = 233

El único problema que queda pendiente son las funciones de ucase y lcase: No funcionan correctamente con los caracteres especiales. Yo he hecho mi versión para ucase:
Código: [Seleccionar]
Function string my_ucase(string texto);
Private
string texto2;
Begin
from x=0 to len(texto);
y=asc(texto[x]);
if(y>96 and y<123) //letras estándar
y-=32;
end
if(y==160) y=181; end //á
if(y==130) y=144; end //é
if(y==161) y=214; end //í
if(y==162) y=224; end //ó
if(y==163) y=233; end //ú
texto2+=chr(y);
end
return texto2;
End

3
Mesa de Ayuda / Re:Esto me explota xD
« en: Noviembre 15, 2017, 11:47:25 am »
Tienes un bucle Repeat > Until y te falta el frame; dentro, es solo eso

No es necesario dicho frame al tratarse de una lectura de un archivo.

4
Mesa de Ayuda / Re:Esto me explota xD
« en: Noviembre 15, 2017, 07:19:56 am »
Me funciona correctamente (sin el include de BNPWriter). Ni idea de por qué te falla.
¿Es posible que tu fichero esté codificado en UTF8 con BOM? Esto lo puedes ver utilizando notepad++ y el menú de Codificación.

Suerte con ello

5
Mesa de Ayuda / Re:Esto me explota xD
« en: Noviembre 15, 2017, 06:53:42 am »
Archivo debería ser una int, no una string ;)

6
Mesa de Ayuda / Re:Esto me explota xD
« en: Noviembre 15, 2017, 06:36:25 am »
Con exactamente este código me ha funcionado correctamente:
Código: [Seleccionar]
import "mod_key"
import "mod_file"
import "mod_say"

Private
int archivo;
string linea;
Begin
archivo=fopen("archivo.txt",o_Read); //lee archivo de texto con las rutas de los ficheros
repeat
linea=fgets(archivo);
if(linea=="txt1");
   say("mensaje de bienvenida");
   while(!key(_esc)) frame; end
end
until(feof(archivo));
fclose(archivo);
End

¿Es posible que estés definiendo línea como int en vez de como string?

7
Mesa de Ayuda / Re:Obtener el tiempo en milisegundos?
« en: Noviembre 05, 2017, 02:55:17 am »
Pues yo vengo a contradeciros a todos y recomendarle que use timer.

En caso de que las FPS no sean estables, con timer no tendrá problemas pero con los contadores sí, teniendo en cuenta que la música no parará.

8
Mesa de Ayuda / Re:Obtener el tiempo en milisegundos?
« en: Noviembre 04, 2017, 02:09:51 am »
También tienes que tener en cuenta el retraso mínimo entre la ejecución de un frame y del siguiente.

Por ejemplo, a 60fps tienes un retraso mínimo de 16,66 ms entre cada ejecución (o frame) del engine.

Esto es menos problemático en un motor que no dependa de un número de frames fijo (si alcanzara 120fps, el retraso mínimo sería de 8ms) o que se ejecute de una forma que no dependa de los frames en pantalla (por ejemplo, 120 "ticks" del engine, 60 frames en pantalla).

9
General / Re:Consulta de derechos
« en: Noviembre 04, 2017, 02:00:47 am »
Futu, no te preocupes por eso. En ningún momento perseguirán a BennuGD por un juego que puedas crear con él.
Te lo digo por experiencia propia (La pesadilla de Ripollés), también viendo la de Bomberlink (SoRR) y recordando también un videojuego de "matar monjas" que se hizo en Fénix.

10
Mesa de Ayuda / Re:PROCESS/FUNCTION duda
« en: Octubre 15, 2017, 03:54:36 pm »
Gracias panreyes ahora entiendo..., solo me queda la última pregunta respecto al mismo tema de process. la pregunta es: un process sin frame, detiene todo (al igual que una function) hasta que termine de ejecutarse?
:)

El código de los PROCESS se ejecuta hasta que llega a un "frame".

Un ejemplo:
Código: [Seleccionar]
Begin
 uno();
 dos();
 while(!key(_esc))
  say(4);
  frame;
 end
End

Process uno();
Begin
 say(1);
 frame;
 say(3);
End

Process dos();
Begin
 say(2);
 frame;
End

Este sería su resultado:
Código: [Seleccionar]
1
2
4
3
4
4
4
4
4
...

BennuGD hará lo siguiente:
- Inicializa la instancia de uno(), escribe un 1 en consola y hace "frame"
- Inicializa la instancia de dos(), escribe un 2 en consola y hace "frame"
- El hilo principal (process main()) comprueba si se pulsa la tecla escape, y sino es así, escribe un 4 en consola y hace "frame"
- Todas las instancias de proceso han ejecutado su código y alcanzado un frame, así que se renderiza el fotograma (para diferenciarlo del frame del código) en pantalla.
- El gestor de instancias continua ejecutando el código de las instancias, según el orden de las locales "priority" e "id". (No te preocupes si no entiendes esto aún ;) )
- La instancia del proceso main() continua su ejecución desde su último "frame": comprueba si se pulsa la tecla escape, y sino es así, escribe un 4 en consola y hace "frame".
- La instancia del proceso uno() continua su ejecución desde su último "frame", escribe un 3 en la consola y hace "frame"
- La instancia del proceso dos() continua su ejecución desde su último "frame", alcanza el final (End) del proceso y se destruye su instancia.
- Todas las instancias de proceso han ejecutado su código y alcanzado un frame, así que se renderiza el fotograma en pantalla.
- La instancia del proceso main() continua su ejecución desde su último "frame": comprueba si se pulsa la tecla escape, y sino es así, escribe un 4 en consola y hace "frame".
- La instancia del proceso uno() continua su ejecución desde su último "frame", alcanza el final (End) del proceso y se destruye su instancia.
- Todas las instancias de proceso han ejecutado su código y alcanzado un frame, así que se renderiza el fotograma en pantalla.
- La instancia del proceso main() continua su ejecución desde su último "frame": comprueba si se pulsa la tecla escape, y sino es así, escribe un 4 en consola y hace "frame".
- Todas las instancias de proceso han ejecutado su código y alcanzado un frame, así que se renderiza el fotograma en pantalla.
- ...
(y así hasta que se pulse la tecla ESC)

El frame indica que la instancia está lista para mostrarse por pantalla, y cuando todas las instancias han llegado a un frame o han sido destruidas, es cuando se renderiza y se muestra el fotograma por pantalla. A su vez, el frame también devuelve el hilo de ejecución al proceso padre que lo acaba de instanciar (por eso el resultado es 1 (uno),2 (dos),4 (main),3(uno),4(main),4(main),4(main),4(main),4(main),etc...)

No se si te he ayudado con esta explicación o te he confundido más :)

11
Mesa de Ayuda / Re:PROCESS/FUNCTION duda
« en: Octubre 15, 2017, 08:14:51 am »
Hola "Hola" xD
El proceso finaliza cuando llega al End, no hace falta utilizar signal para acabar con él.
Si no tiene un bucle, el código que esté dentro se ejecutará una sola vez por cada vez que lo instancies.

Ejemplos:
Si tenemos este código:
Código: [Seleccionar]
Process uno();
Begin
 graph=png_load("nave.png");
End

Se cargará el gráfico de la nave en este proceso e instantáneamente el proceso dejará de existir y no llegará a mostrar imagen alguna.

Si tenemos este otro código:
Código: [Seleccionar]
Process uno();
Begin
 graph=png_load("nave.png");
 frame;
End
Se cargará el gráfico de la nave, se mostrará el gráfico por pantalla durante un solo fotograma y finalizará el proceso.

Y si tenemos este otro:
Código: [Seleccionar]
Process uno();
Begin
 graph=png_load("nave.png");
 while(not key(_esc))
  frame;
 end
End
Se cargará el gráfico de la nave y, hasta que pulsemos la tecla ESC, se mostrará el gráfico en cada fotograma.

Espero haberte respondido y explicado un poco mejor cómo funciona.

12
Introduce Yourself! / Re:Hello from Spain! Hola desde España!
« en: Octubre 12, 2017, 07:08:18 am »
Hello Keidash! Welcome :)

One quick question: Why are you introducing yourself in english if you're spanish?
We have spanish forums here too (look below!) :)

13
Site / Re:Overhaulin' del Sitio
« en: Octubre 10, 2017, 02:58:29 pm »
Wordpress instalado y configurado, en un lugar temporal privado :)

gecko y JaViS, en breve recibiréis un e-mail para empezar a ponernos manos a la obra tan pronto os venga bien :)

14
Site / Re:Overhaulin' del Sitio
« en: Octubre 10, 2017, 02:36:57 pm »
Pues JaViS. Si tú, como encargado del contenido de la web, das el visto bueno, podríamos probar a desarrollar una 2.0 con Wordpress :)

15
Site / Re:Overhaulin' del Sitio
« en: Octubre 10, 2017, 02:21:23 pm »
Buenas Gecko :)
Me parece una gran idea darle un nuevo aire al diseño de la página web, pero debes tener en cuenta que el diseño debe estar pensado para ser utilizado en Drupal, que es el gestor actual de contenidos de la página web. Podríamos plantearnos una migración a otro CMS, pero prefiero mucho más Drupal que Wordpress, que consume muchos más recursos.

Páginas: [1] 2 3 ... 135