Foro de elhacker.net

Programación => Java => Mensaje iniciado por: bengy en 17 Diciembre 2015, 14:33 pm



Título: mover graphics en java sin hilos
Publicado por: bengy en 17 Diciembre 2015, 14:33 pm
Código
  1. public void paint(Graphics g) {
  2.  
  3.        for (int i = 0; i < 500; i++) {
  4.  
  5.            try {
  6.                g.setColor(Color.WHITE);
  7.                g.fillRect(0, 0, this.getWidth(), this.getHeight());
  8.                Thread.sleep(30);
  9.  
  10.                g.setColor(Color.RED);
  11.                g.fillRect(i, 350, 50, 50);
  12.            } catch (InterruptedException ex) {
  13.                Logger.getLogger(Lienzo.class.getName()).log(Level.SEVERE, null, ex);
  14.            }
  15.  
  16.        }

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

no quiero utilizar hilos


Título: Re: mover graphics en java sin hilos
Publicado por: 0xFer en 17 Diciembre 2015, 14:51 pm
Recuerda llamar al método repaint para actualizar el Frame.


Título: Re: mover graphics en java sin hilos
Publicado por: bengy en 17 Diciembre 2015, 16:17 pm
en que parte debo llamar al repaint?


Título: Re: mover graphics en java sin hilos
Publicado por: 0xFer en 17 Diciembre 2015, 20:07 pm
En tu caso sería después de cada iteración porque es cuando la posición del rectángulo cambia.


Título: Re: mover graphics en java sin hilos
Publicado por: bengy en 17 Diciembre 2015, 21:22 pm
te animarias a ayudarme a hacer un juego ?


Título: Re: mover graphics en java sin hilos
Publicado por: 0xFer en 17 Diciembre 2015, 21:52 pm
Si, pero publica en el foro tus dudas.


Título: Re: mover graphics en java sin hilos
Publicado por: bengy en 17 Diciembre 2015, 22:08 pm
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?


Título: Re: mover graphics en java sin hilos
Publicado por: 0xFer en 17 Diciembre 2015, 23:04 pm
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.


Título: Re: mover graphics en java sin hilos
Publicado por: bengy en 17 Diciembre 2015, 23:42 pm
https://es.wikipedia.org/wiki/Algoritmo_de_Bresenham



ese es el algoritmo

pero lo quiero utilizar para mover


Título: Re: mover graphics en java sin hilos
Publicado por: bengy en 21 Diciembre 2015, 16:17 pm
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
  1. public class Point {
  2.  
  3.    public static void putPixel(Graphics g2, int x, int y) {
  4.        Graphics2D g = (Graphics2D)g2;
  5.        g.setColor(Color.white);
  6.        g.drawLine(x, y, x, y);
  7.    }
  8. }

Código
  1. package program;
  2. import javax.swing.*;
  3. import dimension1.Point;
  4. import java.awt.*;
  5.  
  6. class AnimationFrame extends JPanel {
  7.  
  8.  
  9.    public AnimationFrame() {
  10.        setPreferredSize(new Dimension(500, 500));
  11.    }
  12.  
  13.    public void runAnimation() {
  14.        repaint();
  15.    }
  16.  
  17.    @Override
  18.    public void paint(Graphics g) {
  19.  
  20.        drawLineQuadrantOneO(g, 100,20,300 ,50, 10000);
  21.  
  22.    }
  23.  
  24.    public void drawLineQuadrantOneO(Graphics g, int x0, int y0, int x1, int y1, int value) {
  25.        int dx, dy, de, dne, d, x, y;
  26.        dx = x1 - x0;
  27.        dy = y1 - y0;
  28.        d = 2 + dy - dx;
  29.        Rectangle clip = g.getClipBounds();
  30.        de = 2 * dy;
  31.        dne = 2 * (dy - dx);
  32.        x = x0;
  33.        y = y0;
  34.        Point.putPixel(g, x, y);
  35.        //Circulo.MidPointCircle(g, 10, y);
  36.  
  37.        while (x < x1) {
  38.            if (d <= 0) {
  39.                d = d + de;
  40.                x = x + 1;
  41.            } else {
  42.                d = d + dne;
  43.                x = x + 1;
  44.                y = y + 1;
  45.            }
  46.            g.setColor(Color.BLACK);
  47.            g.fillRect(clip.x, clip.y, clip.width, clip.height);
  48.            try {
  49.                Thread.sleep(3);
  50.            } catch (InterruptedException ex) {
  51.                Logger.getLogger(AnimationFrame.class.getName()).log(Level.SEVERE, null, ex);
  52.            }
  53.            g.setColor(Color.white);
  54.            Point.putPixel(g, x, y);
  55.            //Circulo.MidPointCircle(g, 10, y);
  56.            //repaint();
  57.        }
  58.    }
  59.  
  60.    public static void main(String[] args) {
  61.        JFrame mainFrame = new JFrame();
  62.        mainFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  63.        AnimationFrame animationPanel = new AnimationFrame();
  64.        mainFrame.add(animationPanel);
  65.        mainFrame.pack();
  66.        mainFrame.setVisible(true);
  67.        animationPanel.runAnimation();
  68.    }
  69.  
  70. }


Título: Re: mover graphics en java sin hilos
Publicado por: bengy en 21 Diciembre 2015, 23:53 pm
no se si me explique muy bien, pero aunque sea pregunten porfavor !!! en realidad necesito mucha ayuda


Título: Re: mover graphics en java sin hilos
Publicado por: crack81 en 29 Diciembre 2015, 07:49 am
explicate mejor por favor