fork(1) download
  1.  
  2. import java.awt.image.BufferedImage;
  3. import java.io.File;
  4. import java.net.URL;
  5. import java.io.IOException;
  6.  
  7. import javax.imageio.ImageIO;
  8. import java.awt.BorderLayout;
  9. import java.awt.Graphics;
  10. import java.awt.Graphics2D;
  11. import java.awt.Image;
  12. import java.awt.Toolkit;
  13. import java.awt.event.ActionEvent;
  14. import java.awt.event.ActionListener;
  15. import java.awt.event.WindowAdapter;
  16. import java.awt.event.WindowEvent;
  17. import javax.swing.ImageIcon;
  18.  
  19. import javax.swing.JFrame;
  20. import javax.swing.JLabel;
  21. import javax.swing.JPanel;
  22. import javax.swing.SwingUtilities;
  23. import javax.swing.Timer;
  24.  
  25. class SpriteSheetManager {
  26.  
  27. private BufferedImage spriteSheet;
  28. private Image sprite;
  29. private int sprite_width;
  30. private int sprite_height;
  31. private int spritesheet_width;
  32. private int spritesheet_height;
  33. private int x = 0;
  34. private int y = 0;
  35. private int maxNum = 0;
  36. private long runningTime = 0;
  37.  
  38. public SpriteSheetManager() {
  39. spriteSheet = null;
  40. }
  41.  
  42. public SpriteSheetManager(String file) {
  43. setSpriteSheet(file);
  44. }
  45.  
  46. public void setSpriteSheet(String file){
  47. try {
  48. spriteSheet = ImageIO.read(new File("images/"+file)); //ImageIO.read(new URL("http://s...content-available-to-author-only...g.org/vso6oed91/spritesheet.png"));
  49. } catch (IOException e) {
  50. e.printStackTrace();
  51. }
  52. }
  53.  
  54. public void setSpriteSheetDimensions(int w, int h){
  55. spritesheet_width = w;
  56. spritesheet_height = h;
  57. }
  58.  
  59. public void setSpriteDimensions(int w, int h){
  60. sprite_width = w;
  61. sprite_height = h;
  62. }
  63.  
  64. public void setNumberOfSprites(){
  65. maxNum+= (spritesheet_height/sprite_height) * (spritesheet_width/sprite_width);
  66. System.out.println(maxNum);
  67. }
  68.  
  69. public BufferedImage getSpriteSheet(){
  70. return spriteSheet;
  71. }
  72.  
  73. public Image getSprite(int num){
  74. System.out.println(num);
  75. if( (x*sprite_width) > (spritesheet_width - sprite_width) ){
  76. x = 0; y++;
  77. System.out.println("x = "+x+" y = "+y);
  78. }
  79. if(num%maxNum == 0 && num != 0){x=0; y=0;}
  80. sprite = spriteSheet.getSubimage(x*sprite_width, y*sprite_height, sprite_width, sprite_height);
  81. x++;
  82. return sprite;
  83. }
  84. }
  85.  
  86. class Ideone {
  87.  
  88. public static void main(String[] args) {
  89. SwingUtilities.invokeLater(new Runnable(){
  90. public void run() {
  91. new TestSpriteSheet();
  92. }
  93. });
  94. }
  95.  
  96. }
  97.  
  98. class TestSpriteSheet extends JFrame{
  99.  
  100. private static final long serialVersionUID = 1L;
  101. private SpriteSheetManager ss;
  102. private ImageIcon img;
  103. private JLabel lbl;
  104. private Graphics g = getGraphics();
  105. private Timer t;
  106. private long runningTime = 0;
  107.  
  108. public TestSpriteSheet(){
  109. super("Testing SpriteSheets");
  110. setSize(200,200);
  111. setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  112. setResizable(false);
  113. setLayout(new BorderLayout());
  114. addWindowListener(new WindowAdapter() {
  115. public void windowClosing(WindowEvent windowEvent){
  116. System.exit(0);
  117. }
  118. });
  119.  
  120. ss = new SpriteSheetManager("spritesheet.png");
  121. ss.setSpriteSheetDimensions(321,381);
  122. ss.setSpriteDimensions(107,127);
  123.  
  124. add(new PanelSprite(this, ss));
  125. this.setVisible(true);
  126. }
  127. }
  128.  
  129. class PanelSprite extends JPanel{
  130.  
  131. private long runningTime = 0;
  132. private int fps = 24;
  133. private boolean stop = false;
  134. private SpriteSheetManager ss;
  135. private TestSpriteSheet temp;
  136. private int num = 0;
  137.  
  138. public PanelSprite(TestSpriteSheet test, SpriteSheetManager sm){
  139. ss = sm;
  140. temp = test;
  141. setSize(180,180);
  142. setLayout(new BorderLayout());
  143. init();
  144. }
  145.  
  146. public void paintComponent(Graphics g){
  147. super.paintComponent(g);
  148. long time = 50000;
  149. animate_with_gfx(g, time);
  150. if(runningTime <= time){
  151. num++;
  152. }
  153. }
  154.  
  155. public void init(){
  156. Timer t = new Timer((int)(1000/fps), new ActionListener() {
  157. public void actionPerformed(ActionEvent e) {
  158. if(!stop) {
  159. repaint();
  160. } else {
  161. ((Timer)e.getSource()).stop();
  162. }
  163. }
  164. });
  165. t.setRepeats(true);
  166. t.setDelay((int)(1000/fps));
  167. t.start();
  168. }
  169.  
  170. public void animate_with_gfx(Graphics g, long time){
  171. if(runningTime <= time){
  172. try {
  173. //System.out.println(runningTime); //Checking if this part works
  174. g.drawImage(ss.getSprite(num), 40, 40, null);
  175. runningTime+=(1000/fps);
  176. }catch (Exception ex) {
  177. ex.printStackTrace();
  178. }
  179. }
  180. else{
  181. stop = true;
  182. }
  183. }
  184. }
  185.  
Success #stdin #stdout #stderr 0.1s 382016KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Exception in thread "AWT-EventQueue-0" java.awt.HeadlessException: 
No X11 DISPLAY variable was set, but this program performed an operation which requires it.
	at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:207)
	at java.awt.Window.<init>(Window.java:535)
	at java.awt.Frame.<init>(Frame.java:420)
	at javax.swing.JFrame.<init>(JFrame.java:224)
	at TestSpriteSheet.<init>(Main.java:109)
	at Ideone$1.run(Main.java:91)
	at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
	at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:733)
	at java.awt.EventQueue.access$200(EventQueue.java:103)
	at java.awt.EventQueue$3.run(EventQueue.java:694)
	at java.awt.EventQueue$3.run(EventQueue.java:692)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:703)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)