¿Hay alguna forma de dibujar un rectángulo variable usando la clase Graphics?

He codificado un juego de Java simple donde hay dos rectángulos en la pantalla, uno de los rectángulos se mueve y el otro permanece quieto, el Rectángulo en movimiento se mueve con la entrada de flecha del teclado y puede moverse hacia arriba, hacia abajo, hacia la izquierda o hacia la derecha. El problema que tengo es dibujar mis rectángulos en la pantalla, quiero decir que tengo los 2 rectángulos configurados con mis variables como se muestra:

Rectangle rectOne = new Rectangle(shiftX, shiftY,90,90);
Rectangle rectTwo = new Rectangle(500 + buckyPositionX, 330 + buckyPositionY, 210, 150);

He creado un método de representación para dibujar las cosas en la pantalla que quiero que se muestren:

 public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{
}

El problema que tengo es mostrar mis rectángulos en la pantalla escribiendo el código en el método render, podría hacer lo siguiente:

g.fillRect(x, y,90,90);
g.fillRect(500 + buckyPositionX, 330 + buckyPositionY, 210, 150);

Lo que hace 2 rectángulos en la pantalla, pero necesito que los rectángulos se dibujen usando el código Rectangle escrito con las variables. Me han dicho que esto se puede hacer usando Graphics2D, pero me pregunto si hay una forma más sencilla de usar la función de gráficos. , si no, ¿podría ayudarme a configurar esto?

Gracias de antemano.

preguntado el 03 de enero de 13 a las 19:01

2 Respuestas

Puede acceder a los atributos de la Rectangle instancias fácilmente:

g.fillRect(rectOne.getX(), rectOne.getY(), rectOne.getWidth(), rectOne.getHeight());

En cualquier caso, tenga en cuenta que normalmente el Graphics el objeto es un Graphics2D instancia en tiempo de ejecución, por lo que esto también podría funcionar fácilmente:

Graphics2D g2d = (Graphics2D)g;
g2d.fill(rectOne);

Respondido el 03 de enero de 13 a las 19:01

Gracias por responder a mi pregunta. Ahora tengo un nuevo problema con el que puede ayudarme, utilicé fillRect(rectOne.getX()... y recibí un error que decía que el método fillRect toma (float,float,float.float) y no (doble,doble,doble,doble), creo que esto puede deberse a mis variables, mi rectOne requiere las variables shiftX y shiftY y rectTwo requiere buckyPositionX y buckyPositionY, todas estas variables son int y si las cambio para que floten, mis variables Rectangle obtienen errores, pero si los cambio a int, fillRect obtiene errores, ¿cómo soluciono esto, por favor? - raul khosla

Transmítalos al doble o use Rectangle2D.Double en lugar de Rectangle, que es una clase interna solo para esto. - Jack

Lo he intentado pero sigo recibiendo el siguiente error debajo de fillRect: "Este método fillRect(float,float,float,float) en el tipo de gráficos no es aplicable para los argumentos (doble,doble,doble,doble)" - raul khosla

Luego intente con la clase Rectangle2D.Float y POR FAVOR comience a leer la documentación y la referencia de la API. - Jack

También probé el método de flotación antes y obtuve el mismo error, también es esta la referencia de API docs.oracle.com/javase/6/docs/api? - raul khosla

Solo usa:

g.fillRect(myRect.getX(), myRect.getY(), myRect.getWidth(), myRect.getHeight());

sin que importe myRect es el rectángulo que desea dibujar. Incluso podrías hacer un método personalizado. drawRect(Graphics g, Rectangle myRect); si tienes muchos rectángulos para dibujar.

Usar Gráficos2D no es tan difícil también, ya que el proporcionar Graphics el objeto normalmente es un Graphics2D :

Graphics2D g2d = (Graphics2D) g;
g2d.fill(myRect);

Respondido el 03 de enero de 13 a las 19:01

Gracias por responder a mi pregunta. Ahora tengo un nuevo problema con el que puede ayudarme, utilicé fillRect(rectOne.getX()... y recibí un error que decía que el método fillRect toma (float,float,float.float) y no (doble,doble,doble,doble), creo que esto puede deberse a mis variables, mi rectOne requiere las variables shiftX y shiftY y rectTwo requiere buckyPositionX y buckyPositionY, todas estas variables son int y si las cambio para que floten, mis variables Rectangle obtienen errores, pero si los cambio a int, fillRect obtiene errores, ¿cómo soluciono esto, por favor? - raul khosla

Solo lanza el double valores a float cuando se los pasas fillRect() no verá la diferencia debido a una menor precisión en su pantalla. - vegetariano

Probé su método y cambié todo para que flotara, pero independientemente de lo que intente, sigo recibiendo el siguiente error en fillRect: "Este método fillRect(float,float,float,float) en el tipo de gráficos no es aplicable para los argumentos (doble, doble,doble,doble)" - raul khosla

Abra una nueva pregunta donde indique su nuevo problema, incluido el código actualizado, parece que no podemos resolver su nuevo problema en los comentarios... - vegetariano

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.