Menú

Mostrar Mensajes

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

Mostrar Mensajes Menú

Mensajes - Desiresportal

#31
Java / Re: Duda: ¿Como hago esto en Java?
29 Diciembre 2017, 14:18 PM
Muchas gracias. Lo probaré cuanto antes.
#32
Java / Re: Ayuda con mi proyecto
26 Diciembre 2017, 14:01 PM
No soy ningun experto tampoco. De hecho, aun estoy aprendiendo como programar en Java y ya estoy yo tambien preguntando por el foro algunas cosillas.

Por lo que veo en tu ejemplo, solo defines la clase "NivelUno". Pero despues haces uso de la clase "NivelUno", "NivelUno2" y "NivelDos1".

Entiendo que por usar un ejemplo y no tu codigo final se te haya pasado por alto.

Despues me pregunto: ¿Cuando se llama a "actionPerformed()"?

Si se llama cada vez que pulsas el boton lo que ocurre es que vuelves a iniciar una nueva clase "NivelUno" con los valores y el contador de pulsaciones a 0.

Mi sugerencia es que hagas que el constructor de "NivelUno" acepte un entero como argumento y lo apliques al contador. Al iniciar en "main()" lo haces con 0. Al pulsar sobre el boton, sumale 1 al contador y haz la nueva pantalla (o clase) pasando el contador.

Prueba algo así:

public class NivelUno {

private JButton boton1;

int a=0, b=0,c=0;

public NivelUno(int contador) {
this.b = contador;
}

public NivelUno() {

}

public actionPerformed(ActionEvent event) {
a++;
c = a+b;
b = c;

if (b <= 5) {
NivelUno nivelUno2 = new NivelUno(b); // Aqui paso el contador en su estado actual a la proxima pantalla.
niveluno2.setBounds(0,0,300,650);
niveluno2.setVisible(true);
niveluno2.setResizable(false);
niveluno2.setLocationRelativeTo(null);
this.setVisible(false);
}
else if (b > 5) {
NivelDos nivelDos = new NivelDos();
nivelDos.setBounds(0,0,300,650);
nivelDos.setVisible(true);
nivelDos.setResizable(false);
nivelDos.setLocationRelativeTo(null);
this.setVisible(false);
}

}

}

public class NivelDos {

}

public static void main() {
NivelUno nivelUno1 = new NivelUno(0);
niveluno1.setBounds(0,0,300,650);
niveluno1.setVisible(true);
niveluno1.setResizable(false);
niveluno1.setLocationRelativeTo(null);
}


Nota tambien que al haber sobrecargado el constructor de la clase "NivelUno" puedes sustituir la linea "NivelUno nivelUno1 = new NivelUno(0);" de "main()" por esta otra "NivelUno nivelUno1 = new NivelUno();".

Otra cosa: No entiendo porque haces las operaciones con "a", "b" y "c". Supongo que algo tendrán que ver con tu proyecto, por eso lo dejo como estaba, pero tal vez quieras poner un constructor extra como el siguiente a la clase para mantener los valores al cambiar de pantalla (o clase).
   
public NivelUno(int rA, int rB, int rC) {
this.a = rA;
this.b = rB;
this.c = rC;
}


Y solo tendrías que cambiar "NivelUno nivelUno2 = new NivelUno(b);" por "NivelUno nivelUno2 = new NivelUno(a, b, c);".

Espero que te sirva. Suerte.
#33
Java / Re: Duda: ¿Como hago esto en Java?
26 Diciembre 2017, 13:29 PM
No termino de entender muy bien los callback.

He intentado adaptar lo que encontré en internet a mi caso, pero no he llegado a nada util. Paso a explicar el uso que quiero darle y ya me direis.

La idea es desarrollar una libreria tal que así para no retocarla de proyecto en proyecto:

public class claseEscena {
private funcionAct;
private funcionDraw;

public claseEscena(funcionActRecibida, funcionDrawRecibida) {
this.funcionAct = funcionActRecibida;
this.funcionDraw = funcionDrawRecibida;
}

public void act() {
this.funcionAct();
}

public void draw() {
this.funcionDraw();
}
}

ArrayList<claseEscena> misEscenas = new ArrayList<claseEscena>();

public void gameLoop() {
while(1) {
for (int a=0; a<misEscenas.size(); a++) {
misEscenas.act();
}
for (int a=0; a<misEscenas.size(); a++) {
misEscenas.draw();
}
}
}


Y despues, para desarrollar el codigo de un proyecto concreto, algo mas o menos así:


public void miFuncionAct1() {
// Mi codigo de actuacion para la escena...
}

public void miFuncionDraw1() {
// Mi codigo de dibujado para la escena....
}

public void miFuncionAct2() {
// Mi codigo de actuacion para la escena...
}

public void miFuncionDraw2() {
// Mi codigo de dibujado para la escena....
}

misEscenas.add(new claseEscena(miFuncionAct1, miFuncionDraw1));
misEscenas.add(new claseEscena(miFuncionAct2, miFuncionDraw2));

gameLoop();


En C++ lodré hacer algo así, pero en Java estoy teniendo serias dificultades para simplificar la programacion final de cualquier proyecto.

¿Me podeis poner algun ejemplo de como lograrlo?

Evidentemente, el gameLoop lo he simplificado en el ejemplo porque la intencion del ejemplo es dejarlo lo mas limpio posible.

Gracias de antemano.
#34
Java / Duda: ¿Como hago esto en Java?
20 Diciembre 2017, 15:06 PM
Muy buenas.

Por la razón que sea he empezado a programar en Java y tengo una duda al respecto. En C++ podía hacer algo como lo siguiente para hacer una programación final mas adaptable:


Código (cpp) [Seleccionar]
// Codigo para usar como parte de una libreria

void (*funcionLibreria)(int value);

void asignarFuncionLibreria(void (*funcionAsignada)(int value)) {
funcionLibreria= funcionasignada;
}


// Codigo para desarrollar en un proyecto

void funcionDefinidaPorMi(int value) {
// Codigo de la funcion en cuestion.
}

// Algo de codigo despues...

funcionLibreria(5);



¿Como puedo hacer algo así en Java?

He buscado algo para Java, pero solo encuentro callbacks que me parecen mas difíciles de usar. Sino, lo único que encuentro es para javascript.

Quiero desarrollar una librería que ya sé que va a ser muy larga y rebuscar en el código Java para adaptarlo a cada proyecto me parece una locura.

Me sería de gran ayuda. Gracias de antemano.
#35
¿Cual es el codigo necesario para disponer de una funcion que lee varios argumentos? Tengo entendido que se puede llamar a funciones como "glutInitDisplayMode()" y que se pueden pasar varios argumentos separados por "|".

He buscado sobre el tema y he visto que en la definicion de la funcion el argumento es "unsigned int mode", pero no he encontrado nada mas. ¿Como hace la funcion para separar los argumentos que se le pasan? ¿Tiene algo que ver que los valores que recibe sean potencias de 2? (0,1,2,4,8,16,32,64,...)

No me urge, pero me gustaría entenderlo por si en un futuro me ayuda a reducir un codigo extenso.
#36
El problema es que no quiero tirar de codigo que ha escrito otro. Por ahora utilizo librerías que han programado otros, pero prefiero currarmelas yo. Ademas, asi puedo personalizar las funciones a mi manera para que se adapten a las necesidades del programa objetivo. Y como ya he dicho, me gusta saber lo que hay detras de esos programas que la mayoria descarga y utiliza sin preocupaciones.
#37
El tema es el siguiente: Me lie a hacer pruebas con un archivo PNG y ahora estoy casi a punto de escribir un programa para sacarles a los archivos PNG un array con el mapa de bits en él. Pero, ya que estoy, me he decidido a sacar los datos de mas tipos de archivos. El problema es que si el formato PNG ya era dificil, los demas formatos que tengo en mi lista son aún mas dificiles de encontrar.

¿Alguien me puede pasar enlaces a web que expliquen la estructura de los siguientes formatos?:
- TGA
- JPEG
- A (los archivos que utilizan los compiladores)
- LIB (tambien los archivos que utilizan los compiladores)
- MP3
- OGG
- MP4
- GIF
- DLL

Y ya puestos: ¿Algun enlace en el que se muestren ejemplos de como sacar los datos por medio de algun script?

He buscado en internet, y nada. He buscado en archivos de dichos formatos palabras clave que me ayudasen a buscar en internet, y nada. Estoy perdido en este tema. Sé que hay programas muy buenos que se pueden descargar y utilizar, pero me gusta entender lo que hay detras de estos programas y la mejor manera es hacerlos uno mismo.
#38
Entiendo y he llevado a la practica todo lo relacionado con las matrices de modelado y de proyeccion. Es mas, al hacer en mi motor de juegos las escenas y rotar un objeto, se me movian a su vez las lamparas. Eso fue porque rotaba el objeto con la matriz de proyeccion y no utilizaba la matriz de modelado.

Mi problema consiste en las matematicas que hay detras. Quiero conseguir que con "glRotatef()" pueda hacer girar un objeto sobre sus propios ejes. Por ejemplo: si ahora roto el objeto sobre su eje X 32º y despues roto sobre su eje Y 81º, al rotar sobre el eje Z la rotacion es erronea. No rota sobre SU eje Z, sino sobre el eje Z global. Ahí esta mi problema.

Miraré la informacion que me has pasado, pero estando todo en ingles creo que las pasaré canutas.

Gracias por la ayuda. Supongo que será una de las cosas mas complejas con las que me encontraré en la programacion de videojuegos.
#39
Ok. Al final ya lo conseguí. Pero justo al terminar me dí cuenta de un error. Las rotaciones no ocurren sobre los ejes del objeto, sino sobre los ejes del mundo de OpenGL (yo tambien suelo llamarlos "ejes globales". No sé si es correcto.).

Ahora que ya he terminado de entender el movimiento local tridimensional, ¿como hago para que el objeto rote sobre sus propios ejes? En juegos FPS es facil porque solo hay que rotar el eje Z y el eje X. Pero si quiero hacer uno de naves o coches la cosa se complica. Doy por sentado que la clave esta en "glRotatef(angulo, fuerzaX, fuerzaY, fuerzaZ)" y que hay que aplicar diferentes fuerzas dependiendo del eje a rotar.

PD: Por cierto, tuve problemas para aplicar el proceso. En el ejemplo no se menciona que el orden en que se aplican las rotaciones de OpenGL deben ser del reves que en los calculos para el movimiento local. Lo menciono por si alguien tiene el mismo problema y no encuentra la solucion de ninguna forma.

En resumen: Lo conseguí, pero ahora tengo problemas con las rotaciones locales. He buscado, pero no encuentro nada que me ayude. ¿Una ayudita?

Gracias de nuevo.
#40
En realidad ya estoy haciendo un motor de juegos con OpenGL y solamente trataría de adaptar las funciones de dibujado y gestion de graficos para usar DirectX en maquinas que no pueden utilizar OpenGL.

Tengo el motor bastante avanzado y no pienso dejarlo a medio camino.

Ademas, no quiero utilizar motores ya hechos. Me gusta tener que programarlo todo a mano y tener el control de lo que hace. Meditar, poner a prueba, equivocarme, meditar de nuevo, reparar, añadir errores a la lista de posibles errores,... Me gusta. Al final resulta divertido.

Gracias.