isoscene.java
来自「java learn PPT java learn PPT java learn」· Java 代码 · 共 134 行
JAVA
134 行
import java.awt.*;
import java.awt.geom.*;
import java.util.*;
import java.awt.event.*;
public class IsoScene extends Scene implements KeyListener
{
// 背景Actor2D对象数组
protected Vector actors;
// 画面旋转的参照物
protected Actor2D anchor;
// 参照物当前位置
protected Vector2D anchorPos;
public IsoScene(Rectangle2D v)
{
super(v, v);
actors = new Vector();
anchor = null;
anchorPos = null;
}
public void add(Actor2D a, boolean isAnchor)
{
// 只有在Acotr不是参照物的情况下才把它加入到数组中;
//参照物将另外处理
if(! isAnchor)
{
actors.add(a);
}
else
{
// 设置参考物和它的位置
anchor = a;
anchorPos = new Vector2D.Double(anchor.getX(), anchor.getY());
}
}
public void update()
{
// 更新参照物
anchor.update();
// 根据参照物的位置更新画面剩余部分
// 只有在参照物在移动的情况下才需要做更新
if(! anchor.getVel().equals(Vector2D.ZERO_VECTOR))
{
double x = 0.0;
double y = 0.0;
x = -anchor.getVel().getX();
y = -anchor.getVel().getY();
for (Enumeration e = actors.elements(); e.hasMoreElements() ;)
{
((Actor2D) e.nextElement()).moveBy(x, y);
}
}
for (Enumeration e = actors.elements(); e.hasMoreElements() ;)
{
((Actor2D) e.nextElement()).update();
}
}
public void paint(Graphics2D g2d)
{
// 绘制参照物以外的组件
for (Enumeration e = actors.elements(); e.hasMoreElements() ;)
{
((Actor2D) e.nextElement()).paint(g2d);
}
// 绘制参照物
anchor.paint(g2d);
}
public void keyTyped(KeyEvent e)
{
}
public void keyPressed(KeyEvent e)
{
if(anchor == null) return;
// 给参照物一个大小为1/4砖块的恒定速度
switch(e.getKeyCode())
{
case KeyEvent.VK_UP:
anchor.setVel(-IsoTileGroup.TILE_WIDTH/4, -IsoTileGroup.TILE_HEIGHT/4);
break;
case KeyEvent.VK_DOWN:
anchor.setVel(+IsoTileGroup.TILE_WIDTH/4, +IsoTileGroup.TILE_HEIGHT/4);
break;
case KeyEvent.VK_LEFT:
anchor.setVel(-IsoTileGroup.TILE_WIDTH/4, +IsoTileGroup.TILE_HEIGHT/4);
break;
case KeyEvent.VK_RIGHT:
anchor.setVel(+IsoTileGroup.TILE_WIDTH/4, -IsoTileGroup.TILE_HEIGHT/4);
break;
default: break;
}
}
public void keyReleased(KeyEvent e)
{
if(anchor == null) return;
// 只要键被松开,马上停止移动参照物
switch(e.getKeyCode())
{
case KeyEvent.VK_UP:
case KeyEvent.VK_DOWN:
case KeyEvent.VK_LEFT:
case KeyEvent.VK_RIGHT:
anchor.setVel(0, 0);
break;
default: break;
}
}
} // IsoScene
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?