2016-05-20 11 views
-1

私はバッファリングされたイメージを使用してスプライトシートからスプライトをレンダリングしようとしていますが、イメージを呼び出してもコードが機能しないクラスから?バッファリングされたイメージを使用してスプライトをレンダリングする

コード:

package com.game.src.main; 

import java.awt.Canvas; 
import java.awt.Color; 
import java.awt.Dimension; 
import java.awt.Graphics; 
import java.awt.Image; 
import java.awt.event.KeyAdapter; 
import java.awt.event.KeyEvent; 
import java.awt.image.BufferStrategy; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 

import javax.imageio.ImageIO; 
import javax.swing.JFrame; 

public class Game extends Canvas implements Runnable { 

    private BufferedImage spriteSheet = null; 
    boolean sprite = false; 
    private BufferedImage sprite; 

    public void init(){ 
     BufferedImageLoader loader = new BufferedImageLoader(); 
     try{ 

      spriteSheet = loader.loadImage("/astronaut_sprite1.png"); 
     }catch(IOException e){ 
      e.printStackTrace(); 
     } 
} 

    private void render(){ 
     BufferStrategy bs = this.getBufferStrategy(); 
     if(bs == null){ 
      createBufferStrategy(3); 
      return; 

     } 

     if(sprite == true){ 
      g.drawImage(sprite, 0, 0, getWidth(), getHeight(), this); 
      System.out.println("True"); 
     } 

     g.dispose(); 
     bs.show(); 
} 

    public void keyPressed(KeyEvent e){ 
     int key = e.getKeyCode(); 

     if(key == KeyEvent.VK_1){ 
      sprite = true; 
     } 

} 

    public static void main(String args[]){ 
     Game game = new Game(); 

    public BufferedImage getSpriteSheet(){ 
     return spriteSheet; 
    } 



} 

私は(スプライト)を呼んでいるクラスがある:

package com.game.src.main; 

import java.awt.Graphics; 
import java.awt.image.BufferedImage; 

public class sprite{ 

    private double x; 
    private double y; 

    private BufferedImage sprite; 

    public sprite(x, y, Game game){ 

     SpriteSheet ss = new SpriteSheet(game.getSpriteSheet()); 

     sprite = ss.grabImage(3, 3, 32, 32); 
    } 

BufferedImageLoader:

package com.game.src.main; 

import java.awt.image.BufferedImage; 
import java.io.IOException; 

import javax.imageio.ImageIO; 

public class BufferedImageLoader { 

    private BufferedImage image; 

    public BufferedImage loadImage(String path) throws IOException{ 

     image = ImageIO.read(getClass().getResourceAsStream(path)); 
     return image; 

    } 

} 

答えて

1

使用ImageIO.read(new File("/astronaut_sprite1.png"));代わりのspriteSheet = loader.loadImage("/astronaut_sprite1.png");

あなたのフォルダ構造:

-src 
--com 
---m14x 
----game 
-----BufferedImageLoader.java 
-----Game.java 
-----SpriteSheet.java 
-res 
---sprite_sheet.png 

あなたBufferedImageLoaderクラス:

public class BufferedImageLoader { 
     private BufferedImage image; 

     public BufferedImage loadImage(String path) throws IOException{ 
      System.out.println("PATH = " + path); 
      File file = new File(path); 

      if (file.exists()) { 
       // First, make sure the path exists 
System.out.println("File exists!"); 

      } 
      if (file.isDirectory()) { 
       // This will tell you if it is a directory 
System.out.println("File is a directory!"); 

      } 
      if (file.isFile()) { 
       // Similarly, this will tell you if it's a file 
System.out.println("File has a path!"); 

      } 
      System.out.println("Trying to load image:"); 
      image = ImageIO.read(new File(path)); 

      //image = ImageIO.read(getClass().getResource(path)); 

      System.out.println("Image path found. Returning..."); 
      return image; 


     } 

    } 
+0

は私の更新を確認してください。あなたはBufferedImageLoaderクラスのコードを提供していませんでしたが、ImageIO.readが正常に動作することがわかりました。 –

+0

申し訳ありませんが、私はBufferedImageLoaderクラスを投稿しましたが、クラス内に既にImageIO.readが使用されています。私の質問は、私がそれを使用しても、私がスプライトシートから欲しいスプライトを呼び出すためにどのように使用するのですか? – LilKittens

+0

絶対イメージパスを指定する代わりにgetResourceAsStream(path)を使用しているので、リソースフォルダが正しいパスにあることを確認する必要があります。更新された答えをもう一度確認してください。 –

関連する問題