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

你想利用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();
    }
 
}


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值