자바 애플릿에서 사운드와 이미지를 사용하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/624181

  •  05-07-2019
  •  | 
  •  

문제

질문 1 : 사운드 및 이미지 파일을 가장 쉽게로드 할 수 있도록 프로젝트를 어떻게 구성해야합니까? 지금은 폴더가 있습니다.

C:\java\pacman

하위 디렉토리와 함께

C:\java\pacman\src

모든 코드를 포함하고 있습니다

C:\java\pacman\assets

이미지와 .wav 파일을 포함합니다. 이것이 최고의 구조입니까, 아니면 자산을 다른 곳에 넣어야합니까?

Question 2:

전체 경로를 사용하지 않고 이미지/사운드를 참조하는 가장 좋은 방법은 무엇입니까? C:\java\pacman\assets\something.png 그들에게? 내가 사용하는 경우 getCodeBase() 함수는 참조하는 것 같습니다 C:\java\pacman\bin 대신에 C:\java\pacman\.

나는 항아리에서 애플릿을 컴파일 할 때 와이클립스를 통해 애플릿을 테스트 할 때 지금 당장 애플릿을 컴파일 할 때 자동으로 작동하는 기능/클래스를 사용하고 싶습니다.

질문 3 : 이미지/사운드를 어떻게로드해야합니까? 이것이 제가 지금 사용하고있는 것입니다.

1) 일반 이미지 :

import java.awt.Image;

public Image getImg(String file)
{
          //imgDir in this case is a hardcoded string containing
          //"C:\\java\\pacman\\assets\\"
    file=imgDir + file;
    return new ImageIcon(file).getImage();
}

이 기능에서 반환 된 이미지는 drawImage 방법의 방법 Graphics 수업 paint 애플릿의 방법.

2) 스프라이트 시트에서 서브 이미지 및로드 스프라이트를 얻는 데 사용되는 버퍼링 이미지의 경우 :

public BufferedImage getSheet() throws IOException
{
    return ImageIO.read(new File(img.getPath("pacman-sprites.png")));

}

나중:

public void loadSprites()
{
    BufferedImage sheet;
    try
    {
        sheet=getSheet();

        redGhost.setNormalImg(sheet.getSubimage(0, 60, 20, 20));
        redGhost.setUpImg(sheet.getSubimage(0, 60, 20, 20));
        redGhost.setDownImg(sheet.getSubimage(30, 60, 20, 20));
        redGhost.setLeftImg(sheet.getSubimage(30, 60, 20, 20));
        redGhost.setRightImg(sheet.getSubimage(60, 60, 20, 20));    
    }
    catch (IOException e)
    {
        System.out.println("Couldnt open file!");
        System.out.println(e.getLocalizedMessage());
    }   
}

3) 사운드 파일의 경우 :

import sun.audio.*;
import java.io.*;
public synchronized void play() {
    try {
            InputStream in = new FileInputStream(filename);
            AudioStream as = new AudioStream(in);
            AudioPlayer.player.start(as); 

    } catch (IOException e) {
            e.printStackTrace();
    }

}
도움이 되었습니까?

해결책

클래스 경로에 놓고 (.class 파일로 배치) 클래스 로더.

자바:

package mypackage;

public class MyClass {
    public static void main(String[] args) {
        java.net.URL url = MyClass.class.getResource("/mypackage/image.gif");
        System.out.println(url);
    }
}

콘솔 출력 :

C:\resource>dir /b /s
C:\resource\bin
C:\resource\src
C:\resource\bin\mypackage
C:\resource\bin\mypackage\image.gif
C:\resource\bin\mypackage\MyClass.class
C:\resource\src\mypackage
C:\resource\src\mypackage\MyClass.java

C:\resource>java -cp bin mypackage.MyClass
file:/C:/resource/bin/mypackage/image.gif
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top