hola a todos, estoy tratando de hacer un ejercicio en java, se trata de una animacion de una pelota que pasa de una ventana server a una ventana client y va rebotando segun el lado de la ventana que toca, el problema es que inicia bien desde la ventana del server, respeta el rebote en los angulos que toca (izquierda,arriba,abajo) en la ventana del server nose usa el lado derecho, luego cuando pasa a la ventana del client respeta los rebotes en los angulos de arriba y abajo pero cuando llega al lado derecho (del client) la pelota desaparece y loq me sirve es que retorne con el rebote al server y siga rebotando.
dejo una imagen, en este ejemplo por el momento funciona los puntos 1,2,3,4 y la pelota luego desaparece (tendria que hacer 5,6,7,8)
(en otro ejemplo funcionarian los puntos 8,7,6,5 y la pelota luego desaparece, tendria que hacer 4,3,2,1)
en ambos casos nunca regresa al server.....
alguna idea o sugerencia??
aqui esta el codigo del client PelotaNetClient.java, el codigo del server esta en pastebin porque supera el limite de caracteres del post
PelotaNetServer.java
http://pastebin.com/EUiw9XTV
PelotaNetClient.java
Código Java:
Ver originalpackage pelotaCS;
// creo class y su constructor
import pelotaCS.PelotaNetServer;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
public class PelotaNetClient
extends JFrame { private Socket conexion
= null; public PelotaNetClient(){
super("Pelota - Client");
this.setSize(500,400);
// this.setLocationRelativeTo(null);
this.setLocation(600,40);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
conectar(); // me conecto al server
this.setVisible(true);
}//fin constructor
// METODO para la conexion y inicio de la animacion.
public void conectar(){
try{ // me conecto al server
conexion
= new Socket("localhost",
6789); //obtengo el stream del input del server y doy un output al server
}
Container contenedor
= this.
getContentPane(); PanelAnimacionClient pan = new PanelAnimacionClient(this,contenedor.getSize());
contenedor.add(pan);
}
private PelotaNetClient ventana ;
private Image bufferVirtuale
; private Timer tim
= null; private int xPelota = 0;
private int yPelota = 0;
private int diametroPelota = 40;
private int movimiento = 3;
private int timerDelay = 10;
private boolean derecha,abajo,pelotaPresente,llegadaComunicada ;
public PanelAnimacionClient
(PelotaNetClient ventana,
Dimension dimension
){ super();
this.ventana = ventana;
this.setSize(dimension);
derecha = true;
abajo = true;
pelotaPresente = false;
llegadaComunicada = false;
tim
= new Timer(timerDelay,
this); tim.start();
}
paint(g);
}
super.paint(g);
bufferVirtuale = createImage(getWidth(),getHeight());
offScreen = bufferVirtuale.getGraphics();
offScreen.
setColor(new Color(254,
18,
22)); if (pelotaPresente){
offScreen.fillOval(xPelota,yPelota,diametroPelota,diametroPelota);
}
screen.drawImage(bufferVirtuale,0,0,this);
offScreen.dispose();
}
if (pelotaPresente){
if (abajo){
if (yPelota > (this.getHeight()-diametroPelota)){
abajo = false;
yPelota -= movimiento;// borde alto
}else{
yPelota += movimiento;
}
}else{
if (yPelota <=0){ // borde abajo
abajo = true;
yPelota += movimiento;
}else{
yPelota -= movimiento;// borde abajo
}
}
if (derecha){
if((!llegadaComunicada)&&(xPelota <=(this.getWidth()-diametroPelota))){
try{
ventana.getOutput().writeBoolean(abajo);
ventana.getOutput().writeInt(yPelota);
llegadaComunicada = true;
}
}else{
xPelota += movimiento;
if (xPelota < this.getWidth()){
pelotaPresente = false;
llegadaComunicada = false;
}
}
}else{ // la pelota esta llendo a la izquierda
if (xPelota < 0){ // fin ventana izquierda
derecha = true; // cambio direccion pasa de derecha a izquierda
xPelota -= movimiento;
}else{
xPelota += movimiento;
}
}
}else{
boolean direccion = true;
int y=0;
try{
direccion = ventana.getInput().readBoolean();
y = ventana.getInput().readInt();// espero que llegue la pelota
abajo = direccion; //direccion de ingreso
derecha = false; // se mueve hacia la izquierda
yPelota = y; // coordinadas iniciales de la pelota
xPelota = 0;
pelotaPresente = true;
}
}
}
repaint();
}
}
return input;
}
return out;
}
}
//fin de la class palota net client
execPelotaServer.java
http://pastebin.com/sChkag1c
execPelotaClient.java
http://pastebin.com/ft2EbAui
primero hago el run del file execPelotaServer.java y luego del execPelotaClient.java
gracias anticipadas.
salu2