import java.awt.image.BufferedImage;
import java.io.File;
import java.net.URL;
import java.io.IOException;
import javax.imageio.ImageIO;
import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.Timer;
class SpriteSheetManager {
private int sprite_width;
private int sprite_height;
private int spritesheet_width;
private int spritesheet_height;
private int x = 0;
private int y = 0;
private int maxNum = 0;
private long runningTime = 0;
public SpriteSheetManager() {
spriteSheet = null;
}
public SpriteSheetManager
(String file
) { setSpriteSheet(file);
}
public void setSpriteSheet
(String file
){ try {
spriteSheet
= ImageIO.
read(new File("images/"+file
)); //ImageIO.read(new URL("http://s...content-available-to-author-only...g.org/vso6oed91/spritesheet.png")); e.printStackTrace();
}
}
public void setSpriteSheetDimensions(int w, int h){
spritesheet_width = w;
spritesheet_height = h;
}
public void setSpriteDimensions(int w, int h){
sprite_width = w;
sprite_height = h;
}
public void setNumberOfSprites(){
maxNum+= (spritesheet_height/sprite_height) * (spritesheet_width/sprite_width);
}
return spriteSheet;
}
public Image getSprite
(int num
){ if( (x*sprite_width) > (spritesheet_width - sprite_width) ){
x = 0; y++;
System.
out.
println("x = "+x
+" y = "+y
); }
if(num%maxNum == 0 && num != 0){x=0; y=0;}
sprite = spriteSheet.getSubimage(x*sprite_width, y*sprite_height, sprite_width, sprite_height);
x++;
return sprite;
}
}
class Ideone {
public static void main
(String[] args
) { public void run() {
new TestSpriteSheet();
}
});
}
}
class TestSpriteSheet
extends JFrame{
private static final long serialVersionUID = 1L;
private SpriteSheetManager ss;
private long runningTime = 0;
public TestSpriteSheet(){
super("Testing SpriteSheets");
setSize(200,200);
setDefaultCloseOperation
(JFrame.
EXIT_ON_CLOSE); setResizable(false);
}
});
ss = new SpriteSheetManager("spritesheet.png");
ss.setSpriteSheetDimensions(321,381);
ss.setSpriteDimensions(107,127);
add(new PanelSprite(this, ss));
this.setVisible(true);
}
}
class PanelSprite
extends JPanel{
private long runningTime = 0;
private int fps = 24;
private boolean stop = false;
private SpriteSheetManager ss;
private TestSpriteSheet temp;
private int num = 0;
public PanelSprite(TestSpriteSheet test, SpriteSheetManager sm){
ss = sm;
temp = test;
setSize(180,180);
init();
}
super.paintComponent(g);
long time = 50000;
animate_with_gfx(g, time);
if(runningTime <= time){
num++;
}
}
public void init(){
if(!stop) {
repaint();
} else {
((Timer)e.
getSource()).
stop(); }
}
});
t.setRepeats(true);
t.setDelay((int)(1000/fps));
t.start();
}
public void animate_with_gfx
(Graphics g,
long time
){ if(runningTime <= time){
try {
//System.out.println(runningTime); //Checking if this part works
g.drawImage(ss.getSprite(num), 40, 40, null);
runningTime+=(1000/fps);
ex.printStackTrace();
}
}
else{
stop = true;
}
}
}