¿Hay alguna forma de dibujar un rectángulo variable usando la clase Graphics?
Frecuentes
Visto 3,053 veces
0
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.
2 Respuestas
2
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
1
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 java awt rectangles or haz tu propia pregunta.
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