java程序移动图形源程序_如何运用java程序设计创建移动图形
那么这一节我们就来学习一下,如何运用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程序设计创建移动图形相关推荐
- java程序员封闭_变态级JAVA程序员面试32问(转)
第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 ...
- java程序启动命令_如何用java启动windows命令行程序
先请编译和运行下面程序: import java.util.*; import java.io.*; public class BadExecJavac2 { public static void m ...
- Java程序员情人节_七夕情人节 Java程序员如何表白
作为程序员都有女朋友吗,木有女朋友的怎么办呢,也许你认为好办,那就一个字,追.看过<爱是从表白开始的>没,怎么着也得有个轰轰烈烈滴表白啊!下面就来看看程序员怎如何在七夕情人节来个创意表白吧 ...
- java程序员 待遇_现在的java程序员薪资待遇怎么样?
Java作为编程语言界的常青藤,距今已有20个年头.在竞争激烈的编程语言界,java以其应用领域多.就业前景广.薪资待遇高等优势,在企业和广大人民群众中受到欢迎. java工资待遇怎么样?越来越多的人 ...
- java程序性能优化_怎么做JAVA程序性能优化
展开全部 1)尽量指定类.方62616964757a686964616fe59b9ee7ad9431333433623731法的final修饰符.带有final修饰符的类是不可派生的,Java编译器会 ...
- java程序样例_一个完整的java程序示例
一个完整的java程序示例 2020-08-15 05:22 阅读数 74 第一个java程序 package mypack; //相当于一个目录 public class HelloWorld{ p ...
- 招聘java是什么意思_企业招聘Java程序员的标准到底是什么?
为什么Java程序员找工作那么难?是否市场已经饱和?企业招聘Java程序员的标准是什么?很多找不到工作的Java程序员在经历过几次面试之后,就会对自己的技术能力产生怀疑,然而找工作和"酒香不 ...
- java发展前景选兄弟连_兄弟连:Java程序员未来应该如何发展
兄弟连:Java程序员未来应该如何发展 2017-09-13 | 北京 | 点击59次 | 信息编号:2017913101729121697951254323 广州兄弟连教育:http://gz.it ...
- java反编译工具_如何保护Java程序 才能防止Java反编译
简介:Java是一种跨平台的.解释型语言.Java 源代码编译中间"字节码"存储于class文件中.Class文件是一种字节码形式的中间代码,该字节码中包括了很多源代码的信息,例如 ...
最新文章
- linux ubuntu安装 mono,在Ubuntu 18.04系统中安装Mono及基本使用Mono的方法
- SAP PP 成品工单批次号跟所消耗的半成品批次号一致
- UIBarButtonSystemItem 各种款式
- CSS3 3D的总结(初学者易懂)
- 石川es6课程---9、面向对象-基础
- div模拟textarea自适应高度
- 关于敏捷规划的微信对话
- 作为利物浦大学和西浦的学生的职业机会发展平台!很重要!
- mysql创建数据库没有默认值报错_详解Mysql数据库date, datetime类型设置0000-00-00默认值(default)报错问题...
- 中文版microbit:TurnipBit显示动态滚动字符教程实例
- java opencv去除干扰线_电子产品硬件研发—提高抗干扰性能的常用方法
- mabatis的工作原理
- mysql 如何抓慢查询_如何进行 MySQL慢查询 操作
- 计算机电源大小怎么看,怎么看电脑电源多少w
- k8s执行init时出现 Initial timeout of 40s passed
- 圣思园官方论坛正式上线,众板块版主火热招募中,欢迎围观
- C语言 运算符的优先级与结合性
- 一千度近视眼学计算机,【震惊了】你见过近视8百,1千,3千,5千度?你见过9000度吗?...
- Python切割图集
- super()函数的使用
热门文章
- 喜马拉雅网页版每次暂停后弹窗推荐下载客户端解决办法
- Django 一对多 多对多 正/反序列化
- 用excel构建神经网络,excel神经网络实现
- Ubuntu 16.04系统下出现E: 无法下载 http://ppa.launchpad.net/fcitx-team/nightly/ubuntu/dists/xenial/main/binary
- 清新风格按钮纯CSS效果
- java版app自动化测试初始化模板
- python中set()函数的用法,python中set()函数简介及实例解析
- 机械自动化与计算机专业,机械制造与自动化专业毕业后干什么
- VMware Workstation Pro 15上装wendows10此主机支持 Intel VT-x,但 Intel VT-x 处于禁用状态。 如果已在 BIOS/固件设置中禁用 Intel V
- Maya建模材质选定和灯光设置