0基础学java-day16-(坦克大战[1])

一、 坦克大战游戏演示

1 游戏演示

2.为什么写这个项目 

3.写项目前的提醒 

 二、java 绘图坐标体系

1 坐标体系-介绍

 2 坐标体系-像素

 3 介绍-快速入门

package com.hspedu.draw;import javax.swing.*;
import java.awt.*;/*** @author 林然* @version 1.0* 演示如何在面板画圆*/
@SuppressWarnings("all")
public class DrawCircle extends JFrame{//JFrame 对应窗口,可以理解成是一个画框//定义一个面板private MyPanel mp=null;public static void main(String[] args) {new DrawCircle();}public DrawCircle(){//构造器//初始化面板mp=new MyPanel();//把面板加入到窗口(画框)this.add(mp);//设置窗口的大小this.setSize(400,300);//当点击窗口的小×,程序完全退出.this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);//可以显示}
}
//1、先定义一个面板 MyPanel,继承JPanel类,画图形,就在面板上
class MyPanel extends JPanel{//1. MyPanel 对象就是一个画板//2. Graphics g 把 g 理解成一支画笔//3. Graphics 提供了很多绘图的方法//Graphics g@Overridepublic void paint(Graphics g) {//绘图方法super.paint(g);//调用父类的方法完成初始化//画出一个圆形.System.out.println("paint 方法被调用了~");g.drawOval(20,20,100,100);}
}

4 绘图原理 

 5 Graphics

package com.hspedu.draw;import javax.swing.*;
import java.awt.*;/*** @author 林然* @version 1.0* 演示如何在面板画圆*/
@SuppressWarnings("all")
public class DrawCircle extends JFrame{//JFrame 对应窗口,可以理解成是一个画框//定义一个面板private MyPanel mp=null;public static void main(String[] args) {new DrawCircle();}public DrawCircle(){//构造器//初始化面板mp=new MyPanel();//把面板加入到窗口(画框)this.add(mp);//设置窗口的大小this.setSize(400,300);//当点击窗口的小×,程序完全退出.this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);//可以显示}
}
//1、先定义一个面板 MyPanel,继承JPanel类,画图形,就在面板上
class MyPanel extends JPanel{//1. MyPanel 对象就是一个画板//2. Graphics g 把 g 理解成一支画笔//3. Graphics 提供了很多绘图的方法//Graphics g@Overridepublic void paint(Graphics g) {//绘图方法super.paint(g);//调用父类的方法完成初始化//画出一个圆形.System.out.println("paint 方法被调用了~");//g.drawOval(20,20,100,100);//演示绘制不同的图形..//画直线 drawLine(int x1,int y1,int x2,int y2)//g.drawLine(10, 10, 10, 100);//画矩形边框 drawRect(int x, int y, int width, int height)//g.drawRect(10, 10, 100, 200);//画椭圆边框 drawOval(int x, int y, int width, int height)//填充矩形 fillRect(int x, int y, int width, int height)//设置画笔的颜色//g.setColor(Color.blue);//g.fillRect(10, 10, 10, 10);//填充椭圆 fillOval(int x, int y, int width, int height)
//        g.setColor(Color.red);
//        g.fillOval(10, 10, 100, 100);//画图片 drawImage(Image img, int x, int y, ..)//1. 获取图片资源, /bg.png 表示在该项目的根目录去获取 bg.png 图片资源Image image = Toolkit.getDefaultToolkit().getImage(MyPanel.class.getResource("/bg.png"));g.drawImage(image, 10, 10, 175, 221, this);//画字符串 drawString(String str, int x, int y)//写字//给画笔设置颜色和字体g.setColor(Color.red);g.setFont(new Font("隶书", Font.BOLD, 50));//这里设置的 100, 100, 是 "北京你好"左下角g.drawString("北京你好", 100, 100);//左下角//设置画笔的字体 setFont(Font font)//设置画笔的颜色 setColor(Color c)}
}

 6 绘出坦克

package com.hspedu.tankgame;/*** @author 林然* @version 1.0* 初试坦克*/
public class Tank {private int x;//坦克横坐标private int y;//坦克纵坐标public Tank(int x, int y) {this.x = x;this.y = y;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}
}
package com.hspedu.tankgame;/*** @author 林然* @version 1.0* 我的坦克*/
public class Hero extends Tank {public Hero(int x, int y) {super(x, y);}
}
package com.hspedu.tankgame;import javax.swing.*;
import java.awt.*;/*** @author 林然* @version 1.0* 坦克大战的绘图区域*/
public class MyPanel extends JPanel {//定义我的坦克Hero hero = null;public MyPanel(){hero = new Hero(100,100);//初始化自己的坦克}@Overridepublic void paint(Graphics g) {super.paint(g);g.fillRect(0,0,1000,750);//填充矩形。默认黑色//画出坦克-封装方法drawtank(hero.getX(),hero.getY(),g,0,1);//画出坦克-封装方法drawtank(hero.getX()+60,hero.getY(),g,0,0);}/*** @param x 坦克的左上方x坐标* @param y 坦克的左上方y坐标* @param g  画笔* @param direct 坦克方向(上下左右)* @param type 坦克类型*/public void drawtank(int x,int y,Graphics g,int direct,int type){//根据不同的类型,设置不同的颜色switch (type){case 0://我们的坦克g.setColor(Color.cyan);break;case 1://敌人的坦克g.setColor(Color.yellow);break;}//根据坦克方向,来绘制坦克switch (direct){case 0://向上g.fill3DRect(x,y,10,60,false);//画出坦克左边的轮子g.fill3DRect(x+30,y,10,60,false);//画出坦克右边的轮子g.fill3DRect(x+10,y+10,20,40,false);//画出坦克盖子g.fillOval(x+10,y+20,20,20);//画出圆形盖子g.drawLine(x+20,y+30,x+20,y);break;default://其他方向暂时不处理System.out.println("其他方向暂时不处理");}}
}
package com.hspedu.tankgame;import javax.swing.*;/*** @author 林然* @version 1.0*/
public class HspTankGame01 extends JFrame {//定义一个PanelMyPanel mp=null;public static void main(String[] args) {HspTankGame01 hspTankGame01 =new HspTankGame01();}public HspTankGame01(){mp=new MyPanel();this.add(mp);//把面板就是游戏绘图区域this.setSize(1000,750);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}
}

三、java 事件处理机制

1 事件处理机制-看个问题

package com.hspedu.event_;import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;/*** @author 林然* @version 1.0* 演示小球通过键盘控制上下左右的移动-> 讲解 Java 的事件控制*/
public class BallMove extends JFrame  {MyPanel mp=null;public static void main(String[] args) {BallMove ballMove =new BallMove();}public BallMove(){mp=new MyPanel();this.add(mp);this.setSize(400,300);//窗口 JFrame 对象可以监听键盘事件, 即可以监听到面板发生的键盘事件this.addKeyListener(mp);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}
}
//面板 可以画小球
class MyPanel extends JPanel implements KeyListener{//为了让小球可以移动, 把他的左上角的坐标(x,y)设置变量int x = 10;int y = 10;@Overridepublic void paint(Graphics g) {super.paint(g);g.fillOval(x,y,20,20);//默认黑色}//有字符输出时,该方法就会触发@Overridepublic void keyTyped(KeyEvent e) {}//当某个键按下,就会触发@Overridepublic void keyPressed(KeyEvent e) {//System.out.println((char)e.getKeyCode()+"被按下");//根据用户按下的不同键,来处理小球的移动 (上下左右的键)//在 java 中,会给每一个键,分配一个值(int)int step=5;if(e.getKeyCode()==KeyEvent.VK_DOWN){y+=step;}else if(e.getKeyCode() == KeyEvent.VK_UP) {y-=step;} else if(e.getKeyCode() == KeyEvent.VK_LEFT) {x-=step;} else if(e.getKeyCode() == KeyEvent.VK_RIGHT) {x+=step;}//让面板重绘this.repaint();}//当某个键释放,就会触发@Overridepublic void keyReleased(KeyEvent e) {}
}

 2 基本说明

3 请大家看一个示意图 

4 机制分析 

5 事件处理机制深入理解 

 四、坦克大战游戏

1 让你的坦克动起来

package com.hspedu.tankgame2;/*** @author 林然* @version 1.0* 初试坦克*/
public class Tank {private int x;//坦克横坐标private int y;//坦克纵坐标private int direction;//坦克方向0 1 2 3[上右下左]private int speed = 1;//坦克速度public int getSpeed() {return speed;}public void setSpeed(int speed) {this.speed = speed;}public int getDirection() {return direction;}public void setDirection(int direction) {this.direction = direction;}public Tank(int x, int y) {this.x = x;this.y = y;}public int getX() {return x;}public void setX(int x) {this.x = x;}public int getY() {return y;}public void setY(int y) {this.y = y;}public void moveUp(){y=y-speed;}public void moveRight(){x=x+speed;}public void moveDown(){y=y+speed;}public void moveLeft(){x=x-speed;}}
package com.hspedu.tankgame2;/*** @author 林然* @version 1.0* 我的坦克*/
public class Hero extends Tank {public Hero(int x, int y) {super(x, y);}
}
package com.hspedu.tankgame2;import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;/*** @author 林然* @version 1.0* 坦克大战的绘图区域*/
//为了监听 键盘事件, 实现KeyListener
public class MyPanel extends JPanel implements KeyListener {//定义我的坦克Hero hero = null;public MyPanel(){hero = new Hero(100,100);//初始化自己的坦克hero.setSpeed(5);}@Overridepublic void paint(Graphics g) {super.paint(g);g.fillRect(0,0,1000,750);//填充矩形。默认黑色//画出坦克-封装方法drawtank(hero.getX(),hero.getY(),g,hero.getDirection(),1);}/*** @param x 坦克的左上方x坐标* @param y 坦克的左上方y坐标* @param g  画笔* @param direct 坦克方向(上下左右)* @param type 坦克类型*/public void drawtank(int x,int y,Graphics g,int direct,int type){//根据不同的类型,设置不同的颜色switch (type){case 0://敌人的坦克g.setColor(Color.cyan);break;case 1://我们的坦克g.setColor(Color.yellow);break;}//根据坦克方向,来绘制坦克//根据坦克方向,来绘制对应形状坦克//direct 表示方向(0: 向上 1 向右 2 向下 3 向左 )//switch (direct){case 0://向上g.fill3DRect(x,y,10,60,false);//画出坦克左边的轮子g.fill3DRect(x+30,y,10,60,false);//画出坦克右边的轮子g.fill3DRect(x+10,y+10,20,40,false);//画出坦克盖子g.fillOval(x+10,y+20,20,20);//画出圆形盖子g.drawLine(x+20,y+30,x+20,y);break;case 1://向右g.fill3DRect(x,y,60,10,false);//画出坦克左边的轮子g.fill3DRect(x,y+30,60,10,false);//画出坦克右边的轮子g.fill3DRect(x+10,y+10,40,20,false);//画出坦克盖子g.fillOval(x+20,y+10,20,20);//画出圆形盖子g.drawLine(x+30,y+20,x+60,y+20);break;case 2://向下g.fill3DRect(x,y,10,60,false);//画出坦克左边的轮子g.fill3DRect(x+30,y,10,60,false);//画出坦克右边的轮子g.fill3DRect(x+10,y+10,20,40,false);//画出坦克盖子g.fillOval(x+10,y+20,20,20);//画出圆形盖子g.drawLine(x+20,y+30,x+20,y+60);break;case 3://向右g.fill3DRect(x,y,60,10,false);//画出坦克左边的轮子g.fill3DRect(x,y+30,60,10,false);//画出坦克右边的轮子g.fill3DRect(x+10,y+10,40,20,false);//画出坦克盖子g.fillOval(x+20,y+10,20,20);//画出圆形盖子g.drawLine(x+30,y+20,x,y+20);break;default://其他方向暂时不处理System.out.println("其他方向暂时不处理");}}@Overridepublic void keyTyped(KeyEvent e) {}//处理 上右下左键按下的情况@Overridepublic void keyPressed(KeyEvent e) {if(e.getKeyCode()==KeyEvent.VK_UP){hero.setDirection(0);hero.moveUp();}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){hero.setDirection(1);hero.moveRight();}else if(e.getKeyCode()==KeyEvent.VK_DOWN){hero.setDirection(2);hero.moveDown();}else if(e.getKeyCode()==KeyEvent.VK_LEFT){hero.setDirection(3);hero.moveLeft();}this.repaint();}@Overridepublic void keyReleased(KeyEvent e) {}
}
package com.hspedu.tankgame2;import javax.swing.*;/*** @author 林然* @version 1.0*/
public class HspTankGame02 extends JFrame {//定义一个PanelMyPanel mp=null;public static void main(String[] args) {HspTankGame02 hspTankGame01 =new HspTankGame02();}public HspTankGame02(){mp=new MyPanel();this.add(mp);//把面板就是游戏绘图区域this.setSize(1000,750);this.addKeyListener(mp);//监听键盘事件this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setVisible(true);}
}

五、作业

package com.hspedu.tankgame2;/*** @author 林然* @version 1.0*/
public class EnemyTank extends Tank {public EnemyTank(int x,int y) {super(x,y);}
}

package com.hspedu.tankgame2;import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;/*** @author 林然* @version 1.0* 坦克大战的绘图区域*/
//为了监听 键盘事件, 实现KeyListener
public class MyPanel extends JPanel implements KeyListener {int enemyTankSize =3;//定义我的坦克Hero hero = null;//定义敌人坦克Vector<EnemyTank> enemyTanks =new Vector<>();public MyPanel(){hero = new Hero(100,100);//初始化自己的坦克hero.setSpeed(5);//初始化敌人坦克for (int i=0;i<enemyTankSize;i++){enemyTanks.add(new EnemyTank(100*(i+1),0));}}@Overridepublic void paint(Graphics g) {super.paint(g);g.fillRect(0,0,1000,750);//填充矩形。默认黑色//画出坦克-封装方法drawtank(hero.getX(),hero.getY(),g,hero.getDirection(),1);for (int i=0;i<enemyTankSize;i++){EnemyTank enemyTank = enemyTanks.get(i);enemyTank.setDirection(2);drawtank(enemyTank.getX(),enemyTank.getY(),g,enemyTank.getDirection(),0);}}/*** @param x 坦克的左上方x坐标* @param y 坦克的左上方y坐标* @param g  画笔* @param direct 坦克方向(上下左右)* @param type 坦克类型*/public void drawtank(int x,int y,Graphics g,int direct,int type){//根据不同的类型,设置不同的颜色switch (type){case 0://敌人的坦克g.setColor(Color.cyan);break;case 1://我们的坦克g.setColor(Color.yellow);break;}//根据坦克方向,来绘制坦克//根据坦克方向,来绘制对应形状坦克//direct 表示方向(0: 向上 1 向右 2 向下 3 向左 )//switch (direct){case 0://向上g.fill3DRect(x,y,10,60,false);//画出坦克左边的轮子g.fill3DRect(x+30,y,10,60,false);//画出坦克右边的轮子g.fill3DRect(x+10,y+10,20,40,false);//画出坦克盖子g.fillOval(x+10,y+20,20,20);//画出圆形盖子g.drawLine(x+20,y+30,x+20,y);break;case 1://向右g.fill3DRect(x,y,60,10,false);//画出坦克左边的轮子g.fill3DRect(x,y+30,60,10,false);//画出坦克右边的轮子g.fill3DRect(x+10,y+10,40,20,false);//画出坦克盖子g.fillOval(x+20,y+10,20,20);//画出圆形盖子g.drawLine(x+30,y+20,x+60,y+20);break;case 2://向下g.fill3DRect(x,y,10,60,false);//画出坦克左边的轮子g.fill3DRect(x+30,y,10,60,false);//画出坦克右边的轮子g.fill3DRect(x+10,y+10,20,40,false);//画出坦克盖子g.fillOval(x+10,y+20,20,20);//画出圆形盖子g.drawLine(x+20,y+30,x+20,y+60);break;case 3://向右g.fill3DRect(x,y,60,10,false);//画出坦克左边的轮子g.fill3DRect(x,y+30,60,10,false);//画出坦克右边的轮子g.fill3DRect(x+10,y+10,40,20,false);//画出坦克盖子g.fillOval(x+20,y+10,20,20);//画出圆形盖子g.drawLine(x+30,y+20,x,y+20);break;default://其他方向暂时不处理System.out.println("其他方向暂时不处理");}}@Overridepublic void keyTyped(KeyEvent e) {}//处理 上右下左键按下的情况@Overridepublic void keyPressed(KeyEvent e) {if(e.getKeyCode()==KeyEvent.VK_UP){hero.setDirection(0);hero.moveUp();}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){hero.setDirection(1);hero.moveRight();}else if(e.getKeyCode()==KeyEvent.VK_DOWN){hero.setDirection(2);hero.moveDown();}else if(e.getKeyCode()==KeyEvent.VK_LEFT){hero.setDirection(3);hero.moveLeft();}this.repaint();}@Overridepublic void keyReleased(KeyEvent e) {}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209086.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【python可视化系统源码】基于爬虫与可视化的电影推荐系统课题背景、目的、意义、研究思路、研究方法

该项目含有源码、文档、PPT、配套开发软件、软件安装教程、项目发布教程等学习内容。 目录 一、项目介绍&#xff1a; 二、文档学习资料&#xff1a; 三、模块截图&#xff1a; 四、开发技术与运行环境&#xff1a; 五、代码展示&#xff1a; 六、数据库表截图&#xff1a…

从简单到入门,一文掌握jvm底层知识文集。

&#x1f3c6;作者简介&#xff0c;普修罗双战士&#xff0c;一直追求不断学习和成长&#xff0c;在技术的道路上持续探索和实践。 &#x1f3c6;多年互联网行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f389;欢迎 &#x1f44d;点赞✍评论…

【Linux systemctl命令控制软件的启动和关闭】

文章目录 Linux systemctl命令&#xff1a;控制软件的启动和关闭1. 查看服务状态2. 启动服务3. 停止服务4. 重启服务5. 设置开机自启6. 取消开机自启7. 重新加载配置 Linux systemctl命令&#xff1a;控制软件的启动和关闭 1. 查看服务状态 要查看系统上所有服务的状态&#…

matlab RGB三元组和十六进制的转换

matlab画柱状图改颜色的时候&#xff0c;用三元组的形式&#xff0c;范围是[0&#xff0c;1] 我们获得了十六进制 到网站转换为[0,255] https://c.runoob.com/front-end/55/ 然后将得到的值/255 输入matlab就可以了

Bean作用域和生命周期

小王学习录 前言Bean的作用域什么是Bean的作用域Bean的六种作用域1. 单例作用域 singleton2. 原型作用域 prototype (多例作用域)3. 请求作用域 request4. 会话作用域 session5. 全局作用域 application6. Http WebSocket作用域 websocket Spring的执行流程和Bean的生命周期Spr…

网页设计--第6次课后作业

试用Vue相关指令完成对以下json数据的显示。显示效果如下&#xff1a; 其中&#xff1a;gender1 显示为女&#xff0c;gender2显示为男。价格超过30元&#xff0c;显示“有点小贵”。价格少于等于30元&#xff0c;则显示“价格亲民”。 data: {books: [{"id": "…

springboot集成字典注解

又是想下班的一天 文章目录 前言springboot使用AOP简单集成字典注解 一、通过注解进行字典赋值二、使用步骤1.添加注解2.序列化处理类3.实体类添加注解4.json返回值 总结 前言 springboot使用AOP简单集成字典注解 一、通过注解进行字典赋值 使用AOP切面实现字典的赋值,自动将…

MongoTemplate 常用查询

MongoTemplate是Spring Data MongoDB提供的一个Java编程接口&#xff0c;用于操作MongoDB数据库。它提供了一系列方法和功能&#xff0c;以便进行数据的插入、更新、删除和查询等操作。 使用MongoTemplate&#xff0c;你可以通过编写Java代码与MongoDB进行交互&#xff0c;而无…

二百一十四、Linux——Linux系统时间比电脑时间慢5分钟

一、目的 服务器重启后&#xff0c;发现Linux的系统时间比电脑时间慢5分钟&#xff0c;于是看了些博客&#xff0c;终于找到了解决方法&#xff0c;记录一下&#xff0c;以防止后面出现同样的问题 二、问题 通过date查看&#xff0c;Linux系统时间比电脑时间慢5分钟 &#…

IEEE RAS 机器人最优控制(Model-based Optimization for Robotics)学习资料

系列文章目录 前言 电气和电子工程师学会机器人模型优化技术委员会 一、学习资料 1.1 教程和暑期学校 2020 年 Memmo 欧盟项目暑期班2019年Memmo欧盟项目冬季学校Matthias Gerdts&#xff08;德国慕尼黑联邦国防军大学&#xff09;在拜罗伊特 OMPC 2013 上举办的最优控制教程…

详解vue生命周期

vue2 生命周期 Vue.js是一个流行的JavaScript框架&#xff0c;它使用了一套生命周期钩子函数来管理组件的创建、更新和销毁过程。以下是Vue组件的生命周期钩子函数&#xff1a; beforeCreate&#xff1a;在实例初始化之后&#xff0c;数据观测 (data observer) 和 event/watch…

字节跳动ZNS SSD应用案例解析

一、ZNS SSD基本原理 ZNS SSD的原理是把namespace空间划分多个zone空间&#xff0c;zone空间内部执行顺序写。这样做的优势&#xff1a; 降低SSD内部的写放大&#xff0c;提升SSD的寿命 降低OP空间&#xff0c;host可以获得更大的使用空间 降低SSD内部DRAM的容量&#xff0c;…

一款可无限扩展的软件定时器开源框架项目代码

摘自链接 时间片轮询架构如何稳定高效实现&#xff0c;取代传统的标志位判断方式&#xff0c;更优雅更方便地管理程序的时间触发操作。 可以在STM32单片机上运行。

基于SSM的社区管理系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

LeetCode(52)最小栈【栈】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 最小栈 1.题目 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。void push(int val) 将元素val推入堆栈。void…

区分工业设计软件中CAD、CAE、CAM、PDM等概念

工业设计软件是专门用于辅助工业设计师在产品设计和开发过程中进行各种任务的计算机程序。这些软件提供了广泛的工具和功能&#xff0c;帮助设计师创建、分析、修改和可视化产品的概念和详细设计。 CAD 计算机辅助设计&#xff08;Computer-Aided Design&#xff0c;CAD&…

15、SQL注入——Sqlmap

文章目录 一、Sqlmap简介1.1 sqlmap可以对URL干嘛&#xff1f;1.2 Sqlmap支持的注入技术1.3 SQLmap检测注入漏洞的流程1.4 Sqlmap的误报检测机制 二、sqlmap基本使用 一、Sqlmap简介 sqlmap使用教程 1.1 sqlmap可以对URL干嘛&#xff1f; 判断可注入的参数判断可以使用哪一种…

汽车电子智能保险丝解决方案

一、背景知识 在过去的几十年里&#xff0c;电子在汽车系统创新中发挥了关键作用。新型半导体器件具有新颖的功能&#xff0c;增强了车辆机械系统提供的功能。 虽然半导体解决方案和电子产品将继续在汽车电子产品中发挥关键作用&#xff0c;但展望未来&#xff0c;汽车创新将…

css顺时针旋转90°再3D中绕Y轴旋转180°

CSS 顺时针旋转 90 再 3D 中绕 Y 轴旋转 180 的示例代码如下&#xff1a; div {transform: rotate(90deg) perspective(500px) rotateY(180deg); }在这个示例中&#xff0c;元素被先进行了 2D 顺时针旋转 90&#xff0c;然后设置了 perspective 属性来定义元素的视角距离&…

UE4 材质实现Glitch效果

材质实现Glitch效果 UE4 材质实现Glitch效果预览1预览2 UE4 材质实现Glitch效果 预览1 添加材质函数&#xff1a; MF_RandomNoise 添加材质&#xff1a; 预览2 添加材质函数MF_CustomPanner&#xff1a; 添加材质函数&#xff1a;MF_Glitch 材质添加&#xff1a; 下面用…