mover graphics en java sin hilos

Iniciado por .rn3w., 17 Diciembre 2015, 14:33 PM

0 Miembros y 1 Visitante están viendo este tema.

.rn3w.

Código (java) [Seleccionar]
public void paint(Graphics g) {
   
        for (int i = 0; i < 500; i++) {

            try {
                g.setColor(Color.WHITE);
                g.fillRect(0, 0, this.getWidth(), this.getHeight());
                Thread.sleep(30);
               
                g.setColor(Color.RED);
                g.fillRect(i, 350, 50, 50);
            } catch (InterruptedException ex) {
                Logger.getLogger(Lienzo.class.getName()).log(Level.SEVERE, null, ex);
            }

        }


hice este codigo ya muy conocido, pero no logro mover el cuadrado en tiempo de ejecucion

no quiero utilizar hilos

0xFer

Recuerda llamar al método repaint para actualizar el Frame.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

.rn3w.

en que parte debo llamar al repaint?

0xFer

En tu caso sería después de cada iteración porque es cuando la posición del rectángulo cambia.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

.rn3w.

te animarias a ayudarme a hacer un juego ?

0xFer

Si, pero publica en el foro tus dudas.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

.rn3w.

dibuje una circunferencia estatica, ahora pretengo moverla pero utilizando el algoritmo bresenham

hice este codigo pero lo que hace es agrandar la circunferencia, pero yo prentendo mover con el mismo tamano

public void drawLineQuadrantOneO(Graphics g, int x0, int y0, int x1, int y1, int value) {
        int dx, dy, de, dne, d, x, y;
        dx = x1 - x0;
        dy = y1 - y0;
        d = 2 + dy - dx;

        de = 2 * dy;
        dne = 2 * (dy - dx);
        x = x0;
        y = y0;

        Circulo.MidPointCircle(g, x, y);

        while (x < x1) {
            if (d <= 0) {
                d = d + de;
                x = x + 1;
            } else {
                d = d + dne;
                x = x + 1;
                y = y + 1;
            }
            Circulo.MidPointCircle(g, x, y);
        }
    }

como moveria con el algoritmo bresenham?

0xFer

#7
No conozco ese algoritmo, así que tampoco entiendo bien tu pregunta. Teniendo eso en cuenta para mover lo que quieres simplemente tienes que mover todos los puntos( o lo que sea) que dibujes al mismo tiempo. si dibujas dos puntos entonces han de tener una coordenada en x,y pues súmele un valor equivalente a las coordenadas de ambos puntos.
Código (java) [Seleccionar]
int getRandomNumber(){
    return 4; //chosen by fair dice roll
              //guaranteed to be random
}

.rn3w.


.rn3w.

#9
este es mi codigo, pero no logro hacer mover el punto en tiempo de ejecucion ayuda, lo que hace es mostrar el ultimo pixel dibujado.

lo que yo pretendo hacer es que el pixel simule que avance, mi idea es la siguiente:
dibujo un punto
pasa 3 milesegundos y borro
dibujo el punto siguiente
pasa 3 milesegundos y borro
y asi sucesivamente hasta que llegue al punto final
entonces yo quiero mostrar todo y no solamente el punto final dibujado

clase punto es el que dibuja el punto
Código (java) [Seleccionar]
public class Point {
 
   public static void putPixel(Graphics g2, int x, int y) {
       Graphics2D g = (Graphics2D)g2;
       g.setColor(Color.white);
       g.drawLine(x, y, x, y);
   }
}


Código (java) [Seleccionar]

package program;
import javax.swing.*;
import dimension1.Point;
import java.awt.*;

class AnimationFrame extends JPanel {


   public AnimationFrame() {
       setPreferredSize(new Dimension(500, 500));
   }

   public void runAnimation() {
       repaint();
   }

   @Override
   public void paint(Graphics g) {
     
       drawLineQuadrantOneO(g, 100,20,300 ,50, 10000);

   }
   
   public void drawLineQuadrantOneO(Graphics g, int x0, int y0, int x1, int y1, int value) {
       int dx, dy, de, dne, d, x, y;
       dx = x1 - x0;
       dy = y1 - y0;
       d = 2 + dy - dx;
       Rectangle clip = g.getClipBounds();
       de = 2 * dy;
       dne = 2 * (dy - dx);
       x = x0;
       y = y0;
       Point.putPixel(g, x, y);
       //Circulo.MidPointCircle(g, 10, y);

       while (x < x1) {
           if (d <= 0) {
               d = d + de;
               x = x + 1;
           } else {
               d = d + dne;
               x = x + 1;
               y = y + 1;
           }
           g.setColor(Color.BLACK);
           g.fillRect(clip.x, clip.y, clip.width, clip.height);
           try {
               Thread.sleep(3);
           } catch (InterruptedException ex) {
               Logger.getLogger(AnimationFrame.class.getName()).log(Level.SEVERE, null, ex);
           }
           g.setColor(Color.white);
           Point.putPixel(g, x, y);
           //Circulo.MidPointCircle(g, 10, y);
           //repaint();
       }
   }

   public static void main(String[] args) {
       JFrame mainFrame = new JFrame();
       mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       AnimationFrame animationPanel = new AnimationFrame();
       mainFrame.add(animationPanel);
       mainFrame.pack();
       mainFrame.setVisible(true);
       animationPanel.runAnimation();
   }

}