cocos做飞机大战笔记【添加游戏音效】
文章目录
- 前言
- 添加音频脚本并绑定组件
- 音频脚本
- 子弹发射播放音频并将播放音频方法在管理脚本中暴露
- 点击按钮播放音频
- 敌机销毁的时候播放音频
- 玩家飞机销毁播放音频
- 完整代码
前言
游戏音效会分为游戏开始音效,玩家飞机死亡音效,敌机死亡音效,以及子弹发射音效和按钮点击音效
添加音频脚本并绑定组件
首先创建个空节点audio用于存放音频,然后将背景音乐挂在其下
音频脚本
创建脚本AudioManager.ts,将需要的音频用一个数组接收,
将音频脚本挂入引擎
子弹发射播放音频并将播放音频方法在管理脚本中暴露
将音频节点挂入
点击按钮播放音频
敌机销毁的时候播放音频
玩家飞机销毁播放音频
在引擎中添加音频
完整代码
- AudioManager
import { _decorator, Component, Node, AudioClip, AudioSource } from 'cc';
const { ccclass, property } = _decorator;/*** Predefined variables* Name = AudioManager* DateTime = Fri Nov 26 2021 16:11:32 GMT+0800 (China Standard Time)* Author = mywayday* FileBasename = AudioManager.ts* FileBasenameNoExtension = AudioManager* URL = db://assets/script/framework/AudioManager.ts* ManualUrl = https://docs.cocos.com/creator/3.3/manual/en/**/interface IAudioMap {[name: string]: AudioClip;
}@ccclass('AudioManager')
export class AudioManager extends Component {//音频列表@property([AudioClip])public audioList: AudioClip[] = [];private _dict: IAudioMap = {};//音频集合private _audioSource: AudioSource = null;start() {//将音频存入集合中for (let i = 0; i < this.audioList.length; i++) {const element = this.audioList[i];this._dict[element.name] = element;}this._audioSource = this.getComponent(AudioSource);//音频组件初始化}//播放音频public play(name: string) {const audioClip = this._dict[name];if (audioClip !== undefined) {this._audioSource.playOneShot(audioClip);}}// update (deltaTime: number) {// // [4]// }
}/*** [1] Class member could be defined like this.* [2] Use `property` decorator if your want the member to be serializable.* [3] Your initialization goes here.* [4] Your update function goes here.** Learn more about scripting: https://docs.cocos.com/creator/3.3/manual/en/scripting/* Learn more about CCClass: https://docs.cocos.com/creator/3.3/manual/en/scripting/ccclass.html* Learn more about life-cycle callbacks: https://docs.cocos.com/creator/3.3/manual/en/scripting/life-cycle-callbacks.html*/
- GameManager
import { _decorator, Component, Node, Prefab, instantiate, math, Vec3, BoxCollider, macro, Label } from 'cc';
import { Bullet } from '../bullet/Bullet';
import { BulletProp } from '../bullet/BulletProp';
import { EnemyPlane } from '../plane/EnemyPlane';
import { SelfPlane } from '../plane/SelfPlane';
import { AudioManager } from './AudioManager';
import { Constant } from './Constant';
const { ccclass, property } = _decorator;@ccclass('GameManager')
export class GameManager extends Component {// 关联玩家飞机@property(SelfPlane)public playerPlane: SelfPlane = null;// bullet 关联所有子弹@property(Prefab)public bullet01: Prefab = null;@property(Prefab)public bullet02: Prefab = null;@property(Prefab)public bullet03: Prefab = null;@property(Prefab)public bullet04: Prefab = null;@property(Prefab)public bullet05: Prefab = null;// 射击周期@propertypublic shootTime = 0.3;// 子弹移动速度@propertypublic bulletSpeed = 1;//子弹管理节点@property(Node)public bulletRoot: Node = null;// enemy/** 关联敌机 */@property(Prefab)public enemy01: Prefab = null;@property(Prefab)public enemy02: Prefab = null;@propertypublic createEnemtTime = 1;//创建敌机时间@propertypublic enemy1Speed = 0.5;//敌机1速度@propertypublic enemy2Speed = 0.7;//敌机2速度// prop 定义道具属性@property(Prefab)public bulletPropM: Prefab = null;@property(Prefab)public bulletPropH: Prefab = null;@property(Prefab)public bulletPropS: Prefab = null;@propertypublic bulletPropSpeed = 0.3;//道具速度// ui@property(Node)public gamePage: Node = null;//游戏界面@property(Node)public gameOverPage: Node = null;//游戏结束界面@property(Label)public gameOverScore: Label = null;//游戏结算分数@property(Label)public gameScore: Label = null;//游戏分数组件// audio@property(AudioManager)public audioEffect: AudioManager = null;//获取音频脚本public isGameStart = false;//游戏是否开始private _currShootTime = 0;// 是否触摸屏幕private _isShooting = false;private _currCreateEnemyTime = 0//当前创建的敌机时间private _combinationInterval = Constant.Combination.PLAN1//组合间隔状态private _bulletType = Constant.BulletPropType.BULLET_M;//子弹类型private _score = 0;//分数start() {this._init();}update(deltaTime: number) {//判断游戏是否开始if (!this.isGameStart) {return;}//判断玩家是否死亡if (this.playerPlane.isDie) {this.gameOver();return;}// 这步加时间是为了发射子弹this._currShootTime += deltaTime;// 判断是触摸状态 并且射击时间大于我们的周期 发射子弹if (this._isShooting && this._currShootTime > this.shootTime) {/*** 根据吃道具类型来产生子弹*/if (this._bulletType === Constant.BulletPropType.BULLET_H) {this.createPlayerBulletH();} else if (this._bulletType === Constant.BulletPropType.BULLET_S) {this.createPlayerBulletS();} else {this.createPlayerBulletM();}//发射子弹播放声音由于音频只有1,2子弹却有3个,这里是处理逻辑const name = 'bullet' + (this._bulletType % 2 + 1);this.playAudioEffect(name);this._currShootTime = 0;}this._currCreateEnemyTime += deltaTime//判断组合方式if (this._combinationInterval == Constant.Combination.PLAN1) {//只创建单一的飞机 0-10秒飞机创建if (this._currCreateEnemyTime > this.createEnemtTime) {//普通飞机创建this.createEnemyPlane()this._currCreateEnemyTime = 0}} else if (this._combinationInterval == Constant.Combination.PLAN2) {// 10-20秒飞机创建if (this._currCreateEnemyTime > this.createEnemtTime * 0.9) {//0.9飞机组合间隔const randomCombination = math.randomRangeInt(1, 3)//随机1,2飞机if (randomCombination === Constant.Combination.PLAN2) {this.createCombination1()} else {this.createEnemyPlane()}this._currCreateEnemyTime = 0}} else {//20+ 飞机创建if (this._currCreateEnemyTime > this.createEnemtTime * 0.8) {//0.8飞机组合间隔const randomCombination = math.randomRangeInt(1, 4)//随机1,2,3飞机if (randomCombination === Constant.Combination.PLAN2) {this.createCombination1()} else if (randomCombination === Constant.Combination.PLAN3) {this.createCombination2()} else {this.createEnemyPlane()}this._currCreateEnemyTime = 0}}}/*** 返回主界面逻辑,数据重置*/public returnMain() {this._currShootTime = 0;this._currCreateEnemyTime = 0;this._combinationInterval = Constant.Combination.PLAN1;this._bulletType = Constant.BulletPropType.BULLET_M;this.playerPlane.node.setPosition(0, 0, 15);this._score = 0;}/*** 游戏开始页面数据重置*/public gameStart() {this.isGameStart = true;this._changePlanMode();//开启定时器this._score = 0;this.gameScore.string = this._score.toString();}/*** 游戏再次开始*/public gameReStart() {this.isGameStart = true;this._currShootTime = 0;this._currCreateEnemyTime = 0;this._combinationInterval = Constant.Combination.PLAN1;this._bulletType = Constant.BulletPropType.BULLET_M;this.playerPlane.node.setPosition(0, 0, 15);this._score = 0;this._changePlanMode();//开启定时器this.gameScore.string = this._score.toString();}/*** 游戏结束*/public gameOver() {this.isGameStart = false;this.gamePage.active = false;this.gameOverPage.active = true;this.gameOverScore.string = this._score.toString();this._isShooting = false;this.unschedule(this._modeChanged);//取消定时器this.playerPlane.init();//这里注意游戏结束要初始化this._destroyAll();}/*** 加分*/public addScore() {this._score++;this.gameScore.string = this._score.toString();}/*** 创建子弹*/public createPlayerBulletM() {// 子弹实例化const bullet = instantiate(this.bullet01);// 将子弹放在子弹管理节点下面bullet.setParent(this.bulletRoot);// 获取飞机位置const pos = this.playerPlane.node.position;// 设置子弹位置bullet.setPosition(pos.x, pos.y, pos.z - 7);// 设置子弹速度const bulletComp = bullet.getComponent(Bullet);bulletComp.show(this.bulletSpeed, false)}/*** H形状子弹创建*/public createPlayerBulletH() {const pos = this.playerPlane.node.position;// leftconst bullet1 = instantiate(this.bullet03);bullet1.setParent(this.bulletRoot);bullet1.setPosition(pos.x - 2.5, pos.y, pos.z - 7);const bulletComp1 = bullet1.getComponent(Bullet);bulletComp1.show(this.bulletSpeed, false);// rightconst bullet2 = instantiate(this.bullet03);bullet2.setParent(this.bulletRoot);bullet2.setPosition(pos.x + 2.5, pos.y, pos.z - 7);const bulletComp2 = bullet2.getComponent(Bullet);bulletComp2.show(this.bulletSpeed, false);}/*** S型子弹创建*/public createPlayerBulletS() {const pos = this.playerPlane.node.position;// middleconst bullet = instantiate(this.bullet05);bullet.setParent(this.bulletRoot);bullet.setPosition(pos.x, pos.y, pos.z - 7);const bulletComp = bullet.getComponent(Bullet);bulletComp.show(this.bulletSpeed, false);// leftconst bullet1 = instantiate(this.bullet05);bullet1.setParent(this.bulletRoot);bullet1.setPosition(pos.x - 4, pos.y, pos.z - 7);const bulletComp1 = bullet1.getComponent(Bullet);bulletComp1.show(this.bulletSpeed, false, Constant.Direction.LEFT);// rightconst bullet2 = instantiate(this.bullet05);bullet2.setParent(this.bulletRoot);bullet2.setPosition(pos.x + 4, pos.y, pos.z - 7);const bulletComp2 = bullet2.getComponent(Bullet);bulletComp2.show(this.bulletSpeed, false, Constant.Direction.RIGHT);}/*** 创建敌机子弹* @param targetPos 敌机子弹位置*/public createEnemyBullet(targetPos: Vec3) {// 子弹实例化const bullet = instantiate(this.bullet01);// 将子弹放在子弹管理节点下面bullet.setParent(this.bulletRoot);// 设置子弹位置bullet.setPosition(targetPos.x, targetPos.y, targetPos.z + 6);// 设置子弹速度const bulletComp = bullet.getComponent(Bullet);bulletComp.show(1, true)/*** 敌机子弹分组*/const colliderComp = bullet.getComponent(BoxCollider);colliderComp.setGroup(Constant.CollisionType.ENEMY_BULLET);colliderComp.setMask(Constant.CollisionType.SELF_PLANE);//设置掩码}/*** 创建敌机**/public createEnemyPlane() {// 两架飞机随机选一(1,2)const whichEnemy = math.randomRangeInt(1, 3)let prefab: Prefab = nulllet speed = 0// 创建敌机1或2if (whichEnemy == Constant.EnemyType.TYPE1) {prefab = this.enemy01speed = this.enemy1Speed} else {prefab = this.enemy02speed = this.enemy2Speed}// 预制实例化const enemy = instantiate(prefab)console.log(enemy);enemy.setParent(this.node)const enemyComp = enemy.getComponent(EnemyPlane)enemyComp.show(this, speed, true)//单架敌机需要发射子弹// 设置飞机位置 const randomPos = math.randomRangeInt(-25, 26)enemy.setPosition(randomPos, 0, -50)}/*** 组合1创建 横向排列 z轴50,x轴从-20开始**/public createCombination1() {const enemyArray = new Array<Node>(5)//飞机数组for (let i = 0; i < enemyArray.length; i++) {// 敌机资源实例化enemyArray[i] = instantiate(this.enemy01)const element = enemyArray[i]element.parent = this.nodeelement.setPosition(-20 + i * 10, 0, -50)//-20起始左位置,10飞机间隔,其实创建位置//设置飞机速度const enemyComp = element.getComponent(EnemyPlane)enemyComp.show(this, this.enemy1Speed, false)//组合飞机不需要发射子弹}}/*** 组合2创建 V字排列**/public createCombination2() {const enemyArray = new Array<Node>(7)//飞机数组// 位置数组const combinationPos = [-21, 0, -60,-14, 0, -55,-7, 0, -50,0, 0, -45,7, 0, -50,14, 0, -55,21, 0, -60]for (let i = 0; i < enemyArray.length; i++) {// 敌机资源实例化enemyArray[i] = instantiate(this.enemy02)const element = enemyArray[i]element.parent = this.nodeconst startIndex = i * 3//因为位置数组有7个 但是位置有3×7 21个 所以每架飞机位置偏移是3element.setPosition(combinationPos[startIndex], combinationPos[startIndex + 1], combinationPos[startIndex + 2])//设置飞机速度const enemyComp = element.getComponent(EnemyPlane)enemyComp.show(this, this.enemy2Speed, false)//组合飞机不需要发射子弹}}/*** 创建子弹道具* 随机1~3是根据然后创建相对应的道具*/public createBulletProp() {const randomProp = math.randomRangeInt(1, 4);let prefab: Prefab = null;if (randomProp === Constant.BulletPropType.BULLET_H) {prefab = this.bulletPropH;} else if (randomProp === Constant.BulletPropType.BULLET_S) {prefab = this.bulletPropS;} else {prefab = this.bulletPropM;}//实例化道具const prop = instantiate(prefab);prop.setParent(this.node);prop.setPosition(15, 0, -50);const propComp = prop.getComponent(BulletProp);propComp.show(this, -this.bulletPropSpeed);}/*** 触摸状态设置* @param value true/false*/public isShooting(value: boolean) {this._isShooting = value;}/*** 改变子弹类型* @param type 类型*/public changeBulletType(type: number) {this._bulletType = type;}/*** 播放音频* @param name 音频名字*/public playAudioEffect(name: string) {this.audioEffect.play(name);}/*** 默认发射子弹*/private _init() {this._currShootTime = this.shootTime;this.playerPlane.init();// this._changePlanMode();}/*** 设计定时器 */private _changePlanMode() {/*** 每10秒改变一次状态,,根据状态就能决定采用什么组合*/this.schedule(this._modeChanged, 10, macro.REPEAT_FOREVER);//组件自带定时器(回调函数,间隔时间,重复次数,延迟时间)}/*** 改变组合状态*/private _modeChanged() {this._combinationInterval++this.createBulletProp();//创建子弹道具}/*** 销毁所有的飞机与子弹*/private _destroyAll() {let children = this.node.children;let length = children.length;let i = 0;for (i = length - 1; i >= 0; i--) {const child = children[i];child.destroy();}children = this.bulletRoot.children;length = children.length;for (i = length - 1; i >= 0; i--) {const child = children[i];child.destroy();}}
}
- UIMain
import { _decorator, Component, Node, systemEvent, SystemEvent, Touch, EventTouch, Vec2 } from 'cc';
import { GameManager } from '../framework/GameManager';
const { ccclass, property } = _decorator;@ccclass('UIMain')
export class UIMain extends Component {@propertypublic planeSpeed = 1;//飞机移动速度@property(Node)public playerPlane: Node = null;//gameManager的引用@property(GameManager)public gameManager: GameManager = null;@property(Node)public gameStart: Node = null;//游戏开始2D UI@property(Node)public game: Node = null;//游戏中2D UI@property(Node)public gameOver: Node = null;//游戏结束2D UIstart() {this.node.on(SystemEvent.EventType.TOUCH_START, this._touchStart, this);this.node.on(SystemEvent.EventType.TOUCH_MOVE, this._touchMove, this);this.node.on(SystemEvent.EventType.TOUCH_END, this._touchEnd, this);//初始化游戏开始页面展示this.gameStart.active = true;}// update (deltaTime: number) {// // [4]// }/*** 再来一局的按钮点击事件*/public reStart() {this.gameOver.active = false;this.game.active = false;//点击按钮播放this.gameManager.playAudioEffect('button');this.gameManager.gameReStart();}/*** 回到主页的按钮点击事件*/public returnMain() {this.gameOver.active = false;this.gameStart.active = true;//点击按钮播放this.gameManager.playAudioEffect('button');this.gameManager.returnMain();}/*** 触摸开始 子弹发射* @param touch * @param event */_touchStart(touch: Touch, event: EventTouch) {//判断第一次触摸屏幕的时候游戏是否开始if (this.gameManager.isGameStart) {this.gameManager.isShooting(true);} else {//游戏开始切换游戏状态this.gameStart.active = false;this.game.active = true;//点击按钮播放this.gameManager.playAudioEffect('button');this.gameManager.gameStart();}}/*** 触摸中* @param touch * @param event */_touchMove(touch: Touch, event: EventTouch) {//判断游戏状态if (!this.gameManager.isGameStart) {return;}//获取当前触点值与上一次触点值之间的差值 const delta = touch.getDelta();//获取当前位置let pos = this.playerPlane.position;//移动位置z与x移动 y轴不变 /*** 乘0.01是因为每移动一段距离移动的都是单位,但是在操作屏幕触点的时候操作的其实是像素,两者之间不能转换,所以只能预估一下大概的移动距离 */this.playerPlane.setPosition(pos.x + 0.01 * this.planeSpeed * delta.x, pos.y, pos.z - 0.01 * this.planeSpeed * delta.y);}/*** 触摸结束 子弹取消发射* @param touch * @param event */_touchEnd(touch: Touch, event: EventTouch) {//判断游戏状态if (!this.gameManager.isGameStart) {return;}this.gameManager.isShooting(false);}
}
- EnemyPlane
import { _decorator, Component, Node, Collider, ITriggerEvent } from 'cc';
import { Constant } from '../framework/Constant';
import { GameManager } from '../framework/GameManager';
const { ccclass, property } = _decorator;// 敌机销毁位置
const OUTOFBOUNCE = 50@ccclass('EnemyPlane')
export class EnemyPlane extends Component {/** 子弹发射周期 */@propertypublic createBulletTime = 0.5// 敌机速度private _enemySpeed = 0;private _needBullet = false//当前是否发射子弹private _gameManager: GameManager = nullprivate _currCreateBulletTime = 0// // 敌机类型// public enemyType = Constant.EnemyType.TYPE1start() {// [3]}//监听事件onEnable() {const collider = this.getComponent(Collider);//获取碰撞组件collider.on('onTriggerEnter', this._onTriggerEnter, this);//碰撞到了立马处理逻辑}//取消事件onDisable() {const collider = this.getComponent(Collider);//获取碰撞组件collider.off('onTriggerEnter', this._onTriggerEnter, this);}update(deltaTime: number) {const pos = this.node.positionconst movePos = pos.z + this._enemySpeed// 因为敌机向西飞所以为正向this.node.setPosition(pos.x, pos.y, movePos)if (this._needBullet) {//发射子弹逻辑this._currCreateBulletTime += deltaTimeif (this._currCreateBulletTime > this.createBulletTime) {this._gameManager.createEnemyBullet(this.node.position)this._currCreateBulletTime = 0}}if (movePos > OUTOFBOUNCE) {//超出边界销毁this.node.destroy()}}/*** 设置飞机移动速度* @param speed 移动速度*/show(gameManager: GameManager, speed: number, needBullet: boolean) {this._gameManager = gameManagerthis._enemySpeed = speedthis._needBullet = needBullet}private _onTriggerEnter(event: ITriggerEvent) {const collisionGroup = event.otherCollider.getGroup();//获取分组if (collisionGroup === Constant.CollisionType.SELF_PLANE || collisionGroup === Constant.CollisionType.SELF_BULLET) {//玩家飞机或者玩家子弹判断掉血// console.log('trigger enemy destroy');//敌方飞机销毁的时候播放音频this._gameManager.playAudioEffect('enemy');this.node.destroy();this._gameManager.addScore();//获得分数}}
}
- SelfPlane
import { _decorator, Component, Node, Collider, ITriggerEvent, AudioSource } from 'cc';
import { Constant } from '../framework/Constant';
const { ccclass, property } = _decorator;@ccclass('SelfPlane')
export class SelfPlane extends Component {public lifeValue = 5;//玩家飞机血量上限public isDie = false;//是否死亡private _currLife = 0;//当前飞机血量private _audioEffect: AudioSource = null;start(){//获取音频组件this._audioEffect = this.getComponent(AudioSource);}//监听事件onEnable() {const collider = this.getComponent(Collider);//获取碰撞组件collider.on('onTriggerEnter', this._onTriggerEnter, this);//碰撞到了立马处理逻辑}//取消事件onDisable() {const collider = this.getComponent(Collider);//获取碰撞组件collider.off('onTriggerEnter', this._onTriggerEnter, this);}public init() {this._currLife = this.lifeValue;//重置飞机血量this.isDie = false;}// update (deltaTime: number) {// // [4]// }private _onTriggerEnter(event: ITriggerEvent) {const collisionGroup = event.otherCollider.getGroup();//获取分组if (collisionGroup === Constant.CollisionType.ENEMY_PLANE || collisionGroup === Constant.CollisionType.ENEMY_BULLET) {//敌方飞机或者敌方子弹判断掉血this._currLife--;//掉血if (this._currLife <= 0) {//判断当前血量是不是小于0this.isDie = true;this._audioEffect.play();console.log('self plane is die');}}}}
cocos做飞机大战笔记【添加游戏音效】相关推荐
- cocos做飞机大战笔记【创建道具】
文章目录 效果 创建道具预制资源 创建道具材质 在引擎中调整道具并添加预制资源 编写脚本 添加碰撞类型与道具类型 子弹脚本 游戏管理脚本 将预制挂在脚本上并查看效果 完整代码 效果 道具运行轨迹大致是 ...
- cocos做飞机大战笔记【开始、游戏中,游戏结束界面】
文章目录 UI界面 创建开始前的场景 创建游戏中的界面 游戏结束的场景 脚本编写 1. 脚本中接受上面三个节点 2. 按钮绑定点击事件 3. 绑定游戏分数 3. 游戏结束逻辑 4. 设置血量 完整代码 ...
- cocos做飞机大战笔记【玩家飞机移动与子弹发射】
文章目录 滚动背景 创建脚本MovingSceneBg 让背景动起来 游戏开发常用框架 飞机移动+子弹发射 管理脚本文件夹 飞机移动 创建子弹材质 将子弹展示在编辑器中 绑定子弹脚本 创建子弹管理类b ...
- cocos做飞机大战笔记【敌机发射子弹】
文章目录 前言 敌机脚本 1. 初始变量 2. 子弹发射逻辑 3. 初始化敌机状态和子弹状态 子弹脚本 1.创建初始变量与飞机子弹类型判断逻辑 2. 状态初始化 游戏管理脚本 完整代码 GameMan ...
- cocos做飞机大战笔记【根据道具设置子弹】
文章目录 前言 定义子弹方向 定义子弹状态及根据状态移动 编写 M.H.S子弹创建逻辑 完整代码 前言 本文会介绍怎么根据拾取道具来改变子弹形态默认子弹是M s子弹 h子弹 定义子弹方向 首先可以想到 ...
- JAVA 实现《飞机大战-II》游戏
前言 <飞机大战-II>是一款融合了街机.竞技等多种元素的经典射击手游.华丽精致的游戏画面,超炫带感的技能特效,超火爆画面让你肾上腺素爆棚,给你带来全方位震撼感受,体验飞行战斗的无限乐趣. ...
- JAVA 实现《飞机大战-I》游戏
前言 <飞机大战-I>是一款融合了街机.竞技等多种元素的经典射击手游.华丽精致的游戏画面,超炫带感的技能特效,超火爆画面让你肾上腺素爆棚,给你带来全方位震撼感受,体验飞行战斗的无限乐趣. ...
- 《飞机大战》安卓游戏开发源码(三)
为什么80%的码农都做不了架构师?>>> 本文章属于原创性文章,珍惜他人劳动成果,转载请注明出处:http://www.pm-road.com/index.php/2014/1 ...
- c语言小程序飞机大战,飞机大战微信小游戏:经典像素飞机大战小程序,点开即玩...
50000+游戏爱好者已加入我们! 每天推荐好玩游戏! 关注我们,沐沐带你发现好游戏! <经典像素飞机大战>游戏小程序好玩吗? <经典像素飞机大战>小游戏怎么玩? 怎么进入&l ...
最新文章
- 网络营销十技之六:联署计划营销
- 第205天:面向对象知识点总结
- web服务器time_wait值过高解决方案
- K8S面试大通关!赶紧收藏!
- 易语言---时间操作
- 再见 Maven,我用它!!!
- 河北职称计算机Excel一,2012年河北省职称计算机Excel操作练习一.doc
- 二、工作量证明链-区块链技术的雏形
- openresty nginx php,diy 你的nginx-OpenResty
- 第 15 章 垃圾回收相关算法
- c语言trunc函数是什么意思,C ++中是否有trunc函数?
- WebService学习之如何使用实体对象作为参数
- Git.Framework 框架随手记--ORM条件组合
- C语言钩子函数获取键盘事件,(C#)透过键盘钩子获取ScanCode/VkCode
- 计算机网络原理大题汇总
- C# 正则表达式数字匹配
- luogu P3369(Splay)
- vue和element框架搭配实现导航条跳转,点击按钮跳转页面导航条也跟着变换
- 关于新款macbook的vscode不能用‘!‘创建模板问题
- 【通信原理】PC上调试MODBUS基本功能(附报文解析)
热门文章
- 数字藏品三方支付合作进件须知
- 教你如何组建家庭卡拉OK系统
- 20155236 《信息安全系统设计基础》课程总结
- ERROR: The Nouveau kernel driver is currently in use by your system;新电脑安装NVIDIA的GPU驱动报错问题解决
- 数据库实验二 SQL数据定义和操作
- 拓荒牛系列一:单例模式
- 【知识整理】Vue里用v-html解析一段富文本,但是里面有些特殊字符却显示不出来
- SQL0668N Operation not allowed for reason code 3 on table TEST.
- java基础练习-超市购物系统
- ​信通院发布:5G应用创新发展白皮书