Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

380
Vistas
Matriz Java 2D, ¿es posible establecer un tamaño individual?

Pregunta rápida sobre matrices Java 2D; Para mi juego 2D de arriba hacia abajo basado en mosaicos (usando swing) utilizo una matriz 2D para crear un mapa, como este

 public int[][] createMap(){ return new int[][]{ {0, 0, 1, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0}}; }

Luego uso esto en mi clase gameComponents donde dibujo los mosaicos individuales en el mapa, así

 protected void paintComponent(Graphics g){ super.paintComponent(g); for (int row = 0; row < game.getMap().getWidth(); row++) { for (int col = 0; col < game.getMap().getHeight(); col++) { g.drawImage(tile.getTileImage().get(values()[game.getMap().getMapArray()[col][row]]), row * SIZE, col * SIZE, this); } } }

(donde el tamaño es el tamaño de un mosaico)
Esto funciona y dibuja correctamente cada mosaico en el mapa como se esperaba, sin embargo, esto también causa un problema para la detección de colisiones. Como habrás notado, aunque defino el tamaño entre los mosaicos en el método de dibujo, no está definido en absoluto en la matriz. Lo cual, como se puede imaginar, plantea problemas al verificar la colisión, ya que el mosaico dibujado no está donde está el mosaico en la matriz 2D (debido al desplazamiento del tamaño).

Este es el código que uso para verificar la colisión (por supuesto, no funciona debido a ArrayIndexOutofbounds).

 public boolean collisionDetected(int xDirection, int yDirection, Game game, Player player){ for (int row = 0; row < game.getMap().getHeight() * 16; row ++){ for (int col = 0; col < game.getMap().getWidth() * 16; col++) { System.out.println(col + xDirection + player.getPositionX()); if(game.getMap().getTile(col + xDirection + player.getPositionX() , row + yDirection + player.getPositionY()) == Tiles.GRASS ){ System.out.println("COLLISION DETECTED"); return true; } } } return false; }

Este método utiliza un método dentro de la clase de mapa que devuelve el mosaico en esa coordenada específica, como este

 public Tiles getTile(int col,int row){ return Tiles.values()[mapArray[col][row]]; }

Y, por supuesto, como la matriz 2D no conoce el desplazamiento del tamaño, simplemente arroja un índice de matriz fuera del límite.
Mi pregunta es, ¿es posible definir una matriz de mapas 2D teniendo en cuenta el tamaño de un mosaico? Agradezco cualquier ayuda y aporte que pueda obtener, después de todo, ¡estoy aquí para aprender!

Aclaración adicional: todos los mosaicos están en una clase de enumeración (es decir, AIRE, HIERBA, PIEDRA...). También vale la pena señalar que la posición del jugador no está limitada por una matriz, simplemente lo muevo la cantidad de píxeles que quiero que se mueva.

¡Gracias por adelantado!

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Este método utiliza un método dentro de la clase de mapa que devuelve el mosaico en esa coordenada específica, como este

 public Tiles getTile(int col,int row){ return Tiles.values()[mapArray[col][row]]; }

Entonces, si tiene una "coordenada", ¿por qué llama a los parámetros col/fila?

Si tiene una cuadrícula de 10x10 y cada mosaico tiene 20 píxeles, entonces el tamaño de la cuadrícula es de 200x200, por lo que podría tener valores de x/y en el rango de 0 a 199.

Entonces, si tiene una coordenada de 25x35, simplemente calcularía los valores de fila/columna como:

 int row = 35 / 20; int column = 25 / 20;

Entonces tu método sería algo como:

 public Tiles getTile(int x, int y) { int row = y / 20; int column = x / 20; return Tiles.values()[mapArray[row][column]]; }
over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda