下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

如何运用java程序设计创建移动图形

作者:课课家教育     来源: http://www.kokojia.com点击数:1010发布时间: 2018-11-22 09:13:51

标签: JAVA游戏设计JAVA游戏制作

大神带你学编程,欢迎选课

  那么这一节我们就来学习一下,如何运用java程序设计创建移动图形,希望大家能够好好学习这个课程,并且能够在这个基础上进行修改代码。

  在上一节的教程中,我们学会了基本绘图方法,基本思路是先创建一个窗体框架(Frame),然后创建一个面版(Panel),在面版中画图,再将面版装入窗体中。上节我们画的是静态的图片,这一节我们主要练习移动图形。

  学习目标:1.学会游戏基本框架

  2.学会键盘控制代码

  一.物体的运动方式。

  我们先回顾MyEclipse创建基本项目运行,并画一个蓝色的小球。

  1.新建一个项目,假设名称是pp,并在里面新建一个类pp.

如何运用java程序设计创建移动图形_JAVA游戏设计_JAVA_游戏制作_课课家

我们先回顾MyEclipse创建基本项目运行,并画一个蓝色的小球。    1.新建一个项目,假设名称是pp,并在里面新建一个类pp.

我们先回顾MyEclipse创建基本项目运行,并画一个蓝色的小球。    1.新建一个项目,假设名称是pp,并在里面新建一个类pp.

  在pp类中代码如下:

import java.awt.*;

import java.awt.event.*;

 

public class pp{

 

    public pp() {

        Frame app = new Frame("DrawBall2");

        //监视关闭窗体事件

        app.addWindowListener(new WindowAdapter() {

            public void windowClosing(WindowEvent e) {

  1. exit(0);

            }

        });

        app.setLocation(100, 100);

        MyPanel drawB = new MyPanel(); //实例化MyPanel对象

        app.add(drawB, BorderLayout.CENTER); //在窗体中间显示画版

      

        app.pack();//运行app中的pack方法,动态调整frame的大小,使frame中的组件都可见

        app.setVisible(true);

        drawB.gameStart (); //运行app中的gameStart方法

    }

 

    /**

     * @param args the command line arguments

     */

    public static void main(String[] args) {

        new pp();

    // TODO code application logic here

    }

}

 

 新建一个类,类名为MyPanel, 代码为:

import java.awt.*;

import java.awt.image.*;

import java.util.*;

 

/**

 *

 * @author Administrator

 */

public class MyPanel extends Panel implements Runnable {

    private int x; //这里定义变量

    private int y;

    private int diameter;

    private int width;

    private int heigth;

    private Image im;

    private Graphics dbg;

    private Thread gamethread;

    private static final int FPS=50;

    

    public MyPanel() {

        x=50;//下面给变量赋初值

        y=50;

        diameter=100;

        width=600; //窗口的宽度

        heigth=500;//窗口的高度

        setBackground(Color.pink);//设置画版背景色

        setPreferredSize(new Dimension(width, heigth));//设置组件的大小

 

    }

 

 

    public void gamePaint() { //前屏绘制

        Graphics g;

        try {

            g = this.getGraphics(); //获取当前屏幕的Graphics对象

            if (g != null && im != null) {

                g.drawImage(im, 0, 0, null);//将图像缓冲区中的内容复制到前屏缓冲区,显示出来

            }

            g.dispose();//释放当前屏幕的Graphics对象

        } catch (Exception e) {

        }

    }

 

    public void gameRender() { //离屏绘制

        if (im == null) {

            im = createImage(width, heigth);

            if (im == null) {

  1. out.println("im is null");

            } else {

                dbg = im.getGraphics();

            }

        }

        dbg.setColor(Color.pink);//这里要和背景色一致

        dbg.fillRect(0, 0, width, heigth);//用底色矩形填充画版,擦去图案

//这里加上画游戏的初始图形

        dbg.setColor(Color.blue);

        dbg.fillOval(x, y, diameter, diameter); //画出椭圆

    }

 

public void gameUpdate() { //更新游戏逻辑

//这里加上重复的代码

    x++; //让小球向右跑

    }

 

    

    public void run() {

    long t1,t2,dt,sleepTime;  

        long period=1000/FPS;  //计算每一次循环需要的执行时间,单位毫秒

        t1=System.nanoTime();  //保存游戏循环执行前的系统时间,单位纳秒

        while(true){

        gameUpdate();

        gameRender();

        gamePaint();

        t2= System.nanoTime() ; //游戏循环执行后的系统时间,单位纳秒

        dt=(t2-t1)/1000000L;  //本次循环实际花费的时间,并转换为毫秒

        sleepTime = period - dt;//计算本次循环剩余的时间,单位毫秒

        if(sleepTime<=0)        //防止sleepTime值为负数

            sleepTime=2;

            try {     

  1. sleep(sleepTime); //让线程休眠,由sleepTime值决定

           } catch (InterruptedException ex) { }

              t1 = System.nanoTime();  //重新获取当前系统时间

  1. out.println("sleepTime is:"+sleepTime);

        }

 

   }

    public void gameStart(){

        gamethread = new Thread(this);

        gamethread.start();

   }

}

对于上面的这两个代码只是一个框架,大家可以先运行一下,试一下游戏,然后再在这个基础上进行修改。

       小编结语:其实,对于这个代码来说是非常简单的,那么后续我会给大家在这个JAVA的游戏设计的基础上,添加一些有趣的代码,对游戏进行修改,例如说:在图面上,画上两个小球,一个红色小球,起始位置在(50,50),半径80,向右运动等等,感谢大家的支持。

赞(20)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程