Foro Oficial de Java

xtrapeque

Lanero Regular
29 Ago 2008
4
muchisimas gracias
 

Yeison

Lanero Líder
Lanero VIP
1 Feb 2004
11,273
Queridos Señores...me gustaria saber como demonios van hacer para que Java reconosca las Librerias Dinamicas del Call Of Duty, detecte el numero de personas que haran War...porque esa seria la gracia del juego, que reconosca las personas que hara War y las Cargue y las deje conectadas y lista solo para logearse y jugar....bueno...si alquien sabe como hacer eso....nojoda me le quito el sombrero y lo respeto...porque una cosa es hacer las aplicaciones Con datagramas y socket que hacian en la universidad ah hacer que Java y La JVM trabajen de forma nativa con el Juego...recuerden que java solo trabaja con las Api de JDK y o con las de Windows (WinApi)...

java tambien trabaja con las librerias nativas de windows(DLL), asi que por eso no hay problema...
 

Jesus_ADS

Lanero Regular
12 May 2006
44
Problema con semi-animacion

Buenas laneros mi pregunta es la siguiente...

Estoy tratando de hacer una pequeña animación de una imagen, tengo varias imágenes que al cambiarlas dan la sensación de una animación... la cosa es que a la vez que voy cambiando la imagen necesito irlo moviendo también... lo que tengo es esto:

PHP:
public void actionPerformed(ActionEvent e) {
        
        if ((i++ % 2) == 0) {
            jLabel1.setIcon(new ImageIcon(getClass().getResource("imagen1.png")));
        } else {
            jLabel1.setIcon(new ImageIcon(getClass().getResource("imagen2.png")));
        }
               
        jLabel1.setLocation(x++, y);
                                 
}

lo coloque en el actionPerformed para que lo haga según un timer dado, ese no es el problema, la cosa es que si coloco la siguiente parte sola

PHP:
if ((i++ % 2) == 0) {
      jLabel1.setIcon(new ImageIcon(getClass().getResource("imagen1.png")));
} else {
      jLabel1.setIcon(new ImageIcon(getClass().getResource("imagen2.png")));
}

me cambia fino la imagen, y si coloco la otra parte sola

PHP:
jLabel1.setLocation(x++, y);

lo mueve fino por toda la pantalla.

Mi Problema esta en que cuando coloco las dos partes juntas como esta en el primer código, no lo mueve, solo cambia la imagen...

No entiendo que pasa, por que por separado funciona y juntos no??? :(:(

De Verdad Agradezco su ayuda... Saludos =)

Alguna Idea??? :(:(:(:(
 

sairus black

Lanero Reconocido
19 Ene 2008
1,848
Alguna Idea??? :(:(:(:(

Volviendo a lo del thread..eso es un proceeso que s eejecuta en paralelo a la aplicacion matriz....el asunto de usar un thread es poder crear y controlar un ciclo infinito que se use para intercambiar las imagenes a aparte de usar el ando sleep para controlar la velocidad.

la verdad con google encontras muchos ejemplos sobre animaciones de este tipo...incluso juegos echos con es filosofia...bueno suerte.
 

Jesus_ADS

Lanero Regular
12 May 2006
44
Volviendo a lo del thread..eso es un proceeso que s eejecuta en paralelo a la aplicacion matriz....el asunto de usar un thread es poder crear y controlar un ciclo infinito que se use para intercambiar las imagenes a aparte de usar el ando sleep para controlar la velocidad.

la verdad con google encontras muchos ejemplos sobre animaciones de este tipo...incluso juegos echos con es filosofia...bueno suerte.

Buenas amigo, gracias por tu respuesta, pero creo que no entendiste bien mi problema... Mi problema no esta ni en cambiar la imagen ni en moverlos... Ambas cosas las hago perfectamente (por separado) con el código que les coloque al principio. Mi problema esta en que juntos no me funciona, osea, no se mueve el muñeco mientras cambia la imagen, solo cambia la imagen cuando los coloco juntos... Mi pregunta era si alguien sabia por que o sabia una mejor forma de hacerlo, porque obviamente la mía no esta funcionando... :(:(


Probaste a invertir el orden : digo, primero mover y luego hacer el cambio de imagen?

Si, y nada, el mismo resultado, solo cambia la imagen, no se mueve :(:(:(

Gracias :(
 

Jesus_ADS

Lanero Regular
12 May 2006
44
SOLUCIONADO - Movimiento de Imagen

bueno primero que todo para hacer una animación lo mas recomendable es hacer un thread..pero sino puedes apelar a esto:

el problema con esto es que toca pincher el menú para cambiar de cuadro...además de que es una falsedad...te sugiero bro que uses un thread es lo mejor.

Listo, ya lo logre, guiandome con lo que me colocaste lo adapte a lo que necesitaba =)

PHP:
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class anim extends Canvas implements ActionListener {
 
    private JFrame f = new JFrame("Prueba Animacion");
    private Image img[] = new Image[2];
    private int ima = 0, x = 0, y = 100, i=0;
    private Timer timer = new Timer(10, this);  
    
    public static void main(String args[]) {        
        new anim();      
    }
 
    public void actionPerformed(ActionEvent e) {
        inc();
    }
  
    public anim() { 
        if(i == 0){
            timer.start();
            i++;
        }
        
        img[0] = Toolkit.getDefaultToolkit().getImage("img1.png");
        img[1] = Toolkit.getDefaultToolkit().getImage("img2.png");
                    
        this.setBounds(0, 0, 800, 500);
        this.setBackground(Color.white);
        f.add(this);
  
  
        f.addWindowListener(new WindowAdapter(){
            public void windowClosing(WindowEvent ew){
                System.exit(0);
            }
        });
        
        f.setLayout(null);
        f.setBounds(200, 200, 800, 500);        
        f.setVisible(true);
    }
 
    public void inc()  {
        if(ima < 1)      
            ima++;    
        else
            ima = 0;

        x++;         
        
        repaint(); 
    }

    public void paint(Graphics g) {
        g.drawImage(img[ima], x, y, this);
    }   
}

Le quite el menu que no hacia nada e hice que la repeticion del cambio de coordenada me lo diera el actionPerformed... :-p


Ahora, hay alguna forma de poder extender de JFrame y de Canvas para no tener que hacer todo el formulario a pie? trabajo con netbeans y de verdad me fastidia tener que estar haciendo los formularios a mano teniendo ya una herramienta que me lo permite...

Si tienen alguna idea me avisan, Gracias, Saludos...
 

sairus black

Lanero Reconocido
19 Ene 2008
1,848
Listo, ya lo logre, guiandome con lo que me colocaste lo adapte a lo que necesitaba =)

Ahora, hay alguna forma de poder extender de JFrame y de Canvas para no tener que hacer todo el formulario a pie? trabajo con netbeans y de verdad me fastidia tener que estar haciendo los formularios a mano teniendo ya una herramienta que me lo permite...
Si tienen alguna idea me avisan, Gracias, Saludos...

Como asi no entendi...si loq ue quieres es que la animacion se muestre en solo un espacio dela ventana basta con reducirle el bounds...pero si lo que quieres es que podas hacer el formulario con netbeasn y aplicar la filisofia anterior a ello...pos no estoy muy seguro...seguro que ha de poderse pero ni idea como.......la verdad en casos que requieren un alto control de los componentes
es mejor no apelar a la herrameintas guiadas...pero en fin...........

_________________________________________-______________________________________________________________________________________________

Ha se me olvido decir algo..."BUENA TRAMPA LO DEL TIMER PARA SUPLIR EL MANDO SLEEP", lo malo de esto es que al implementar actionlistener y autollamerla con el timer el sistema se hace replicable y con cada ciclo consume mas recursos...pero en fin...funciona que es lo importante almenos por ahora.
 

Jesus_ADS

Lanero Regular
12 May 2006
44
Mandar a repaint desde otra clase

Como están muchachos, sigo yo con lo de la animación. Mi pregunta ahora es esta.

Estoy haciendo en una clase mi frame en donde voy a mostrar todo y en otra clase "mover" quiero hacer lo de:

PHP:
    public void inc()  {
        if(ima < 1)      
            ima++;    
        else
            ima = 0;

        x++;         
        
        repaint(); 
    }

    public void paint(Graphics g) {
        g.drawImage(img[ima], x, y, this);
    }

ahora la cosa es que en el

PHP:
g.drawImage(img[ima], x, y, this);

cuando llama al this, hacia referencia al JFrame, ahora que esta en otra clase no hace nada... que debo colocar por el this para que me referencie al JFrame de la otra clase para que me permita hacer el repaint???

Gracias
 

sairus black

Lanero Reconocido
19 Ene 2008
1,848
Como están muchachos, sigo yo con lo de la animación. Mi pregunta ahora es esta.

PHP:
g.drawImage(img[ima], x, y, this);

cuando llama al this, hacia referencia al JFrame, ahora que esta en otra clase no hace nada... que debo colocar por el this para que me referencie al JFrame de la otra clase para que me permita hacer el repaint???

Gracias

Te recomiendo que usas la clase Graphics2D, eso como dije desde el principio lo mejor es que la clase de la animacion sea un thread es decir:

class Anim extends Thread
{
/*********************/
}

Con Graphics2D podes reemplazar el this por null sin problemas.
 

Don_Mario

Lanero Regular
10 Jul 2008
18
Buenas Buenas.

Señores soy muy novato en Java me gustaria saber par cosas por ejemplo:
los archivos import (supongo que son clases) donde los consigo, y que clases básicas debo buscar e implementar para los programas que haga en adelante?
en caso q me equivoque y los archivos import no sean clases quiero saber que son
se necesita una clase para dibujar una especie de tablero de ajedrez o como se hace?
Agradezco la atencion y colaboracion
 

sairus black

Lanero Reconocido
19 Ene 2008
1,848
Buenas Buenas.

Señores soy muy novato en Java me gustaria saber par cosas por ejemplo:......
Agradezco la atencion y colaboracion

Veamos si mi teoria no esta muy oxidada....:

1. la instruccion import sirve para incluir paquetes, que son colecciones de clases ya sean abstractas o funcionales.

2. antes de importar un paquete se debe saber para que sirve, esa documentacion se alla en san google, basta con escribir el nombra del paquete por ejemplo javax.swing y tendras una descripcion de todas las clases que contiene y para que sirven.

3. casi todos los paquetes vienen incluidos en el JDK, sin embargo algunos como los del API 3D deben ser instalados por aparte del JDK y generalmente se importan con sentecias como: import com.sun.**** donde *** es el API extra que se importa.

5. para hacer graficos en 2D como un tablero de ajedres basta con la clase java.awt, que se importa como: import java.awt.*; el * le indica al interprete que debe incluir todas las clases del paquete awt, para asi no tener que hacer las tablas de import....

Bueno eso es todo lo que recuerdo...suerte bro.
 

xjuanch0x

Lanero Reconocido
25 Sep 2004
690
Bueno la palabra Import esa una palabra reservada de Java y te permite importar paquetes de clases, por ejemplo :

Import javax.swing.*;

ahora para dibujar solo debes de utilizar en metodo paint y dentro de este hacer unos ciclos para que dibujes los paneles negros y otro para los blancos:


Basicamente los juegos de tablero consisten en mantener una estructura de datos "Matriz" de NxN donde N es la cantidad de casillas.
static final int N = 8;
int[][] tablero = new int[N][N];
Tambien tenes que mantener diferentes constantes que distingan las fichas, por ejemplo:
static final int FICHA_NEGRA = 0;
static final int FICHA_BLANCA = 1;
Y una variable que mantenga la ficha que esta siendo movida actualmente:
int fichaActual;
¿Como dibujas el escenario?, bien.. tenes que redefinir el metodo:
public void paint(Graphics g)
La clase Graphics tiene diferentes metodos para dibujar y setear colores que necesitas.
Por ejemplo para dibujar el tablero:
public void paint(Graphics g){
g.setColor(Color.BLACK);
for(int i = 0 ; i<N; i++){
for(int j = 0; j<N;j++){
g.drawLine(j *ANCHO_CASILLA ,i *ANCHO_CASILLA, ANCHO_CASILLA,ANCHO_CASILLA);
}
}
//seguis dibujando el resto del escenario del juego.
}



Luego debes Jugar con los eventos del raton y listo...lo demas es tu imaginacion
 

Yeison

Lanero Líder
Lanero VIP
1 Feb 2004
11,273
y si necesitas informacion adicional para ese juego de datos que no basta una matrix normal, creas un objeto donde guardes toda la info que necesitas, depronto estado, color, valor, etc.


PD: Ya toy en Cartagena!
 

Jesus_ADS

Lanero Regular
12 May 2006
44
Te recomiendo que usas la clase Graphics2D, eso como dije desde el principio lo mejor es que la clase de la animacion sea un thread es decir:

class Anim extends Thread
{
/*********************/
}

Con Graphics2D podes reemplazar el this por null sin problemas.

Listo :-p no me dí mala vida, y en vez de estar cambiando la imagen a mano en el propio java cree un gif animado con esas imágenes y eso es lo que muevo en la pantalla... xD

Gracias por sus comentarios...
Saludos :cool:

PD: No es exactamente como lo quería hacer, pero bue, funciona... si alguien lo logra hacer de la otra forma (a mano moviendo las imágenes) avise ;)
 

newander13

Lanero Reconocido
1 Ago 2008
117
hola laneros les quiero hacer una pregunta, la primera vez que instale java en mi pc lo hice bien y el jcreator que instale funcionaba todo a la perfeccion pero cuando formatee hace poco mi pc volvi a instalar el jcreator y despues el java, pero al momento de compilar me pide el jdk.............¿QUE ES EL JDK?.....ya se que sirve para que tus programas se compilen y algo mas pero l primera vez que instale no me pidio nada asi, HAY ALGON EN QUE HE FALLADO??????? AYUDENME POR FAVORR
 

htobon

Lanero Reconocido
16 Oct 2007
149
JDK = Java Development Kit

EL JDK es la librería que permite a nosotros los programadores generar código para ser utilizado en los ambientes de programación como el JCREATOR.

Lo que tienes que hacer es metermete en las opciones del JCreator y cambiarle su JDK por el que tienes instalado en tu equipo.
Normalmente puede estar en: C:/Archivos de Programa/JAVA
ó en: C:/JAVA
 

newander13

Lanero Reconocido
1 Ago 2008
117
JDK = Java Development Kit

EL JDK es la librería que permite a nosotros los programadores generar código para ser utilizado en los ambientes de programación como el JCREATOR.

Lo que tienes que hacer es metermete en las opciones del JCreator y cambiarle su JDK por el que tienes instalado en tu equipo.
Normalmente puede estar en: C:/Archivos de Programa/JAVA
ó en: C:/JAVA

ok amigo lo que dices es cierto...PEROOOO....cuando hago correr el jcreator pongo setup jdk ya aparece el jdk y su documentacion(la carpeta docs que se encuentra en la carpeta de jdk)pero al final dice que hay un error en el path....PODRIAS RESPONDERME POR FAVOR
 

sairus black

Lanero Reconocido
19 Ene 2008
1,848
ok amigo lo que dices es cierto...PEROOOO....cuando hago correr el jcreator pongo setup jdk ya aparece el jdk y su documentacion(la carpeta docs que se encuentra en la carpeta de jdk)pero al final dice que hay un error en el path....PODRIAS RESPONDERME POR FAVOR

a mi me pasaba algo similar con el JE...y hasta dond puedo imaginarme lo que debes ahcer es direccionar la ruta del jcreator a la subcarpeta bin, donde esta el compilador y el interprete....suerte

[QUOTE = Jesus_ADS]
Listo
smiley%20-%20smiley.gif
no me dí mala vida, y en vez de estar cambiando la imagen a mano en el propio java cree un gif animado con esas imágenes y eso es lo que muevo en la pantalla... xD

Gracias por sus comentarios...
Saludos
smiley%20-%20cool.gif


PD: No es exactamente como lo quería hacer, pero bue, funciona... si alguien lo logra hacer de la otra forma (a mano moviendo las imágenes) avise
smiley%20-%20wink.gif

[/QUOTE]

Eso si es una soberana trampa pero en fin que se le va ha hacer.....se que he dicho esto muchas veces pero aun cabe repetirlo...para hacer animaciones en java se usa preferiblemente los threads...si embargo tambien se puede apelar a los applets...aqui un ejemplo cortesia de san google:

PHP:
import java.awt.*;
import java.applet.Applet;

public class Animacion extends Applet implements Runnable {
    Image imagenes[];
    MediaTracker tracker;
    int indice = 0;
    Thread animacion;

    int maxAncho,maxAlto;
    Image offScrImage; // Componente off-screen para doble buffering
    Graphics offScrGC;

    // Nos indicará si ya se puede pintar
    boolean cargado = false;

    // Inicializamos el applet, establecemos su tamaño y
    // cargamos las imágenes
    public void init() {
        // Establecemos el supervisor de imágenes
        tracker = new MediaTracker( this );
        // Fijamos el tamaño del applet
        maxAncho = 100;
        maxAlto = 100;
        imagenes = new Image[36];

        // Establecemos el doble buffer y dimensionamos el applet
        try {
            offScrImage = createImage( maxAncho,maxAlto );
            offScrGC = offScrImage.getGraphics();
            offScrGC.setColor( Color.lightGray );
            offScrGC.fillRect( 0,0,maxAncho,maxAlto );
            resize( maxAncho,maxAlto );
        } catch( Exception e ) {
            e.printStackTrace();
            }

        // Cargamos las imágenes en un array
        for( int i=0; i < 36; i++ )
            {
            String fichero = 
                new String( "Tierra"+String.valueOf(i+1)+".gif" );
            imagenes[i] = getImage( getDocumentBase(),fichero );
            // Registramos las imágenes con el tracker
            tracker.addImage( imagenes[i],i );
            }

        try {
            // Utilizamos el tracker para comprobar que todas las
            // imágenes están cargadas
            tracker.waitForAll();
        } catch( InterruptedException e ) {
            ;
            }
        cargado = true;
        }

    // Pintamos el fotograma que corresponda
    public void paint( Graphics g ) {
        if( cargado )
            g.drawImage( offScrImage,0,0,this );
        }

    // Arrancamos y establecemos la primera imagen
    public void start() {
        if( tracker.checkID( indice ) )
            offScrGC.drawImage( imagenes[indice],0,0,this );
        animacion = new Thread( this );
        animacion.start();
        }
    
    // Aquí hacemos el trabajo de animación
    // Muestra una imagen, para, muestra la siguiente...
    public void run() {
        // Obtiene el identificador del thread
        Thread thActual = Thread.currentThread();

        // Nos aseguramos de que se ejecuta cuando estamos en un
        // thread y además es el actual
        while( animacion != null  &&  animacion == thActual )
            {
            if( tracker.checkID( indice ) )
                {
                // Obtenemos la siguiente imagen
                offScrGC.drawImage( imagenes[indice],0,0,this );
                indice++;
                // Volvemos al principio y seguimos, para el bucle
                if( indice >= imagenes.length )
                    indice = 0;
                }

            // Ralentizamos la animación para que parezca normal
            try {
                animacion.sleep( 200 );
            } catch( InterruptedException e ) {
                ;
                }
            // Pintamos el siguiente fotograma
            repaint();
            }
        }   
    }
Suerte....y segui evolucionando bro...tenes la masia de todos los buenos programadores.