mypanel.java

来自「用java编写的类似于cs游戏的游戏源码」· Java 代码 · 共 117 行

JAVA
117
字号
package org.loon.chair.example6;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;

import javax.swing.JPanel;
/**
 * 
 * @author chenpeng
 * @email  ceponline@yahoo.com.cn
 * 
 * Loon Framework in Game 
 *
 */
public class MyPanel extends JPanel implements KeyListener, Common {
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	 //窗体的宽与高,自Example6开始公有化,可理解为屏幕大小
    public static final int WIDTH = 480;
    public static final int HEIGHT = 480;
    //游戏地图
    private GameMap map;
    //角色控制
    private GameHandle role;

    public MyPanel() {
    	
    	 //设定初始构造时面板大小
        setPreferredSize(new Dimension(WIDTH, HEIGHT));

        //设定焦点在本窗体并付与监听对象
        setFocusable(true);
        addKeyListener(this);
        
        //获得地图实例
        map = new GameMap(this);
        //获得角色实例
        role = new GameHandle(1, 1, "image/role.gif", map, this);
    }

    public void paintComponent(Graphics g) {
        super.paintComponent(g);

        // X偏移位置
        int offsetX = MyPanel.WIDTH / 2 - role.getX() * CS;
        //计算X偏移量
        offsetX = Math.min(offsetX, 0);
        offsetX = Math.max(offsetX, MyPanel.WIDTH - GameMap.WIDTH);
       
        // Y偏移位置
        int offsetY = MyPanel.HEIGHT / 2 - role.getY() * CS;
        //计算Y偏移量
        offsetY = Math.min(offsetY, 0);
        offsetY = Math.max(offsetY, MyPanel.HEIGHT - GameMap.HEIGHT);
        //System.out.print(role.getX()+":"+role.getY());
        //绘制可偏移位置的地图
        map.draw(g, offsetX, offsetY);

        //绘制可偏移位置的角色
        role.draw(g, offsetX, offsetY);
    }

    public void keyPressed(KeyEvent e) {
        //获得按键编号
         int keyCode = e.getKeyCode();
         
         //通过转换器匹配事件
         switch (keyCode) {
             //当触发Left时
             case KeyEvent.VK_LEFT :
                 //进行left操作,仅符合move()中[规范]时执行,以下相同
             	role.move(LEFT);
                 break;
             //当触发Right时      
             case KeyEvent.VK_RIGHT :
             
            	 role.move(RIGHT);
                 break;
             //当触发Up时    
             case KeyEvent.VK_UP :
                 
            	 role.move(UP);
                 break;
             //当触发Down时    
             case KeyEvent.VK_DOWN :
               
            	 role.move(DOWN);
                 break;
         }

         // 重新绘制窗体图像
         // PS:在此例程中,仅进行了角色的简单移动处理
         // ,关于避免闪烁及限制活动区域问题,请见后续
         // 案例。
         
         repaint();
     }

	public void keyReleased(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}

	public void keyTyped(KeyEvent e) {
		// TODO Auto-generated method stub
		
	}


}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?