当前位置: 首页 > article >正文

java第三天(游戏开发)

学到

双缓存机制

public void paint(Graphics g) {
	//		  super.paint(g);//createImage(width, height) 是一个方法调用,它创建了一个指定宽度和高度的空图像缓冲区。这个方
			  //法可以在 Component 类中找到,因此任何从 Component 继承的类(比如 Applet 或 JPanel)都可以使用这个方法。
			  if (offimagescreen == null) {
				  offimagescreen = createImage(width, height);
		        }
		
			  Graphics gimage=offimagescreen.getGraphics();//Graphics gimage = offimagescreen.getGraphics(); 这行代码是用来获取之前
			  //创建的屏幕外图像缓冲区(offimagescreen)的Graphics对象,这样你就可以在这个图像上进行绘制操作了
		        // 调用父类的paint方法来确保其他组件也被绘制
		        // 确保图像已经被加载
		        // 正确的方式是使用静态变量
	
			  try {
				g.drawImage(game_pic.bgimgage,0,0,null);//这个是绘制底板,缓存区域
				  
				
			
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			  switch (state) {
			case 0:
				gimage.drawImage(game_pic.bgimgage,0,0,null);//背景面这些是将底板都加到缓存区域上
				gimage.setColor(Color.pink);//设置笔为粉红
	//			gimage/设置字体
				gimage.setFont(new Font("仿宋", Font.BOLD,60));
				gimage.drawString("hello world",700,500);
				
				
				break;
	
			case 1:
				bgg.paintself(gimage);
				ennFish.x+=30;
				System.out.println("下载");
				ennFish.paintself(gimage);
			System.out.println(ennFish.x);
			break;
		case 2:
			
			break;
		case 3:
			break;
		case 4:
			break;
			default:
		
			
		}
		  g.drawImage(offimagescreen,0,0,null);//这里将所有缓存的一次加载到图片上
//			g.drawImage(game_pic.dirmgage1,0,0,null);
		  
		  

这是,如果有两个图片加载,那么有图片的两个一起加载就不会造成闪烁了

if (offimagescreen == null) {
				  offimagescreen = createImage(width, height);
		        }
		
			  Graphics gimage=offimagescreen.getGraphics();//Graphics gimage = offimagescreen.getGraphics(); 这行代码是用来获取之前
			  //创建的屏幕外图像缓冲区(offimagescreen)的Graphics对象,这样你就可以在这个图像上进行绘制操作了
		        // 调用父类的paint方法来确保其他组件也被绘制
		        // 确保图像已经被加载
		        // 正确的方式是使用静态变量

这里eImage 函数或方法通常用于创建一个新的图像对象,尤其是在处理图形用户界面(GUI)或游戏开发时。具体到您给出的代码行 offimagescreen = createImage(width, height);,这行代码的意图是创建一个指定宽度和高度的图像对象,并将其赋值给变量 offimagescree

然后

Graphics gimage=offimagescreen.getGraphics();//Graphics gimage = offimagescreen.getGraphics(); 这行代码是用来获取之前

//创建的屏幕外图像缓冲区(offimagescreen)的Graphics对象,这样你就可以在这个图像上进行绘制操作了

底板g.drawImage(game_pic.bgimgage,0,0,null);//这个是绘制底板,缓存区域,

鼠标事件后  

case 0:

gimage.drawImage(game_pic.bgimgage,0,0,null);//背景面这些是将底板都加到缓存区域上

gimage.setColor(Color.pink);//设置笔为粉红

// gimage/设置字体

gimage.setFont(new Font("仿宋", Font.BOLD,60));

gimage.drawString("hello world",700,500);

在Java编程语言中,特别是涉及到图形用户界面(GUI)或者游戏开发时,您可能会看到类似这样的代码。这段代码看起来是用于在图像上绘制内容。以下是代码的逐行解释:

  1. gimage.drawImage(game_pic.bgimgage, 0, 0, null);

    • 这行代码的作用是将名为 game_pic.bgimgage 的图像绘制到 gimage 对象所代表的图形上下文中。0, 0 是图像的绘制位置,即左上角。最后一个参数 null 通常代表图像观察者,在这里它被设置为 null,意味着不需要通知任何观察者图像已经绘制完毕。
  2. 然后在

    case 1:

    bgg.paintself(gimage);

    ennFish.x+=30;

    System.out.println("下载");

    ennFish.paintself(gimage);

    System.out.println(ennFish.x);时将几个图片放入gimage,

  3. 后面再一次带入g.drawImage(offimagescreen,0,0,null);/

还有就是实现滑动

package common;
import java.awt.*;
import common.game_pic;
public class fish {
	//定义图片
	Image img;
	//定义坐标
	int x;
	int y;
	int width;
	int height;
	//移动速度
	int speed;
	//方向定义
	int dir=1;
	//类型
	int type;
	//分值
	int count;
	//距离,用于检测自身

	//距离,用于碰撞检测
	public Rectangle getrec () {
		return new Rectangle(x,y,width,height);//就相当于是返回一个对象
		
	}
	public void paintself(Graphics g ) {
		g.drawImage(img,x,0,null);//背景面
	
		
	}

}

//敌方鱼左边的鱼
class ennamy_l extends fish{
//	ennamy_l(){
//		
//	}构造方法
	public ennamy_l() {
		// TODO Auto-generated constructor stub
		this.x=5;
		this.y = (int)(Math.random() * 700 + 100);
		this.width=45;
		this.height=69;
		this.speed=10;
		this.count=1;
		this.img=game_pic.dirmgage1;

	}
	public void ds(Graphics g ) {
		g.drawImage(img,0,0,null);//背景面
		
	}
	
	
}

这个是fish的,保证repaint来把这个刷新

public void mouseClicked(MouseEvent e) {
				super.mouseClicked(e);
				if (e.getButton()==1&&state==0) {
					state=1;
					repaint();//重新绘制
					/*总的来说,repaint 方法属于 Component 类,这是所有Swing组件的父类。因此,所有继承自 Component 类的Swing组件,
					 * 如 JButton, JPanel, JFrame 等,都有 repaint 方法。repaint 是Swing组件更新显示的一个关键方法,用于确保用户界面能够反映组件的最新状态。


					 * repaint() 调用的位置是正确的,它位于状态改变之后,这样就可以确保组件在状态改变后能够重新绘制自己,以反映新的状态。
					 */
					
				}
				
			}
		}

时间的定时器

Timer tim=new Timer(400, new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
			       repaint();
			}
		} );
		 tim.start();


http://www.kler.cn/news/366810.html

相关文章:

  • Maven项目管理工具-初始+环境配置
  • Spring 配置文件动态读取pom.xml中的属性
  • 解决JAVA使用@JsonProperty序列化出现字段重复问题(大写开头的字段重复序列化)
  • 计数问题(csp2023)
  • 川渝地区计算机考研择校分析
  • 批量修改YOLO格式的标注类别
  • grafana 和 prometheus
  • [论文阅读] Improved Baselines with Visual Instruction Tuning
  • ubuntu(27):ubuntu20.04鼠标无法显示但远程控制可以使用
  • 51c大模型~合集4
  • 重学SpringBoot3-集成Hazelcast
  • 基于GPT的智能客服落地实践
  • 深入解析Apache DolphinScheduler容错机制
  • 如何用 obdiag 排查 OceanBase数据库的卡合并问题——《OceanBase诊断系列》14
  • Sourcetree和GitLab的结合使用
  • Mac 使用脚本批量导入 Apple 歌曲
  • 【力扣 + 牛客 | SQL题 | 每日4题】牛客大厂面试真题W3,W10
  • Protues中51单片机按键无法复位(已解决)
  • 【多态案例】电脑组装
  • 如何使用python seaborn进行复杂的数据可视化操作?
  • 使用API有效率地管理Dynadot域名,通过域名命令删除域名服务器(NS)
  • canvas-editor首行缩进
  • Python爬虫,初识xpath(1)
  • leetcode day1 910+16
  • 【文献及模型、制图分享】长江中游经济区“水—能源—粮食”系统与城市绿色转型适配性研究
  • java中常见集合,非常重要!!!