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 + -
显示快捷键?