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

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

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

2.学会键盘控制代码

一.物体的运动方式。

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

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

在pp类中代码如下:

importjava.awt.*;

importjava.awt.event.*;

publicclasspp{

publicpp() {

Frame app =newFrame("DrawBall2");

//监视关闭窗体事件

app.addWindowListener(newWindowAdapter() {

publicvoidwindowClosing(WindowEvent e) {

exit(0);

}

});

app.setLocation(100, 100);

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

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

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

app.setVisible(true);

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

}

/**

*@paramargs the command line arguments

*/

publicstaticvoidmain(String[] args) {

newpp();

//TODOcode application logic here

}

}

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

importjava.awt.*;

importjava.awt.image.*;

importjava.util.*;

/**

*

*@authorAdministrator

*/

publicclassMyPanelextendsPanelimplementsRunnable {

privateintx;//这里定义变量

privateinty;

privateintdiameter;

privateintwidth;

privateintheigth;

privateImage im;

privateGraphics dbg;

privateThreadgamethread;

privatestaticfinalintFPS=50;

publicMyPanel() {

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

y=50;

diameter=100;

width=600;//窗口的宽度

heigth=500;//窗口的高度

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

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

}

publicvoidgamePaint() { //前屏绘制

Graphics g;

try{

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

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

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

}

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

}catch(Exception e) {

}

}

publicvoidgameRender() { //离屏绘制

if(im ==null) {

im = createImage(width, heigth);

if(im ==null) {

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); //画出椭圆

}

publicvoidgameUpdate() { //更新游戏逻辑

//这里加上重复的代码

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

}

publicvoidrun() {

longt1,t2,dt,sleepTime;

longperiod=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{

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

}catch(InterruptedException ex) { }

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

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

}

}

publicvoidgameStart(){

gamethread= new Thread(this);

gamethread.start();

}

}

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

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

java程序移动图形源程序_如何运用java程序设计创建移动图形相关推荐

  1. java程序员封闭_变态级JAVA程序员面试32问(转)

    第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 ...

  2. java程序启动命令_如何用java启动windows命令行程序

    先请编译和运行下面程序: import java.util.*; import java.io.*; public class BadExecJavac2 { public static void m ...

  3. Java程序员情人节_七夕情人节 Java程序员如何表白

    作为程序员都有女朋友吗,木有女朋友的怎么办呢,也许你认为好办,那就一个字,追.看过<爱是从表白开始的>没,怎么着也得有个轰轰烈烈滴表白啊!下面就来看看程序员怎如何在七夕情人节来个创意表白吧 ...

  4. java程序员 待遇_现在的java程序员薪资待遇怎么样?

    Java作为编程语言界的常青藤,距今已有20个年头.在竞争激烈的编程语言界,java以其应用领域多.就业前景广.薪资待遇高等优势,在企业和广大人民群众中受到欢迎. java工资待遇怎么样?越来越多的人 ...

  5. java程序性能优化_怎么做JAVA程序性能优化

    展开全部 1)尽量指定类.方62616964757a686964616fe59b9ee7ad9431333433623731法的final修饰符.带有final修饰符的类是不可派生的,Java编译器会 ...

  6. java程序样例_一个完整的java程序示例

    一个完整的java程序示例 2020-08-15 05:22 阅读数 74 第一个java程序 package mypack; //相当于一个目录 public class HelloWorld{ p ...

  7. 招聘java是什么意思_企业招聘Java程序员的标准到底是什么?

    为什么Java程序员找工作那么难?是否市场已经饱和?企业招聘Java程序员的标准是什么?很多找不到工作的Java程序员在经历过几次面试之后,就会对自己的技术能力产生怀疑,然而找工作和"酒香不 ...

  8. java发展前景选兄弟连_兄弟连:Java程序员未来应该如何发展

    兄弟连:Java程序员未来应该如何发展 2017-09-13 | 北京 | 点击59次 | 信息编号:2017913101729121697951254323 广州兄弟连教育:http://gz.it ...

  9. java反编译工具_如何保护Java程序 才能防止Java反编译

    简介:Java是一种跨平台的.解释型语言.Java 源代码编译中间"字节码"存储于class文件中.Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如 ...

最新文章

  1. linux ubuntu安装 mono,在Ubuntu 18.04系统中安装Mono及基本使用Mono的方法
  2. SAP PP 成品工单批次号跟所消耗的半成品批次号一致
  3. UIBarButtonSystemItem 各种款式
  4. CSS3 3D的总结(初学者易懂)
  5. 石川es6课程---9、面向对象-基础
  6. div模拟textarea自适应高度
  7. 关于敏捷规划的微信对话
  8. 作为利物浦大学和西浦的学生的职业机会发展平台!很重要!
  9. mysql创建数据库没有默认值报错_详解Mysql数据库date, datetime类型设置0000-00-00默认值(default)报错问题...
  10. 中文版microbit:TurnipBit显示动态滚动字符教程实例
  11. java opencv去除干扰线_电子产品硬件研发—提高抗干扰性能的常用方法
  12. mabatis的工作原理
  13. mysql 如何抓慢查询_如何进行 MySQL慢查询 操作
  14. 计算机电源大小怎么看,怎么看电脑电源多少w
  15. k8s执行init时出现 Initial timeout of 40s passed
  16. 圣思园官方论坛正式上线,众板块版主火热招募中,欢迎围观
  17. C语言 运算符的优先级与结合性
  18. 一千度近视眼学计算机,【震惊了】你见过近视8百,1千,3千,5千度?你见过9000度吗?...
  19. Python切割图集
  20. super()函数的使用

热门文章

  1. 喜马拉雅网页版每次暂停后弹窗推荐下载客户端解决办法
  2. Django 一对多 多对多 正/反序列化
  3. 用excel构建神经网络,excel神经网络实现
  4. Ubuntu 16.04系统下出现E: 无法下载 http://ppa.launchpad.net/fcitx-team/nightly/ubuntu/dists/xenial/main/binary
  5. 清新风格按钮纯CSS效果
  6. java版app自动化测试初始化模板
  7. python中set()函数的用法,python中set()函数简介及实例解析
  8. 机械自动化与计算机专业,机械制造与自动化专业毕业后干什么
  9. VMware Workstation Pro 15上装wendows10此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态。 如果已在 BIOS/固件设置中禁用 Intel V
  10. Maya建模材质选定和灯光设置