闪烁的原因?
刷新重画的频率太快,paint方法还没完成。
显示不均匀。
解决方法:将所有的东西画在虚拟的图片上,然后用paint方法画在屏幕上。
package Frame;
import java.awt.Color;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
//消除闪烁,使用双缓冲
//线程重画更加均匀,更能控制重化的速度。按键重画不能解决子弹自动飞行的问题;
public class TankClient extends Frame {
public int x=50,y=50;
Image offScreenImage=null;
//重写
public void update(Graphics g) {
if(offScreenImage==null){
offScreenImage=this.createImage(800, 600);
}
//拿到图片上的画笔
Graphics gOffScreen=offScreenImage.getGraphics();
Color c=gOffScreen.getColor();
gOffScreen.setColor(Color.green);
gOffScreen.fillRect(0, 0, 800, 600);
gOffScreen.setColor(c);
paint(gOffScreen);//画在背后图片上
g.drawImage(offScreenImage, 0, 0,null);//画在屏幕上
}
public void paint(Graphics g) {
Color c = g.getColor();
g.setColor(Color.red);
g.fillOval(x, y, 30, 30);
g.setColor(c);
y+=5;
}
public void lauchFrame() {
setTitle("TankWar");
setBounds(230, 100, 800, 600);
// 匿名内部类,短,不涉及将来的扩展
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
setResizable(false);
setBackground(Color.GREEN);
setVisible(true);
new Thread(new PaintThread()).start();
}
public static void main(String[] args) {
TankClient tc = new TankClient();
tc.lauchFrame();
}
//内部类,只为这个TankWar服务,方便的访问包装类的方法,不方便公开,
private class PaintThread implements Runnable{
public void run (){
while(true){
repaint();//内部调用父类的paint方法;
try {
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
后面会继续完善这个小项目!!
分享到:
相关推荐
期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业课程设计使用java开发的坦克大战小游戏源码期末作业...
《Java实现的坦克大战游戏详解》 坦克大战是一款深受玩家喜爱的经典游戏,它结合了策略、射击和竞技的元素,让玩家在紧张刺激的战斗中体验到无尽的乐趣。本项目是用Java语言开发的坦克大战游戏,下面将详细介绍其...
java游戏,坦克大战java游戏,坦克大战java游戏,坦克大战java游戏,坦克大战java游戏,坦克大战java游戏,坦克大战java游戏,坦克大战java游戏,坦克大战java游戏,坦克大战java游戏,坦克大战java游戏,坦克大战...
Java语言编写的经典坦克大战游戏.zipJava语言编写的经典坦克大战游戏.zip Java语言编写的经典坦克大战游戏.zipJava语言编写的经典坦克大战游戏.zip Java语言编写的经典坦克大战游戏.zipJava语言编写的经典坦克大战...
【JAVA实现的坦克大战-课程设计】是一款基于Java编程语言开发的坦克战斗游戏,它旨在帮助学生或初学者深入理解面向对象编程、游戏逻辑构建以及图形用户界面(GUI)的设计。游戏提供了两个版本:V1和V2,分别代表了...
【JAVA+Swing坦克大战】是一款基于Java编程语言和Swing图形用户界面库开发的经典游戏。Swing是Java Standard Edition(Java SE)的一部分,用于构建桌面应用,它提供了丰富的组件库来创建美观、交互式的用户界面。这...
Java坦克大战游戏源代码 关于项目 Java中的坦克大战游戏是一款简单的多人游戏对战游戏。这个游戏和之前的游戏很相似。本系统是在Eclipse IDE中制作的。此外,您需要在计算机上安装 JDK 和 JRE 才能运行它。这是一个...
Java桌面_坦克大战小游戏.zipJava桌面_坦克大战小游戏.zip Java桌面_坦克大战小游戏.zipJava桌面_坦克大战小游戏.zip Java桌面_坦克大战小游戏.zipJava桌面_坦克大战小游戏.zip Java桌面_坦克大战小游戏.zipJava桌面...
java简单的坦克大战小游戏.zipjava简单的坦克大战小游戏.zip java简单的坦克大战小游戏.zipjava简单的坦克大战小游戏.zip java简单的坦克大战小游戏.zipjava简单的坦克大战小游戏.zip java简单的坦克大战小游戏.zip...
通过研究《Java实现的坦克大战》,不仅可以体验游戏的乐趣,还能深入学习Java编程的各个方面,锻炼解决问题和调试代码的能力,对提升编程技能大有裨益。同时,这也是一个很好的项目实践,鼓励学习者动手尝试修改和...
综上所述,《坦克大战Java实训报告》涵盖了Java编程、数据库交互、图形界面设计、算法应用、游戏逻辑实现以及网络通信等多个IT领域的知识点,是学习和提升综合编程技能的良好实践案例。通过这个项目,开发者不仅能...
【Java版 坦克大战 MVC游戏框架】是一款基于Java编程语言开发的坦克大战小游戏,其设计理念是采用MVC(Model-View-Controller)架构模式,以提高代码的可维护性和可扩展性。在这个项目中,我们将深入探讨如何利用...
在本项目中,"Java实现简单坦克大战" 是一个基于Java编程语言开发的趣味游戏,旨在教授初学者如何使用Java进行游戏开发。这个游戏的核心概念包括对象编程、图形用户界面(GUI)设计、事件处理和基本的游戏逻辑。接...
java课程设计:基于Java 编写的坦克大战游戏 java课程设计:基于Java 编写的坦克大战游戏 java课程设计:基于Java 编写的坦克大战游戏 java课程设计:基于Java 编写的坦克大战游戏 java课程设计:基于Java 编写的...
而用Java语言编写坦克大战,不仅可以让我们重温游戏的乐趣,还能在实践中深入理解Java编程的基础与高级特性。本文将围绕这个主题,详细讲解如何使用Java来实现坦克大战的核心功能。 一、项目环境构建 首先,我们...
Graphics类是软件包java.awt(其全部类都用来用户界面的创建和图形图像的绘制)下的类,它同意一个应用程序绘制到组件,以及在屏幕图像上进行绘制。Graphics 对象封装了 Java 支持的基本呈现操作所需的状态信息。...
"Java版的坦克大战小游戏源码"就是一个极佳的实践项目,它不仅让我们有机会重温Java的基础知识,还能够深入理解多线程、内部类、图形绘制以及泛型等高级特性。下面,我们将详细探讨这个项目中的关键知识点。 首先,...
【Java坦克大战小游戏】是一款基于Java SE平台,利用面向对象编程技术开发的小型游戏,旨在帮助开发者巩固和实践面向对象的基础知识。在这个项目中,我们可以深入理解Java编程语言中的类、对象、继承、封装和多态等...