📄 gamescreen.java
字号:
import java.applet.*;
import java.awt.*;
import java.util.Vector;
public abstract class GameScreen
{
//保存Applet对象
private GameApplet currentApplet;
//保存屏幕的位置
private Rectangle screenSize;
//是一个内存缓存图片,保存当前屏幕的背景
private Image gameScreenImage;
private Graphics gameScreenGraphics;
//保存当前精灵对象的集合
private Vector sprites;
//保存删除精灵对象的集合
private Vector removedSprites;
//默认的构造函数
private GameScreen() {}
//构造函数
public GameScreen(GameApplet applet)
{
currentApplet = applet;
gameScreenImage = applet.createImage(applet.getWidth(), applet.getHeight());
gameScreenGraphics = gameScreenImage.getGraphics();
screenSize = new Rectangle(0, 0, applet.getWidth(), applet.getHeight());
sprites = new Vector();
removedSprites = new Vector();
}
//初始化背景
public void initBackground()
{
gameScreenGraphics.setColor(Color.white);
gameScreenGraphics.fillRect(0, 0, gameScreenImage.getWidth(currentApplet), gameScreenImage.getHeight(currentApplet));
}
//得到Applet对象
public final GameApplet getGameApplet()
{
return currentApplet;
}
//将图片增加到背景中,注意:主Applet有一个内存缓存图片对象,每个屏幕也有一个内存缓存图片对象
public final void addToBackground(Image img, Point p)
{
gameScreenGraphics.drawImage(img, p.x, p.y, currentApplet);
currentApplet.getBackgroundGraphics().drawImage(img, p.x, p.y, currentApplet);
}
//将图片增加到背景中,同时指定能影响的区域
public final void addToBackground(Image img, Point p, Rectangle clipArea)
{
gameScreenGraphics.setClip(clipArea);
gameScreenGraphics.drawImage(img, p.x, p.y, currentApplet);
gameScreenGraphics.setClip(screenSize);
currentApplet.getBackgroundGraphics().setClip(clipArea);
currentApplet.getBackgroundGraphics().drawImage(img, p.x, p.y, currentApplet);
currentApplet.getBackgroundGraphics().setClip(screenSize);
}
//增加一个精灵对象
public final void addSprite(Sprite sprite)
{
sprites.removeElement(sprite);
sprites.addElement(sprite);
}
//删除一个精灵对象
public final void removeSprite(Sprite sprite)
{
if (sprites.removeElement(sprite))
{
sprite.forceRefresh();
removedSprites.addElement(sprite);
}
}
//将精灵放置到最前面
public final void spriteToBack(Sprite sprite)
{
sprites.removeElement(sprite);
sprites.insertElementAt(sprite,0);
}
//将精灵放置到最后面
public final void spriteToFront(Sprite sprite)
{
sprites.removeElement(sprite);
sprites.addElement(sprite);
}
//刷新本屏幕中的所有精灵,被删除的精灵只有最后一次刷新后,才真正的删除
//所谓刷新,是从Applet的背景图片中清除已画的精灵
//即在重新显示前,要从内存缓存图片中清除原来显示的精灵
public final void refreshAll()
{
Graphics output = currentApplet.getBackgroundGraphics();
for (int i=0 ; i<sprites.size() ; i++)
{
output.setClip(screenSize);
((Sprite)sprites.elementAt(i)).refresh(gameScreenImage, output, currentApplet);
}
if (removedSprites.size() != 0)
{
for (int i=0 ; i<removedSprites.size() ; i++)
{
output.setClip(screenSize);
((Sprite)removedSprites.elementAt(i)).refresh(gameScreenImage, output, currentApplet);
}
removedSprites = new Vector();
}
output.setClip(screenSize);
}
//重新将所有的精灵画到内存缓存图片中
public final void paintAll()
{
Graphics output = currentApplet.getBackgroundGraphics();
for (int i=0 ; i<sprites.size() ; i++)
{
output.setClip(screenSize);
((Sprite)sprites.elementAt(i)).paint(output, currentApplet);
}
output.setClip(screenSize);
}
public abstract void play(int[] keyCodes, Point mouseCoord, boolean leftButton, boolean rightButton);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -