Как использовать звук и изображения в Java-апплете?

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

  •  05-07-2019
  •  | 
  •  

Вопрос

Вопрос 1:Как мне следует структурировать свой проект, чтобы файлы звука и изображений можно было загружать наиболее легко?Прямо сейчас у меня есть папка:

C:\java\pacman

с подкаталогом

C:\java\pacman\src

содержащий весь код, и

C:\java\pacman\assets

содержащий изображения и .файлы формата wav.Является ли это лучшей структурой или мне следует поместить активы куда-нибудь еще?

Вопрос 2:

Каков наилучший способ ссылаться на изображения / звуки без использования полного пути, например C:\java\pacman\assets\something.png для них?Если я использую getCodeBase() функция, по-видимому, относится к C:\java\pacman\bin вместо того , чтобы C:\java\pacman\.

Я хочу использовать такую функцию / класс, которая работала бы автоматически при компиляции апплета в jar, а также прямо сейчас, когда я тестирую апплет через eclipse.

Вопрос 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();
    }

}
Это было полезно?

Решение

Поместите их в свой classpath (поместите их вместе с вашими файлами .class) и загрузите их с помощью Загрузчик классов.

Java - Язык:

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