J'ai cette fiche sprite:Comment extraire une partie de cette image en Java?
Pacman sprites http://i39.tinypic.com/145nvp.png
Comment puis-je lire ce fichier d'image pour extraire une partie de celui-ci à utiliser comme sprite?
J'ai cette fiche sprite:Comment extraire une partie de cette image en Java?
Pacman sprites http://i39.tinypic.com/145nvp.png
Comment puis-je lire ce fichier d'image pour extraire une partie de celui-ci à utiliser comme sprite?
Si la zone d'image-objet est lue dans BufferedImage
, la méthode getSubimage
peut être utilisée pour obtenir une sous-image de la feuille d'image-objet.
Le procédé getSubimage
prendra la x
, y
, et le width
et height
de la sous-image désiré, de sorte que peut être obtenu l'image-objet souhaité. Comme la plupart des sprites semblent avoir la même taille, je pense que la plupart d'entre eux peuvent être récupérés par une boucle imbriquée for
pour parcourir la grande image. Par exemple, si l'image d'image-objet est chargée à l'aide de la classe ImageIO
(telle que la méthode read
) et que chaque image-objet a une taille de 10 pixels sur 10 pixels, où 5 lignes par 5 colonnes d'images-objets, les images-objets peuvent être obtenu par le texte suivant:
BufferedImage bigImg = ImageIO.read(new File("sheet.png"));
// The above line throws an checked IOException which must be caught.
final int width = 10;
final int height = 10;
final int rows = 5;
final int cols = 5;
BufferedImage[] sprites = new BufferedImage[rows * cols];
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
sprites[(i * cols) + j] = bigImg.getSubimage(
j * width,
i * height,
width,
height
);
}
}
le hic est, bien sûr, le code ci-dessus ne fonctionnera que si tous les sprites sont de la même taille, donc il y aura besoin d'être un ajustement effectué afin de travailler pour la feuille de sprite donnée. (Comme le coin supérieur droit semble être de taille différente des autres.)
du code s'il vous plaît? –
Désolé à ce sujet, j'ai appuyé par erreur sur le bouton de réponse de poste. J'ajouterai plus à la réponse. – coobird
ressemble à des index * i * et * j * doivent être échangés dans l'appel * getSubImage() * –
Si vous voulez simplement dessiner les sprites, la classe Graphics de Java a une méthode drawImage qui va tirer une zone spécifique de l'image pour toi. Vous n'avez qu'à spécifier l'image source, où vous voulez dessiner l'image-objet sur votre objet graphique (x, y, largeur, hauteur), et dans quelle image de l'image se trouve l'image-objet (x, y, largeur, hauteur) .
Si l'on suppose la largeur et la hauteur de l'image-objet sont de la même largeur et la hauteur que vous voulez dessiner sur la zone de dessin, vous pouvez définir votre propre méthode pour dessiner un cadre de sprite comme suit
void drawSpriteFrame(Image source, Graphics2D g2d, int x, int y,
int columns, int frame, int width, int height)
{
int frameX = (frame % columns) * width;
int frameY = (frame/columns) * height;
g2d.drawImage(source, x, y, x+width, y+height,
frameX, frameY, frameX+width, frameY+height, this);
}
columns
est combien de colonnes il y a dans votre feuille de sprite. Les deux premières lignes de la méthode calculent la position x quelconque de l'image-objet dans votre feuille.
Ces grands sprites dans votre feuille nécessiteront une manipulation spéciale. Vous pouvez les dessiner avec des tuiles (pour dessiner quatre sprites pour chacune des grandes images dans ce cas), ou vous pouvez déterminer manuellement quels x, y, largeur et hauteur, utiliser pour ces sprites.
Si votre feuille de sprite était une feuille régulière (tous les sprites de la même taille) et il a été disposé dans un 5 x 15 modèle que le vôtre est, vous dessinez le cadre 20 avec l'appel de méthode suivante
Toolkit tk = Toolkit.getDefaultToolkit();
Image pacman = tk.getImage(getURL("pacman.png"));
...
drawFrame(pacman, g2d, x, y, 15, 19, 25, 25);
Ici, x et y sont la position que vous voulez dessiner l'image-objet sur votre objet Graphics, 15 est le nombre de colonnes dans votre feuille de sprite, 19 est le cadre (numérotation commence à 0), et 25 est la largeur et la hauteur de chaque sprite (je me suis approché).
Cela pourrait convenir à http://gamedev.stackexchange.com/. –