java - sirve - Gráficos: ¿Cómo uso el método create(int x, int y, int width, int height) y translate(int x, int y)?
para que sirve import java awt graphics (3)
Estaba tratando de hacer mi tarea de ciencias de la computación, pero estoy atascado porque estaba tratando de usar los siguientes métodos.
public Graphics create(int x,int y,int width,int height)
Eso crea un nuevo objeto Graphics basado en este objeto Graphics, pero con un nuevo área de traducción y clip.
Parámetros:
- x - la coordenada x
- y - la coordenada y
- ancho: el ancho del rectángulo de recorte.
- altura: la altura del rectángulo de recorte.
public abstract void translate(int x,int y)
Eso traduce el origen del contexto de gráficos al punto (x, y) en el sistema de coordenadas actual.
¿Alguien puede explicar y dar ejemplos de cómo usarlos?
estaba tratando de hacer esto ...
public Graphics drawPlayer1()
{
myPencil.up();
myPencil.move(-620,300);
myPencil.down();
myPencil.fillCircle(20);
myPencil.up();
myPencil.move(-590,300);
myPencil.drawString("Player1: " + player1);
p1.create(-620,300,40,40);
return p1;
}//end drawPlayer1
y me arrojó una nullPointerException cuando se trata de p1.create (-620,300,40,40);
Puede ir a través del tutorial de Java para gráficos 2D y javadocs si no lo ha hecho ya.
Se está haciendo tarde para mí, pero le daré una oportunidad rápida. Una instancia de Graphics (o Graphics2D) es una abstracción de un dispositivo gráfico (por ejemplo, impresora, pantalla, etc.) Tiene límites. Digamos que desea dibujar en un área específica del dispositivo y desea que el código siempre sea relativo a (0,0) (por ejemplo, un juego donde un objeto se mueve a través de la pantalla). El sprite siempre será el mismo pero su ubicación será diferente. Una forma de lograr esto es crear un Graphics2D que restrinja la salida a un subconjunto del Graphics2D principal. Eso es lo
public Graphics create(int x,int y,int width,int height)
lo hará por ti Creo que otros atributos de Graphics2D también son independientes. Esto significa configurar Paint en el segundo Graphics2D no afectará al principal.
public abstract void translate(int x,int y)
se trata de mover el orgin (pero no la dirección del eje). Por defecto, el origen será la esquina superior izquierda del dispositivo. Esto se puede cambiar para estar en cualquier lugar dentro del dispositivo. Usando el ejemplo de arriba de un sprite moviéndose a través de la pantalla simplemente llame a translate donde lo quiera dibujar, y luego dibuje.
Estoy con Andrew en este caso, nunca he usado Graphics#create(int, int, int, int)
. Yo sí uso Graphics#create
though.
Básicamente, el método create creará un nuevo contexto de gráficos que es una copia del original. Esto le permite manipular la copia sin afectar el original. Esto es importante si está realizando operaciones en los gráficos que no se pueden (fácilmente) deshacer.
Traduzca "ceros" simples al contexto gráfico en la nueva ubicación. El proceso de pintura Swing hace esto para cada componente que pinta. Básicamente, antes de llamar a la paint
, el contexto de los gráficos se traslada a la posición de los componentes, lo que significa que toda la pintura dentro del componente se hace desde 0x0
public class TestGraphics01 {
public static void main(String[] args) {
new TestGraphics01();
}
public TestGraphics01() {
EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
} catch (Exception ex) {
}
JFrame frame = new JFrame("Testing");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLayout(new BorderLayout());
frame.add(new TestGraphicsPane());
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
});
}
public class TestGraphicsPane extends JPanel {
@Override
public Dimension getPreferredSize() {
return new Dimension(400, 400);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
FontMetrics fm = g.getFontMetrics();
// This creates a "copy" the graphics context, it''s translated
// to the x, y position within the current graphics context
// and has a width and height. If the width or height is outside
// the current graphics context, then it is truncated...
// It''s kind of like clip, except what ever you do to this copy
// does not effect the graphics context it came from...
// This would be simular to setting the clipping region, just it
// won''t effect the parent Graphics context it was copied from...
Graphics create = g.create(100, 100, 200, 200);
create.setColor(Color.GREEN);
create.fillRect(0, 0, 200, 200);
create.setColor(Color.YELLOW);
create.drawString("I''m inside...", 0, fm.getAscent());
create.dispose();
// But I remain uneffected...
g.drawString("I''m outside...", 0, fm.getAscent());
// I will effect every thing draw afterwards...
g.setColor(Color.RED);
int y = 50 - (fm.getHeight() / 2) + fm.getAscent();
g.translate(50, y);
g.drawString("I''m half way", 0, 0);
// You must reset the translation if you want to reuse the graphics OR
// you didn''t create a copy...
g.translate(-50, -y);
y = 350 - (fm.getHeight() / 2) + fm.getAscent();
g.translate(300, y);
g.drawString("I''m half way", 0, 0);
// You must reset the translation if you want to reuse the graphics OR
// you didn''t create a copy...
g.translate(-300, -y);
}
}
}