Buongiorno ,
Riprendo questo topic per non crearne un altro , la domanda è simile.
Di seguito un metodo per fare il crop (32x32) di questa immagine
Tileset.
La prima volta che ho scritto il metodo , inserivo ogni
subImagine dentro un oggetto
Tile e poi collezionavo ogni oggetto Tile dentro una Lista.
Addesso sto modificando il metodo per inserire ogni oggetto Tile dentro una HashMap con questi argomenti :
ConcurrentHashMap <Shape, Tile> hashMap = new ConcurrentHashMap <Shape, Tile>();
il metodo della classe
Game è questo :
private BufferedImage[] getSubImages (BufferedImage bi){
int col;
int row;
BufferedImage[] arrayBi;
/* Initialize bounds object */
bounds = new Rectangle(0,0,TILE_WIDTH,TILE_HEIGHT);
col = bi.getWidth()/TILE_WIDTH;
row = bi.getHeight()/TILE_HEIGHT;
arrayBi = new BufferedImage[col*row];
int index = 0;
for(int i = 0; i < row; i++) {
int y= i*TILE_HEIGHT;
for(int j = 0; j < col; j++) {
int x = j*TILE_WIDTH;
/* Gets subImage */
arrayBi[index++] = bi.getSubimage(x, y, TILE_WIDTH, TILE_HEIGHT);
/* set bounds object */
bounds.x = x;
bounds.y = y;
/* New object */
Tile tile = new Tile(bounds, TILE_WIDTH, TILE_HEIGHT,arrayBi[index]);
tile.setId(index);
hashMap.putIfAbsent(bounds, tile);
/* debug */
System.out.println(">>>>> "+ bounds.x + "," + bounds.y);
}
}
return arrayBi;
}
Ottengo l'Hash Table
public ConcurrentHashMap <Shape, Tile> getTiles(){
return hashMap;
}
In un altra classe ho scritto due righe di test per ottenere il valore di un field ( getId come esempio).
Vorrei capire come utilizzare l'oggetto bounds come Key nell'hashMap:
Un codice di test dentro una classe di tipo Jpanel
Rectangle r = new Rectangle (0,0,32,32);
r.x = 32;
r.y = 32;
Game = new Game(new File("tileset01.jpg"));
hashMap = Game.getTiles();
int id = hashMap.get(r).getId(); //<<--- NullPointerException
System.out.println("id: "+id);
Con queste dichiarazioni all'inizio
private Game Game;
ConcurrentHashMap <Shape, Tile> hashMap = new ConcurrentHashMap <Shape, Tile>();
L'intenzione era di dare ad un Hashmap <k,v> , l'oggetto bounds a
k come Key e ottenere di conseguenza l'oggetto corrispondente v
Ottengo invece un errore di NullPointer , non sono sicuro se si riferisce all'HashMap o all'oggetto Tile.
Forse il riferimento per la Key e sbagliato e quindi punta ad un oggetto Tile non esistente.
Spero di non aver fatto qualche errore grossolano
Secondo voi , si può fare?
EDIT:
Devo fare l' ovverride di equals() ?Sei si in quale classe ?
Grazie