Hola chicos, soy nuevo en el foro y he entrado con mucha ilusion. Estoy empezando a programar juegos al ver que PALib te soluciona bastante el papel.
Bueno, voy con la duda... estoy utilizando el emulador no$gba 2.6, y estoy teniendo problemas con los numeros pseudoaleatorios.
He probado con todo, PA_InitRand(); ,PA_SRand()% x, srand(time(NULL)) de la time.h para crear la semilla, y num = (PA_Rand() % 8) o num=rand() % 8; , para generar el valor aleatorio. Lo que veo es que la semilla no refresca nunca con el reloj y siempre me salen los mismos valores.¿Puedo hacer algo respecto a esto?
¿Se pueden utilizar todas las librerias incorporadas por devKitARM para los juegos/aplicaciones de NDS, (stdio.h, time.h, fastmath.h...) o hay restricciones?
Por cierto, con la libreria palib venia otro emulador (Ideas v1.0.3.1) que parece que puedes debugar el codigo ?¿¿¿? sin embargo hago correr mi programa y siempre aparecen 40-60 fps y no me aparece ni la presentacion del juego. ¿Sabeis a que se puede deber?
Vale, para empezar ya esta bien, gracias de antemano.
No pues
yo de estas cosas no se mucho XD lamento no poder ayudarte
ja...
no sabria decirte pero investigare
Gracias por responder, pues
Gracias por responder,
pues la verdad es que no. Siempre que ejecuto la aplicación obtengo el mismo numero. Aunque utilice PA_RandMax(x).
Saludos.
Visita mi blog. Zenit + 5 will win
por que no
pruevas a canviar de emulador, prueva este, a mi siempre me ha funcionado a la perfeccion:
Wins DS Pro DSi
que va,
Pues no, tampoco. Tal vez tenga malamente la configuración de las librerias o del mismo emulador.
El código es este supongo que esta bien, pero siempre al ejecutar me aparece 65.
#include <PA9.h>
int main(){
PA_Init();
PA_InitVBL();
PA_InitText(1,0);
PA_InitRand();
u32 n = PA_RandMinMax(55,86);
PA_OutputText ( 1 , 0 , 1 , "Esto es un aleatorio : %d" , n) ;
while(true){
PA_WaitForVBL();
}
}
¿Los únicos emuladores son no$gba y ideas? ¿existe alguno más para probar?
Gracias por las respuestas.
Visita mi blog. Zenit + 5 will win
En palib
existe una funcion (no me acuerdo, pues no la uso, ahora te la busco) en que bastaba con iniciarla al principio. Garantizaba que el numero que coges es siempre diferente, porque se basa en la fecha-hora en la que se "recoge" el numero. Como supondras, es un poco dificil jugar a un juego siempre a la misma hora exacta.
Ahora te la busco y edito, Salu2
EDITO: Pues es la funcion que tienes puesta, o sea, el PA_InitRand(); Ahora ya veo cual es el problema.
Probablemente (no estoy seguro), los emuladores configuren la fecha y hora de este como los despertadores, o sea, el 1 de enero a las 00:00. Es por ello que te sale siempre el mismo numero, porque la funcion se inicia siempre a la misma fecha-hora (la virtual del emulador). Te recomiendo que pruebes tu homebrew en tu DS para comprobar si es eso lo que pasa.
Salu2
Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.
Gracias por la respuesta, me
Gracias por la respuesta, me parece que podria ser la correcta. El problema es que no tengo la DS, pero la compraré en breve.
Visita mi blog. Zenit + 5 will win
En teoria
la fecha-hora del emulador se puede ajustar, prueba a cambiar la hora antes de iniciar tu homebrew, y vas cambiando las horas para ver si cambian los numeros.
Salu2
Para recibir ayuda por parte de otros usuarios más rápidamente, recomendamos que pongas títulos descriptivos y no utilices abreviaturas (estilo MSN) en tus post de los foros. Recuerda que accediendo al Manual del perfecto forero y las Normas de la Comunidad aprenderás trucos para resolver tus dudas antes.
Se puede seguir usando los
Se puede seguir usando los aleatorios sin necesidad de usar PA_InitRand ^^.
En cuanto al codigo, prueba a usar esto:
Lo he probado en el ideas y va perfecto ^^. No deberias tener problemas.
EDITO:
No, no funciona. Muestra el mismo numero XDDD.
El fallo esta en que los emuladores empiezan en la hora 00:00:00. Podeis comprobarlo usando las funciones de PA_RTC. Teniendo en cuenta que los numeros aleatorios usan la hora para generarlos. Pues...
Mi creacciónes particulares:
http://www.scenebeta.com/noticia/la-serpiente
http://www.scenebeta.com/node/22535
Será problema de PAlib. Yo
Será problema de PAlib. Yo con srand(time(NULL)); y rand(); siempre tengo secuencias distintas en emuladores y DS. Igual es que las versiones de los emuladores que tienes son viejas y no les funciona el RTC...
gracias por responder
me has roto los esquemas ahora, probaré de actualizar palib.
No se
No se, debo tener un problema.
He actualizado a la 080823 de PAlib, pero me daba muchos fallos. He intentado bajar la release 21, la cual dice que es necesaria pero el link no funciona.
He probado de instalar de nuevo devkitpro y palib (la anterior 090801) pero obtengo los mismos resultados. En fin. Probaré con la siguiente versión cuando esté del todo disponible. Por cierto, la nueva actualización parece que trae nuevas y mejores funciones.
[exterminator] ¿como puedo cambiar la hora del emulador (no$gba)? He intentado cambiar la hora del sistema (Windows XP Professional SP2) pero me ocurre lo mismo.
Visita mi blog. Zenit + 5 will win
¿Pero usas las funciones de
¿Pero usas las funciones de PAlib o rand()? No tienen nada que ver, son independientes.
a lo mejor
el problema no es PAlib sino es DevkitPro, prueba a mirar esté enlace:
http://www.megaupload.com/?d=INM58VPY
Esta es la ultima y mejorada(la que uso yo) versión de DevkitPro.
Gracias, adios
I like:
si, ya lo pensé
pero yo tambien utilizo la 1.5.0 y sigo teniendo el problema. Hoy lo he vuelto a instalar todo y igual. Da igual probaré con una DS cuando la compre.
Gracias.
Visita mi blog. Zenit + 5 will win
Aqui tienes todo lo
Aqui tienes todo lo necesario para instalar la version estable de palib, te lo dejo por si aca:
http://www.megaupload.com/?d=EK8HHJHS
De todas formas el problema no es de palib, prueba esto en el emulador:
#include <PA9.h>
int main(){
PA_Init();
PA_InitVBL();
PA_InitText(1,0);
while(1){
PA_OutputText ( 1 , 5 , 5 , "%d" , PA_RTC.Hour()) ;
PA_OutputText ( 1 , 7 , 5 , "%d" , PA_RTC.Minutes()) ;
PA_OutputText ( 1 , 9 , 5 , "%d" , PA_RTC.Seconds()) ;
PA_WaitForVBL();
}
}
Como veras, el reloj funciona correctamente. Solo que comienza siempre a las 00:00:00. Creo que no hay solucion alguna para eso, prueba a descargarte la ultima version del ideas/Nosgba aunque no creo...
Mi creacciónes particulares:
http://www.scenebeta.com/noticia/la-serpiente
http://www.scenebeta.com/node/22535
Si lo que querias era hacer un relog
haverlo dicho, mira este haber si este codigo te funciona:
// This example shows how to use 8 bit backgrounds,
// on which you can draw with the stylus or show text in different sizes, colors, or rotations
// Includes
#include <PA9.h> // Include for PA_Lib
#include <stdio.h> // standard lib for texts...
char text[200];
// Function: main()
int main(int argc, char ** argv)
{
PA_Init(); // Initializes PA_Lib
PA_InitVBL(); // Initializes a standard VBL
// Let's put some colors... in the background palettes
PA_SetBgPalCol(0, 1, PA_RGB(31, 31, 31));
PA_Init8bitBg(0, 3);
// Infinite loop to keep the program running
while (1)
{
sprintf(text, // string to use
"%02d/%02d/%02d", PA_RTC.Day, PA_RTC.Month, PA_RTC.Year); // String to transform
PA_SmartText(0, 10, 20, 255, 40, text, 1, 3, 0, 100); // Display the text transformed :)
// And the time...
sprintf(text, "%02d:%02d %02d seconds", PA_RTC.Hour, PA_RTC.Minutes, PA_RTC.Seconds);
PA_SmartText(0, 10, 40, 255, 60, text, 1, 3, 0, 100); // Display the text transformed :)
PA_WaitForVBL();
}
return 0;
no se por que, si pongo los comenterios en castellano, luego al compilar me sale Error 2. Si te funciona pos ya está, sino avisame por un comentario aqui o por MP, me da igual (MP=MensagePrivado)
Aqui te dejo un egemplo sobre como deve ser al compilarlo:
http://www.megaupload.com/?d=I33WY16Z
Gracias, adios.
I like:
ambos relojes
me funcionan y van con el reloj del sistema no comienzan de cero. He probado con este código pero tampoco, siempre me salen las mismas secuencias aunque los segundos al inicio sean diferentes.
#include <PA9.h>
#include <time.h>
#include <stdlib.h>
int main(){
PA_Init();
PA_InitVBL();
PA_InitText(1,0);
srand(time(NULL));
int n= rand()%100;
while(1){
if(Pad.Newpress.X)
{
int n= rand()%100;
PA_OutputText ( 1 , 0 , 1 , "Esto es un aleatorio : ") ;
PA_OutputText ( 1 , 0 , 1 , "Esto es un aleatorio : %d" , n) ;
PA_OutputText ( 1 , 0 , 2 , "Segundos : %d" , PA_RTC.Seconds) ;
}
PA_WaitForVBL();
}
}
Al final creo que lo dejaré estar por que si no no adelanto en mi programa.
Por cierto, ¿como lo haceis vosotros para enseñar vuestras demos a la comunidad? ¿que lugar está destinado a este fin? ¿Cómo inserto la demo en el mensaje (algo así como adjuntar)?
Gracias a todos.
Visita mi blog. Zenit + 5 will win
para colgar homebrew
Si quieres colgar un homebrew sigue estas instrucciones:
1:) Descargate esto y asi podras colgarlo en Meagaupload
2:) Espera que se carge y ves u copia el URL que te sale
3:) Ves a crear contenido y a crear temas de foro
4:) Aora escoge el foro "aportes de usuario" y crera un acceso directo a donde colgaste tu homebrew
5:) Luego es solo esperar que alguien de la Staff lo vea
I like:
jeje
ya me querias meter un virus...
No hace falta descargarse
No hace falta descargarse ningun programa XD.
Simplemente te vas a una hosteador de archivos online. Uno de lo mas conocidos y populares es megaupload. Hazte una cuenta gratuita ahi y sube el nds. Al final te saldra un link de descarga, posteas el link y listo.
Si quieres que aparezca en la portada, tendras que postearlo en su respectivo foro y con buena presentacion para que lo cojan.
Mi creacciónes particulares:
http://www.scenebeta.com/noticia/la-serpiente
http://www.scenebeta.com/node/22535
gracias
lo probaré. pero primero quiero hacer las colisiones en mi juego de naves
http://www.fotoranking.es/show.php?img=65538_instantanea.JPG.html
Saludos
Visita mi blog. Zenit + 5 will win
El fallo esta en que no has
El fallo esta en que no has cerrado el main, no has puesto el corchete } vamos.
Compilado y probado en el ideas me sale esto:
http://img230.imageshack.us/img230/5518/dibujomj.png
O sease, la fecha y hora de hoy. Ahora si que sale, curioso. Pero entonces porque siempre sale el mismo numero?
EDITO:
Espera que acabo de leer tu mensaje, no no queria hacer un reloj XD. Intentaba demostrar porque siempre sale el mismo numero aleatorio con el emulador.
Mi creacciónes particulares:
http://www.scenebeta.com/noticia/la-serpiente
http://www.scenebeta.com/node/22535