JAVA游戏设计核心类(初学者适用)

来源:互联网 发布:iphone故障检测软件 编辑:程序博客网 时间:2024/06/03 11:52

你想利用JAVA开发游戏?却不知道从何开始?

一个游戏通常以下元素组成
- 框架:游戏窗口
- 帆布渲染表面
- GameLoop渲染和更新方法
- 渲染方法绘图
- 更新的方法你的游戏这里的逻辑
- 鼠标和键盘输入KeyListener鼠标监听器MouseMotionListener添加到画布

下面是一个模板,你只需要添加你的代码在渲染(Graphics2D的G)和更新(INT deltaTime)方法。

You want to do a game and don't know where to start?

A game is usually compose of the following elements :

- Frame : The window of the game
- Canvas : The rendering surface
- GameLoop : Call the rendering and update methods
- Rendering method : All your drawing here
- Update method : All your game logic here
- Mouse and Key input : Add KeyListener, MouseListener and MouseMotionListener to the canvas

Here is a template that I use for my games. To make your own game, you just have to add your code in the render(Graphics2D g) and update(int deltaTime) methods.
 

import java.awt.Canvas;import java.awt.Dimension;import java.awt.Graphics2D;import java.awt.event.MouseAdapter;import java.awt.image.BufferStrategy; import javax.swing.JFrame;import javax.swing.JPanel;  public class Game implements Runnable{         final int WIDTH = 1000;    final int HEIGHT = 700;         JFrame frame;    Canvas canvas;    BufferStrategy bufferStrategy;         public Game(){        frame = new JFrame("Basic Game");                 JPanel panel = (JPanel) frame.getContentPane();        panel.setPreferredSize(new Dimension(WIDTH, HEIGHT));        panel.setLayout(null);                 canvas = new Canvas();        canvas.setBounds(0, 0, WIDTH, HEIGHT);        canvas.setIgnoreRepaint(true);                 panel.add(canvas);                 canvas.addMouseListener(new MouseControl());                 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        frame.pack();        frame.setResizable(false);        frame.setVisible(true);                 canvas.createBufferStrategy(2);        bufferStrategy = canvas.getBufferStrategy();                 canvas.requestFocus();    }                  private class MouseControl extends MouseAdapter{             }         long desiredFPS = 60;    long desiredDeltaLoop = (1000*1000*1000)/desiredFPS;         boolean running = true;         public void run(){                 long beginLoopTime;        long endLoopTime;        long currentUpdateTime = System.nanoTime();        long lastUpdateTime;        long deltaLoop;                 while(running){            beginLoopTime = System.nanoTime();                         render();                         lastUpdateTime = currentUpdateTime;            currentUpdateTime = System.nanoTime();            update((int) ((currentUpdateTime - lastUpdateTime)/(1000*1000)));                         endLoopTime = System.nanoTime();            deltaLoop = endLoopTime - beginLoopTime;                         if(deltaLoop > desiredDeltaLoop){                //Do nothing. We are already late.            }else{                try{                    Thread.sleep((desiredDeltaLoop - deltaLoop)/(1000*1000));                }catch(InterruptedException e){                    //Do nothing                }            }        }    }         private void render() {        Graphics2D g = (Graphics2D) bufferStrategy.getDrawGraphics();        g.clearRect(0, 0, WIDTH, HEIGHT);        render(g);        g.dispose();        bufferStrategy.show();    }         //TESTING    private double x = 0;         /**     * Rewrite this method for your game     */    protected void update(int deltaTime){        x += deltaTime * 0.2;        while(x > 500){            x -= 500;        }    }         /**     * Rewrite this method for your game     */    protected void render(Graphics2D g){        g.fillRect((int)x, 0, 200, 200);    }         public static void main(String [] args){        Game ex = new Game();        new Thread(ex).start();    } }


 

原创粉丝点击