java第三天(游戏开发)

devtools/2024/10/24 22:33:45/

学到

双缓存机制

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 blocke.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 stubthis.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() {@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubrepaint();}} );tim.start();


http://www.ppmy.cn/devtools/128527.html

相关文章

深度学习的程序实例

以下是一个使用深度学习的程序实例: import tensorflow as tf from tensorflow.keras.datasets import mnist from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Dropout from tensorflow.keras.optimizers import RMSp…

二、Linux 入门教程:开启大数据领域的神奇之旅

Linux 入门教程:开启大数据领域的神奇之旅 在当今这个飞速发展的数字化时代,大数据所具有的重要性正日益凸显出来。而 Linux 作为一种极为强大的操作系统,在大数据这一广阔的领域当中发挥着至关重要、不可或缺的关键作用。倘若你怀有涉足大数…

背包九讲——完全背包问题

目录 完全背包问题 问题定义 动态规划解法 状态转移方程 初始化 遍历顺序 三种解法: 朴素版——枚举k 进阶版——dp正推(一维滚动数组) 背包问题第三讲——完全背包问题 背包问题是一类经典的组合优化问题,通常涉及在限定…

线程同步之双摄

如何实现两个摄像头进行同步,并利用同步的信号做一些事情, 比如stereo camera 做深度,如果是自己整的两个camera,同步就需要自己做, 那么这时候可以利用线程同步手写一个,下面给一个示例代码: …

Java 代码优化 修饰器模式(Decorator Pattern)

在软件设计中,装饰模式是一种非常有用的结构型设计模式,它允许你在不修改现有类的情况下,动态地为对象添加新的功能。这个模式通过将对象包裹在装饰器对象中,实现功能的扩展和增强。 装饰模式的核心思想 核心问题:有时…

数据结构之队列

Hello,各位小伙伴们上期我们学习了栈这样的数据结构,今天让我们一起学习一下它的孪生兄弟队列。 队列的基本概念和结构 概念:只允许在一端进行插入数据操作,在另一端进行删除数据操作的特殊线性表,队列具有先进先出F…

2024软考网络工程师笔记 - 第4章.局域网和城域网

文章目录 局域网基础1️⃣局域网和城域网体系架构 IEEE(负责链路层)2️⃣局域网拓扑结构 🕑CSMA/CD1️⃣CSMA/CD2️⃣CSMA/CD三种监听算法3️⃣冲突检测原理 🕒二进制指数退避算法1️⃣ 二进制指数退避算法 🕓最小帧长…

【NodeJS】NodeJS+mongoDB在线版开发简单RestfulAPI (五):POST上传文件的设置

本项目旨在学习如何快速使用 nodejs 开发后端api,并为以后开展其他项目的开启提供简易的后端模版。(非后端工程师) 由于文档是代码写完之后,为了记录项目中需要注意的技术点,因此文档的叙述方式并非开发顺序&#xff0…