This site requires JavaScript, please enable it in your browser!
Greenfoot back
AppleBanana
AppleBanana wrote ...

2023/9/27

Help with converting a buffered image into a greenfoot image

AppleBanana AppleBanana

2023/9/27

#
Hi, I was trying to write a program, that converts the sprites from a sprite sheet into an actual animation. The problem I stumbled upon, is that I now need to convert a buffered image into a greenfoot image, but my mental capacity clearly isn't as big enough co comprehend such an action, so help would be much appreciated :) the error itself is in the animationShower() method, but i'll post the whole class, just for clarity the code:
import greenfoot.*;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class SpriteSheetExtractor extends Actor {
    MyWorld w;

    private int numRows;
    private int numCols = 3; // number of columns
    private int spriteWidth = 32; // width of each sprite in pixels
    private int spriteHeight = 32; // Height of each sprite in pixels

    private boolean added = false;
    private int frame = 0; // Declare frame as an instance variable

    BufferedImage[][] sprites; // Declare the sprites array without initialization
    AnimationModels model[] = new AnimationModels[numRows]; // Declare the models array without initialization

    public SpriteSheetExtractor(MyWorld w1) {
        w = w1;
        numRows = 4; // Set the correct number of rows
        sprites = new BufferedImage[numRows][numCols]; // Initialize the sprites array with the correct size
        main(); // Call main after initializing the sprites array
        animationShower(); // Then call animationShower
    }

    public void act() {
        animationShower();
    }

    public void main() {
        // Load the sprite image
        BufferedImage spriteSheet = null;
        try {
            spriteSheet = ImageIO.read(new File("C:/Users/sebwr/Documents/Greenfoot/tests/CharacterDesignTest-Ediding-01/images/spriteSheets/Male16-4.png"));
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        // create a 2D array to store individual sprite images

        for (int row = 0; row < numRows; row++) {
            for (int col = 0; col < numCols; col++) {
                // calculate the position of the current sprite
                int x = col * spriteHeight;
                int y = row * spriteWidth;

                // extract the current image as a subimage
                BufferedImage spriteImage = spriteSheet.getSubimage(x, y, spriteWidth, spriteHeight);

                // store the image in the sprites array
                sprites[row][col] = spriteImage;
            }
        }
    }

    public void animationShower() {
        if (!added) {
            int yPos = 0;
            MouseInfo mouse = Greenfoot.getMouseInfo();

            added = true;
            for (int i = 0; i < numRows; i++) {
                // Create a new AnimationModels object for each row
                model[i] = new AnimationModels(w);
                w.addObject(model[i], w.getWidth() / 2, yPos + w.getHeight() / (numRows + 9));
                yPos += w.getHeight() / numRows + 1;
                yPos += model[i].getImage().getHeight(); // Adjust yPos based on the height of the added object
                System.out.println("Animation " + (i + 1) + " wurde hinzugefĆ¼gt " + added);
            }
        } else {
            frame++;
            if (frame == 20) frame = 0;
            if (frame == 10) {
                for (int i = 0; i < numRows; i++) {
                    GreenfootImage greenfootImage = new GreenfootImage(sprites[i][0]); // Convert BufferedImage to GreenfootImage
                    model[i + 1].setImage(greenfootImage);
                }
            }else if (frame == 20) {
                for (int i = 0; i < numRows; i++) {
                    GreenfootImage greenfootImage = new GreenfootImage(sprites[i][2]); // Convert BufferedImage to GreenfootImage
                    model[i + 1].setImage(greenfootImage);
                }
            }
        }
    }

}
You need to login to post a reply.