📄 images.java
字号:
package com.lovo.pig.util;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.image.CropImageFilter;
import java.awt.image.FilteredImageSource;
import java.net.URL;
import javax.swing.JFrame;
public class Images extends JFrame {
private static final long serialVersionUID = 1L;
private Image imgLogo;//Logo图
private Image imgBackground;//背景图
private Image imgAward;//随机从上面往下掉的奖励物品
private Image imgUmbrella;//承载奖励物品的伞
private Image imgCord;//绳子
private Image imgBullet;//子弹
private Image[] imgPigs;//猪图片
private Image[] imgWolves;//狼
private Image[] imgGears;//轮子图片
private Image[] imgCrow;//乌鸦图片
private Image[] imgHitWolf;//子弹击中狼的图片
private Image[] imgBalloons;//所有气球图片
private Image imgMenuStage;//菜单界面背景图
private Image[] imgMenu;//菜单组图
private Image imgHelp;//帮助界面图形
private Image imgTopScore;//排行榜背景
private Image imgOptionBk;//设置窗口装饰图
private MediaTracker mt;
private Toolkit tk = this.getToolkit();
/**
* 单例模式
*/
private static Images images = null;
private Images() {
mt = new MediaTracker(this);
loadImage();
}
public static synchronized Images getImages()
{
if(images == null)
{
images = new Images();
}
return images;
}
/**
* 加载图片
*/
private void loadImage(){
imgLogo = tk.getImage(getURL("logo.png"));//Logo
imgBackground = tk.getImage(getURL("background.jpg"));//背景
imgAward = tk.getImage(getURL("award.gif"));//奖励
imgUmbrella = tk.getImage(getURL("umbrella.gif"));//伞
imgCord = tk.getImage(getURL("cord.jpg"));//绳子
imgBullet = tk.getImage(getURL("bullet.gif"));//子弹
imgMenuStage = tk.getImage(getURL("menustage.jpg"));//菜单界面背景
imgHelp = tk.getImage(getURL("helppig.jpg"));//帮助
imgTopScore = tk.getImage(getURL("topscore.jpg"));//排行榜背景
imgOptionBk = tk.getImage(getURL("optionbk.gif"));//设置窗口装饰图
//未切割的猪图片
Image imgPigRaw = tk.getImage(getURL("pig.gif"));
//未切割的狼图片
Image imgWolvesRaw = tk.getImage(getURL("wolf.gif"));
//未切割的轮子图片
Image imgGearRaw = tk.getImage(getURL("gear.gif"));
//未切割的乌鸦图片
Image imgCrowRawRight = tk.getImage(getURL("crowright.png"));
Image imgCrowRawLeft = tk.getImage(getURL("crowleft.png"));
Image imgCrowRawHitted = tk.getImage(getURL("crowhit.png"));
//子弹击中狼未切割组图
Image imgHitWolfRaw = tk.getImage(getURL("hitwolf.png"));
//气球爆开的图片,未切割
Image imgBrokenBalloonsRaw = tk.getImage(getURL("balloon.png"));
Image[] imgBrokenBalloon;//气球爆开的图片数组
//不断被吹大的气球,未切割
Image imgBalloonBlowRaw = tk.getImage(getURL("balloonblow.png"));
Image[] imgBalloonBlow;//不断被吹大的气球图片数组
//未切割的菜单图片
Image imgMenuRaw = tk.getImage(getURL("menu.gif"));
mt.addImage(imgLogo, 0);
mt.addImage(imgBackground, 0);
mt.addImage(imgAward, 0);
mt.addImage(imgUmbrella, 0);
mt.addImage(imgCord, 0);
mt.addImage(imgBullet, 0);
mt.addImage(imgPigRaw, 0);
mt.addImage(imgWolvesRaw, 0);
mt.addImage(imgGearRaw, 0);
mt.addImage(imgCrowRawRight, 0);
mt.addImage(imgCrowRawLeft, 0);
mt.addImage(imgCrowRawHitted, 0);
mt.addImage(imgHitWolfRaw, 0);
mt.addImage(imgBrokenBalloonsRaw, 0);
mt.addImage(imgBalloonBlowRaw, 0);
mt.addImage(imgMenuStage, 0);
mt.addImage(imgMenuRaw, 0);
mt.addImage(imgHelp, 0);
mt.addImage(imgTopScore, 0);
mt.addImage(imgOptionBk, 0);
/**
* 等待加载所有原始图片.
* 下面的try-catch必须有,否则报异常
* 因为,切割时图片还未加载完成,但不会报空指针(文件不存在时才报空指针),
* 这时取图片宽度getWidth(),因宽度未知,返回-1,
* -1除以整型数frameWidth,等于零,
* 用零去参与切割运算,就会出异常:ArithmeticException: / by zero
*/
try {
mt.waitForAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
//cut猪
imgPigs = this.cutImage(imgPigRaw, 10,100, 83);
//cut狼
imgWolves = cutImage(imgWolvesRaw, 14,125, 125);
//cut轮子
imgGears = this.cutImage(imgGearRaw, 2,103, 59);
//cut乌鸦,然后将所有的乌鸦图片放到一个数组中
Image[] crowRight = this.cutImage(imgCrowRawRight, 10,100, 89);
Image[] crowLeft = this.cutImage(imgCrowRawLeft, 10,100, 89);
Image[] crowHitted = this.cutImage(imgCrowRawHitted, 4,123, 89);
imgCrow = new Image[24];
int j = 0;
for(int i = 0;i < crowRight.length;i++){
imgCrow[j] = crowRight[i];
j++;
}
for(int i = 0;i < crowHitted.length;i++){
imgCrow[j] = crowHitted[i];
j++;
}
for(int i = 0;i < crowLeft.length;i++){
imgCrow[j] = crowLeft[i];
j++;
}
//cut子弹击中狼图片
imgHitWolf = this.cutImage(imgHitWolfRaw, 3,44, 52);
//cut爆开的气球
imgBrokenBalloon = this.cutImage(imgBrokenBalloonsRaw, 5,116, 92);
//cut不断被吹大的气球
imgBalloonBlow = this.cutImage(imgBalloonBlowRaw, 5,58, 38);
//将所有气球图片放到一个数组中
int index;
imgBalloons = new Image[imgBalloonBlow.length + imgBrokenBalloon.length ];
for( index = 0;index < imgBalloonBlow.length;index++){
imgBalloons[index] = imgBalloonBlow[index];
}
for(int i = 0;i < imgBrokenBalloon.length;i++){
imgBalloons[index] = imgBrokenBalloon[i];
index ++;
}
//cut菜单
imgMenu = this.cutImage(imgMenuRaw, 8,200, 100);
//加载所有已切割的图片
for (int i = 0; i < imgPigs.length; i++) {
mt.addImage(imgPigs[i], 0);
}
for (int i = 0; i < imgGears.length; i++) {
mt.addImage(imgGears[i], 0);
}
for (int i = 0; i < imgWolves.length; i++) {
mt.addImage(imgWolves[i], 0);
}
for (int i = 0; i < imgBrokenBalloon.length; i++) {
mt.addImage(imgBrokenBalloon[i], 0);
}
for(int i = 0; i < imgGears.length; i++){
mt.addImage(imgGears[i], 0);
}
for(int i = 0;i < imgCrow.length;i++){
mt.addImage(imgCrow[i], 0);
}
for(int i = 0;i < imgHitWolf.length;i++){
mt.addImage(imgHitWolf[i], 0);
}
for(int i = 0;i < imgBalloons.length;i++){
mt.addImage( imgBalloons[i], 0);
}
try {
mt.waitForAll();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
/**
* 读取文件
* @param fileName
* @return
*/
private URL getURL(String fileName){
URL url = null;
try{
url = this.getClass().getResource("../image/"+fileName);
}catch(Exception e){
e.printStackTrace();
}
return url;
}
/**
* 切割图片
*
* imgRaw:未切割的图片
* numOfFrame:图片帧数量
* frameWidth:帧宽度
* frameHeight:帧高度
*
* frameX = (frameNumber % columns) * width;
* frameY = (frameNumber / columns) * height;
*/
private Image[] cutImage(Image imgRaw, int numOfFrame, int frameWidth,
int frameHeight) {
//用来装已切割图片的数组
Image[] imgCutted = new Image[numOfFrame];
//图片帧列数
int columns= imgRaw.getWidth(null) / frameWidth;
//切割
for (int i = 0; i < numOfFrame; i++) {
int frameX = (i % columns)* frameWidth ;
int frameY = (i / columns)*frameHeight;
imgCutted[i] = this.createImage(
new FilteredImageSource(
imgRaw.getSource(),
new CropImageFilter(frameX, frameY, frameWidth, frameHeight)
)
);
}
//返回切割后的图片的数组
return imgCutted;
}
public Image getImgBackground() {
return imgBackground;
}
public Image getImgAward() {
return imgAward;
}
public Image getImgBullet() {
return imgBullet;
}
public Image getImgCord() {
return imgCord;
}
public Image getImgUmbrella() {
return imgUmbrella;
}
public Image[] getImgWolves() {
return imgWolves;
}
public Image[] getImgPigs() {
return imgPigs;
}
public Image[] getImgGears() {
return imgGears;
}
public Image[] getImgCrow() {
return imgCrow;
}
public Image[] getImgHitWolf() {
return imgHitWolf;
}
public Image[] getImgBalloons() {
return imgBalloons;
}
public Image getImgLogo() {
return imgLogo;
}
public Image[] getImgMenu() {
return imgMenu;
}
public Image getImgMenuStage() {
return imgMenuStage;
}
public Image getImgHelp() {
return imgHelp;
}
public Image getImgTopScore() {
return imgTopScore;
}
public Image getImgOptionBk() {
return imgOptionBk;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -