CAAD

Comunidad de Aventuras Conversacionales y Relatos Interactivos
Fecha actual 29 Jun 2017 13:36

Todos los horarios son UTC + 1 hora




Nuevo tema Responder al tema  [ 6 mensajes ] 
Autor Mensaje
NotaPublicado: 14 Ene 2015 18:51 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
Hola estaba haciendo algunas pruebas y preparando librerías y métodos para mi siguiente proyecto.

Tengo una clase en java, para reproducir vídeos que compilada en eclipse funciona ok. La he empaquetado en un jar y desde AGE la llamo. La ventana me la llega a abrir pero el vídeo no lo muestra.

Supongo que serán por las librerías de java que uso para reproducir el vídeo que son estas: Java Media Framework http://www.oracle.com/technetwork/java/javase/download-142937.html

Para incluirlas he tomado las que uso en eclipse y las he copiado dentro de la carpeta lib de AGE, son 5. Luego en los ficheros Aetheria.bat y puck.bat las he incluido de esta forma:

AgeCore.jar;lib/bsh-2.... .....-swing-4.2.jar;lib/customizer.jar;lib/jmf.jar;lib/mediaplayer.jar;lib/multiplayer.jar;lib/sound.jar eu.irreality.age......

Pero lo dicho, la ventana me la abre, sin embargo en vídeo no. ¿Hay otra forma de incluir las librerías?

_________________
Te quiero... lo siento Yoda sólo tenemos café.


Arriba
 Perfil  
 
NotaPublicado: 14 Ene 2015 20:18 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
:D

Me autorespondo, estaba cargando la URL del vídeo dentro de la clase compilada y eso me daba error. Tenía que pasarle la URL desde AGE y ya me carga el vídeo.

Código:
/*Método de análisis sintáctico de la entrada en una habitación*/
void parseCommand( Mobile aCreature , String verb , String args )
{

    if ( equals (verb, "mirar") ) {
        URL clases = world.getResource("video.jar");
        addClassPath( clases );
        recurso = world.getResource("vi.mpg");
        Ventana v = new Ventana();
        i = v.init (recurso);
        if ( i == 1 ) // Video cargado ok
        {
            mobile ("jugador").write ("OK\n");
        }
        else if ( i == -1) // Video cargado no ok
        {
            mobile ("jugador").write ("NO OK\n");
        }
    }
   
}


Imagen

Ahora tengo que averiguar porqué al cerrar el frame donde está el video en marcha, este se debe estar ejecutando de fondo ya que se escucha el audio.

_________________
Te quiero... lo siento Yoda sólo tenemos café.


Arriba
 Perfil  
 
NotaPublicado: 14 Ene 2015 21:45 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5265
Ubicación: Coruña
Genial ver AGE reproduciendo vídeos :)

Sobre lo que dices de que se siga reproduciendo, no conozco la librería, pero imagino que tendrás que ponerle a tu clase Ventana que al cerrarse haga algún tipo de stop() o similar en el vídeo.

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 18 Ene 2015 10:24 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
Siguiendo con este tema, he seguido haciendo pruebas. Como se ve en la imagen que he colgado más arriba, el vídeo lo ha cargado en un Frame nuevo, por lo que la ventana principal de AGE pierde el foco.
Quería insertar el vídeo dentro del Frame propio de AGE, pero para ello necesito una referencia a un JFrame o JPanel propio de AGE.

He rebuscado por el log de IRC y una vez Al-Khwarizmi me comentó que el cliente tenía un método "cliente.getFrame ( "nombreFrame" ) que ya me da en sí­ un JPanel"
Luego tenía que añadir mi JPanel;

panelFrame = cliente.getFrame("nombreFrame); -> En "nombreFrame", ¿un nombre que yo quiera?
panelFrame.add(miJPanel);

Pero no llego a cargar nada.

Lo que tengo más o menos:

En el world;

Código:
JPanel elFrame () {

    j = world.getPlayer();
   
    InputOutputClient client = j.getIO();
    if ( client instanceof ColoredSwingClient ) {
        frame = client.getFrame("El frame");
        j.write ("Nombre del frame tomado.\n");
    }
    return frame;
}


Y en una Room con el comando mirar:

Código:
if ( equals (verb, "mirar") ) {
        URL clases = world.getResource("panelvideo.jar");
        addClassPath( clases );
        recurso = world.getResource("vi.mpg");
        PanelDeVideo panel = new PanelDeVideo ( world.elFrame() );
        i = panel.init ( recurso );
        if ( i == 1 ) // Video cargado ok
        {
            mobile ("jugador").write ("OK\n");
        }
        else if ( i == -1) // Video cargado no ok
        {
            mobile ("jugador").write ("NO OK\n");
        }
    }


A la clase PanelDeVideo que he creado le paso un panel donde se inserta en la misma clase.

Código:
public PanelDeVideo (JPanel elFrame) {
       this.elFrame = elFrame; // De tipo JPanel
       this.setLayout(new BorderLayout());
    }
   
    public int init(URL ruta) {
                       
        try {
            player = Manager.createRealizedPlayer(new MediaLocator(ruta));
            video = player.getVisualComponent();
            video.setSize(800,500);
            video.setVisible(true);
            if(video != null)
                this.add("Center",video);
   
           
            elFrame.add(this); //  -------->>>> AQUÍ SE AÑADE AL PANEL QUE SE CARGA
            player.start();
            this.updateUI();
            return 1;
        } catch (Exception ex) {
           System.out.println("Error al cargar el video.");
            return -1;
        }
}


¿Estoy tomando bien la referencia del JPanel de AGE?

_________________
Te quiero... lo siento Yoda sólo tenemos café.


Arriba
 Perfil  
 
NotaPublicado: 18 Ene 2015 11:18 
Desconectado
Samudio
Samudio
Avatar de Usuario

Registrado: 09 Mar 2004 16:16
Mensajes: 5265
Ubicación: Coruña
No, el problema es que al método getFrame no le puedes pasar una cadena cualquiera, le tienes que pasar el nombre que identifica ese frame.

O sea, si has creado el frame con algo como:

Código:
cliente.addFrame ( "izquierdo" , "west, height 25%!" );


El nombre que le tendrías que pasar sería "izquierdo":

Código:
panelFrame = cliente.getFrame("izquierdo");


Si cuando creaste el frame lo hiciste con alguno de los formatos "antiguos" del método que no le dan un nombre sino sólo lo crean por posición, puedes obtenerlo por posición también:

Código:
cliente.addFrame( ImageConstants.TOP , 400 );
...
panelFrame = cliente.getFrame( ImageConstants.TOP );

_________________
Actúa siempre de tal modo que las decisiones de tu voluntad pudiesen servir como preceptos de una legislación universal (E. Kant)


Arriba
 Perfil  
 
NotaPublicado: 18 Ene 2015 12:05 
Desconectado
Betatester
Betatester
Avatar de Usuario

Registrado: 09 Feb 2012 20:33
Mensajes: 855
Al-Khwarizmi escribió:
No, el problema es que al método getFrame no le puedes pasar una cadena cualquiera, le tienes que pasar el nombre que identifica ese frame.

O sea, si has creado el frame con algo como:

Código:
cliente.addFrame ( "izquierdo" , "west, height 25%!" );


El nombre que le tendrías que pasar sería "izquierdo":

Código:
panelFrame = cliente.getFrame("izquierdo");


Si cuando creaste el frame lo hiciste con alguno de los formatos "antiguos" del método que no le dan un nombre sino sólo lo crean por posición, puedes obtenerlo por posición también:

Código:
cliente.addFrame( ImageConstants.TOP , 400 );
...
panelFrame = cliente.getFrame( ImageConstants.TOP );


Vaya, se me escapó ese detalle... ya está

¡Gracias!

Imagen

_________________
Te quiero... lo siento Yoda sólo tenemos café.


Arriba
 Perfil  
 
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 6 mensajes ] 

Todos los horarios son UTC + 1 hora


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
Desarrollado por phpBB® Forum Software © phpBB Group
Traducción al español por Huan Manwë para phpBB-Es.COM