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
Recuerda llamar al método repaint para actualizar el Frame.
en que parte debo llamar al repaint?
En tu caso sería después de cada iteración porque es cuando la posición del rectángulo cambia.
te animarias a ayudarme a hacer un juego ?
Si, pero publica en el foro tus dudas.
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?
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.
https://es.wikipedia.org/wiki/Algoritmo_de_Bresenham
ese es el algoritmo
pero lo quiero utilizar para mover
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 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);
}
}
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();
}
}
no se si me explique muy bien, pero aunque sea pregunten porfavor !!! en realidad necesito mucha ayuda
explicate mejor por favor