Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

386
Visualizações
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 Respostas
Responde à pergunta

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda