Unity3D -- Hit UFO adapter模式

2023-10-29

一、游戏内容

改进飞碟(Hit UFO)游戏
游戏内容要求:

  1. 按 adapter模式 设计图修改飞碟游戏
  2. 使它同时支持物理运动与运动学(变换)运动

二、UML图设计

在这里插入图片描述

三、游戏的实现

1. DiskFactory

飞碟工厂实现对不同飞碟的生产、管理以及回收。需要注意的是,这里使用的是带缓存的单实例工厂模式。

  • 单实例:运用模板,可以为每个 MonoBehaviour子类创建一个对象的实例: Singleten<T>
  • 带缓存的工厂:由于对飞碟的多次创建与销毁开销很大,所以我们使用带缓存的工厂来避免频繁的创建与销毁操作。当一个飞碟需要被销毁时,工厂并不直接销毁他,而是将其标记为“空闲”,表示他已经不被场景使用了。在新的飞碟被需要时,工厂不会直接去实例化一个新的飞碟,而是从被标记“空闲”的飞碟中选择可用的实例,只有在当前没有可用的实例时,工厂才会去真正实例化一个新的飞碟。这样一来就能减少游戏不断创建与销毁游戏对象的极大开销。```
public class DiskFactory : MonoBehaviour {
    private int diskID = 0;
    private List<DiskModel>[] disks = new List<DiskModel>[3]; //共有三种飞碟
    bool[,] diskStatus = new bool[3, 20];   //每种飞碟最多有二十个
    int[] size = new int[3];    //保存当前已创建出来的每种飞碟的数量private List<DiskModel> ddisk = new List<DiskModel>();public void Start() {
    for (int i = 0; i < 3; i++) {
        size[i] = 0;                                 
        disks[i] = new List<DiskModel>();
    }
    for (int j = 0; j < 3; j++) {
        for (int i = 0; i < 20; i++) {
            diskStatus[j, i] = true;
        }
    }
}//随机获取一种空闲飞碟,如果飞碟不足则新建一个实例
public DiskModel getDisk() {//随机从三种预制中选择一个飞碟外观
    int type = Random.Range(0, 3);
    DiskModel disk;//尝试获取已经被创建但目前处于空闲态的飞碟
    for (int i = 0; i < size[type]; i++) {
        if (diskStatus[type, i] == false) {
            diskStatus[type, i] = true;
            disks[type][i].disk.SetActive(true);
            disk = disks[type][i];
            disk.setDiskID(diskID);
            diskID++;
            //取出时飞碟不能够有爆炸特效
            disk.disk.GetComponent<ParticleSystem>().Stop();
            return disk;
        }
    }//当前没有可用的空闲飞碟,需要创建
    disk = new DiskModel(type, diskID);
    diskID++;
    disks[type].Add(disk);
    diskStatus[type, size[type]] = true;
    size[type]++;
    disk.disk.GetComponent<ParticleSystem>().Stop();
    return disk;
}//回收飞碟
public void FreeDisk(DiskModel disk) {
    int type = disk.getType();
    int ID = disk.getDiskID();for (int i = 0; i < size[type]; i++) {
        if (disk.getDiskID() == disks[type][i].getDiskID()) {
            diskStatus[type, i] = false;
            return;
        }
    }
}//根据 gameobject 的 instanceID 来查找飞碟
public DiskModel findDisk(int InstanceID) {
    for(int i = 0; i < 3; i++) {
        for(int j = 0; j < size[i]; j++) {
            if (disks[i][j].disk.GetInstanceID() == InstanceID) return disks[i][j];
        }
    }
    return null;
}
}
2. FlyAction

lyAction的基类 SSAction在之前的博客已经介绍过。
FlyAction实际上只是一个简单的直线动作,但是与CCMoveAction不同的是其参数是飞行的角度和速度。

public class FlyAction : SSAction{                           
    private Vector3 angle;
    private float speed;//根据飞行角度和速度获取一个FlyAction
    public static FlyAction GetSSAction(Vector3 angle, float speed) {
    FlyAction action = CreateInstance<FlyAction>();
    action.angle = angle;
    action.speed = speed;
    return action;
}//实现简单的直线飞行
public override void Update() {
    transform.position += angle * Time.deltaTime * speed;
}public override void Start() {
    Update();
}}

3. SSActionManager

FlyActionManager 是本次游戏的动作管理者,管理此次控制飞碟运动的多个Action。
FlyActionManager 具有的功能:

  • 使用Ruler为每个 Action 设置合适的飞行角度和速度
  • 为输入的飞碟寻找一个空闲的 Action 进行飞行动作
  • 在每次 Update 时 FlyActionManager 对被使用的所有 action 进行 Update 调用
public class FlyActionManager : SSActionManager, ActionAdapter {
    public FlyAction[] actions = new FlyAction[20]; //最多建立20个action
    public int[] diskID = new int[20];              //action 所应用的飞碟的ID
    public ISceneController controller;            
    private Ruler ruler;    //根据不同 round 对飞碟的性能参数做设置
    int round;protected void Start() {
    controller = (ISceneController)SSDirector.getInstance().currentSceneController;
    controller.actionManager = this;
    ruler = new Ruler();
    for(int i = 0; i < 20; i++) {
        diskID[i] = -1; //开始时没有可用飞碟,ID 均为-1
    }
}public void Update() {
    for(int i = 0; i < 20; i++) {
        if (diskID[i] != -1) {
            //执行有附着在飞碟上的 action
            actions[i].Update();
        }
    }
}public void setRound(int round) {
    this.round = round;
}public void UFOFly(DiskModel disk) {
    ruler.setRound(round);
    disk.disk.transform.position = ruler.getStart();//设置飞碟的出现位置
    int index = 0;
    for (; diskID[index] != -1; index++) ;//找到空闲的 Action
    actions[index] = FlyAction.GetSSAction(ruler.getAngle(), ruler.getSpeed());
    diskID[index] = disk.getDiskID();
    disk.disk.GetComponent<Rigidbody>().useGravity = false;
    disk.disk.GetComponent<Rigidbody>().velocity = Vector3.zero;
    this.RunAction(disk.disk, actions[index], this);
}public void freeAction(DiskModel disk) {
    for(int i = 0; i < 20; i++) {
        //当飞碟不再需要时,actionManager可以简单的将对应的action设为空闲,而非直接删除 action
        if(diskID[i] == disk.getDiskID()) {
            diskID[i] = -1;
            break;
        }
    }
}}

4. PhyUFOFlyAction

控制飞碟的物理学运动,与运动学类似,但要对游戏对象的rigidbody 进行操作。

public class PhyUFOFlyAction : SSAction {
    private Vector3 angle;  //飞行角度
    float speed;            //飞行初速度private PhyUFOFlyAction() { }
public static PhyUFOFlyAction GetSSAction(Vector3 angle, float speed) {
    //初始化物体将要运动的初速度向量
    PhyUFOFlyAction action = CreateInstance<PhyUFOFlyAction>();
    action.angle = angle;
    action.speed = speed;
    return action;
}public override void Start() {
    //使用重力以及给一个初速度
    gameobject.GetComponent<Rigidbody>().velocity = angle * speed;
    gameobject.GetComponent<Rigidbody>().useGravity = true;
}}

5. PhyFlyActionManager
public class PhyFlyActionManager : SSActionManager, ActionAdapter {public PhyUFOFlyAction[] actions = new PhyUFOFlyAction[20]; //最多建立20个action
public int[] diskID = new int[20];              //action 所应用的飞碟的ID
public ISceneController controller;
private Ruler ruler;                            //根据不同 round 对飞碟的性能参数做设置
int round;protected void Start() {
    controller = (ISceneController)SSDirector.getInstance().currentSceneController;
    controller.actionManager = this;
    ruler = new Ruler();
    for (int i = 0; i < 20; i++) {
        diskID[i] = -1; //开始时没有可用飞碟,ID 均为-1
    }
}public void setRound(int round) {
    this.round = round;
}public void UFOFly(DiskModel disk) {
    ruler.setRound(round);
    disk.disk.transform.position = ruler.getStart();//设置飞碟的出现位置
    int index = 0;
    for (; diskID[index] != -1; index++) ;//找到空闲的 ActionVector3 angle = Vector3.left;
    int flag = Random.Range(0, 2);
    if (flag == 1) angle *= -1;
​
    actions[index] = PhyUFOFlyAction.GetSSAction(angle, ruler.getSpeed());//从ruler中获取初速度和飞行角度,加速度为10
    diskID[index] = disk.getDiskID();
    this.RunAction(disk.disk, actions[index], this);
}public void freeAction(DiskModel disk) {
    disk.disk.GetComponent<Rigidbody>().velocity = Vector3.zero;
    disk.disk.GetComponent<Rigidbody>().useGravity = false;for (int i = 0; i < 20; i++) {
        //当飞碟不再需要时,actionManager可以简单的将对应的action设为空闲,而非直接删除 action
        if (diskID[i] == disk.getDiskID()) {
            diskID[i] = -1;
            break;
        }
    }
}}

6. ISceneController

其主要功能为:

  • 在飞碟数量小于当前 round 值规定时,向场景中发送飞碟;
  • 对场景中所有飞碟进行位置判断,如果超出视野范围则“销毁”飞碟;
  • 判断玩家的射击操作,击中飞碟后进行爆炸特效、增加分数、销毁飞碟等一系列处理;
public class ISceneController : MonoBehaviour, IUserAction {
    public ActionAdapter actionManager;
    public DiskFactory diskFactory;private List<DiskModel> currentDisks = new List<DiskModel>();
    private int diskCount = 0;  //当前场景中的飞碟数量
    private int[] maxCount = { 3, 5, 8 };   //每个round中飞碟需要维持的数目,数目不足时将发送新的飞碟
    private int round = 0;  //当前游戏的 round
    private int currentTrial = 0;//当前游戏的 trail
    private int score = 0;  //获得的分数
    private int[] scoreOfRound = { 10, 20, 30 };   //每个round需要达成的分数目标
    private bool playing = false;
    private int life = 100;  //血量public UserGUI userGUI;void Start() {
    SSDirector director = SSDirector.getInstance();
    director.currentSceneController = this;
    diskFactory = Singleton<DiskFactory>.Instance;
    actionManager = gameObject.AddComponent<PhyFlyActionManager>() as ActionAdapter;
    actionManager.setRound(round);
    userGUI = gameObject.AddComponent<UserGUI>() as UserGUI;
}void Update() {
    //发送飞碟
    if (playing) {
        if (diskCount < maxCount[round]) {
            sendDisk();
        }
        //检查当前游戏状态是否允许升级
        checkStatus();
        removeRemoteDisk();//检查玩家的射击操作
        if (Input.GetButtonDown("Fire1")) {
            Vector3 mp = Input.mousePosition; 
            Hit(mp);
        }
    }
}public void startGame() {
    life = 100;
    playing = true;
}public int getScore() {
    return score;
}public int getLife() {
    return life;
}public int getTrail() {
    return currentTrial;
}public int getRound() {
    return round;
}//检查当前游戏状态
//检查当前trail是否足以进入下一 round
//检查当前round是否足够结束游戏
public void checkStatus() {
    //此时的分数大于设置的阈值,游戏进入下一阶段,分数清零重新计算
    if (score >= scoreOfRound[round]) {
        currentTrial++;
        score = 0;
        
        //当游戏的trail大于3时进入下一 round
        if (currentTrial >= 3) {
            round++;
            life = 100;//当游戏进入到新的round生命值回复
            if (round >= 3) winGame();
            currentTrial = 0;              
            actionManager.setRound(round);
        }
    }
}//判断飞碟是否已经离开视野
private bool outOfSight(Vector3 pos) {
    return pos.x > 35 || pos.x < -35
        || pos.y > 35 || pos.y < -35
        || pos.z > 10 || pos.z < -300;
}//检查当前所有被使用的飞碟是否已经飞出视野
//将飞出视野的飞碟“销毁”
//每销毁一个飞碟就将当前飞碟数量减一,游戏将自动补齐缺少的飞碟
private void removeRemoteDisk() {
    for (int i = 0; i < diskCount; i++) {
        GameObject tmp = currentDisks[i].disk;
        if (outOfSight(tmp.transform.position)) {
            tmp.SetActive(false);
            diskFactory.FreeDisk(currentDisks[i]);
            actionManager.freeAction(currentDisks[i]);
            currentDisks.Remove(currentDisks[i]);
            diskCount--;
            life--;
        }
    }
}//发送飞碟
private void sendDisk() {
    diskCount++;
    DiskModel disk = diskFactory.getDisk(); //从工厂获取新的飞碟
    currentDisks.Add(disk);                 //将新飞碟加入到当前的列表
    actionManager.UFOFly(disk);             //令飞碟进行移动
}//检查玩家是否射中飞碟
public void Hit(Vector3 pos) {
    Ray ray = Camera.main.ScreenPointToRay(pos);
    RaycastHit[] hits;
    hits = Physics.RaycastAll(ray);
    DiskModel hitDisk;for (int i = 0; i < hits.Length; i++) {
        RaycastHit hit = hits[i];
        hitDisk = diskFactory.findDisk(hit.collider.gameObject.GetInstanceID());//射线打中物体
        if (hitDisk != null) {
            score += hitDisk.score;//显示爆炸粒子效果
            hitDisk.disk.GetComponent<ParticleSystem>().Play();//等0.5秒后执行回收飞碟
            StartCoroutine(WaitingParticle(0.50f, diskFactory, hitDisk));
            break;
        }
    }
}public void winGame() {
    playing = false;
    Debug.Log("you win");
}//暂停几秒后回收飞碟
IEnumerator WaitingParticle(float wait_time, DiskFactory diskFactory, DiskModel hitDisk) {
    yield return new WaitForSeconds(wait_time);
    if (hitDisk.disk.active == true) {
        hitDisk.disk.SetActive(false);
        hitDisk.disk.GetComponent<ParticleSystem>().Stop();
        hitDisk.disk.GetComponent<Rigidbody>().velocity = Vector3.zero;
        hitDisk.disk.GetComponent<Rigidbody>().useGravity = false;
        currentDisks.Remove(hitDisk);
        actionManager.freeAction(hitDisk);
        diskFactory.FreeDisk(hitDisk);
        diskCount--;
    }
}}

7. UserGUI

UI的作用比较简单,主要是实现显示当前分数、血量、关卡,以及在关卡之间切换的功能。我在这里主要是参考了师兄师姐的实现,然后按照自己的规则做了一些改动。

    public class UserGUI : MonoBehaviour {
    private IUserAction action;//每个GUI的style
    GUIStyle bold_style = new GUIStyle();
    GUIStyle text_style = new GUIStyle();
    GUIStyle over_style = new GUIStyle();
    bool show;
    int round;
    bool changeRound;
    bool playing = true;void Start() {
    show = true;
    changeRound = false;
    action = SSDirector.getInstance().currentSceneController as IUserAction;
}void OnGUI() {
    if (!playing) {
        if (action.getLife() < 0) {
            GUI.Button(new Rect(0, 0, Screen.width, Screen.width), "YOU LOSE");
        }
        else {
            GUI.Button(new Rect(0, 0, Screen.width, Screen.width), "YOU WIN");
        }
        return;
    }
​
    bold_style.normal.textColor = new Color(1, 0, 0);
    bold_style.fontSize = 16;
    text_style.normal.textColor = new Color(0, 0, 0, 1);
    text_style.fontSize = 16;
    over_style.normal.textColor = new Color(1, 0, 0);
    over_style.fontSize = 25;if (action.getLife() < 0) {
        playing = false;
    }if (changeRound) {
        GUI.Label(new Rect(Screen.width / 2 - 120, Screen.width / 2 - 220, 400, 100), " N E X T   R  O U N D ", over_style);
        if (GUI.Button(new Rect(0, 0, Screen.width, Screen.width), "press to continue")) {
            changeRound = false;
            action.startGame();
        }
    }
    else {
        if (show) {
            GUI.Label(new Rect(Screen.width / 2 - 170, Screen.width / 2 - 180, 400, 100), "大量UFO出现,点击它们即可消灭,快来加入战斗吧", text_style);
            if (GUI.Button(new Rect(Screen.width / 2 - 40, Screen.width / 2 - 120, 100, 50), "开始")) {
                show = false;
                action.startGame();
            }
        }
        else {
            GUI.Label(new Rect(Screen.width - 120, 20, 200, 50), "score:", text_style);
            GUI.Label(new Rect(Screen.width - 70, 20, 200, 50), action.getScore().ToString(), bold_style);
​
            GUI.Label(new Rect(Screen.width - 120, 50, 200, 50), "trial:", text_style);
            GUI.Label(new Rect(Screen.width - 70, 50, 200, 50), (action.getTrail() + 1).ToString(), bold_style);
​
            GUI.Label(new Rect(Screen.width - 120, 80, 50, 50), "life:", text_style);
            GUI.Label(new Rect(Screen.width - 70, 80, 50, 50), action.getLife().ToString(), bold_style);if (action.getRound() > round) {
                round = action.getRound();
                if (round > 2) playing = false;
                changeRound = true;
            }
        }
    }
}}

四、 运行界面与代码传送门

游戏视频地址
代码传送门
在这里插入图片描述

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unity3D -- Hit UFO adapter模式 的相关文章

  • Unity3D C#数学系列之点积

    文章目录 1 定义 2 几何意义 3 向量a 向量b xaxb yayb zazb 4 应用案例 4 1 求两向量的夹角 4 2 判断两向量是否垂直 4 3 判断NPC是否在攻击范围内 4 4 已知入射光线和表面法线求反射光线 5 项目 1
  • 关于Albedo贴图、颜色贴图、Metallic 贴图、Specular贴图、法线贴图、视差贴图、凹凸贴图、Height Map高度贴图、AO 贴图Occlusion 贴图、Emission 贴图等

    在学习unity的过程中 被各种贴图弄得晕头转向 为了弄清楚各种贴图 查询了很多资料 粗略的整理如下 只要耐心看完 对贴图的基本用法基本上就没问题了 1 Albedo 贴图 可以看做是Diffuse颜色贴图 Albedo 反照率 贴图 用于
  • unity 五种旋转方式localEulerAngles、eulerAngles、rotation、localRotation和Rotate的区别

    1 1 transform localEulerAngles 使用localEulerAngles进行旋转的时候 我们要使用transform localEulerAngles new Vector3 x y z 其中 new Vector
  • 树实现客户端红点系统

    树实现客户端红点系统 红点系统总览 demo 设计 代码设 引用 https zhuanlan zhihu com p 85978429 红点系统总览 如上图所示 规划红点系统的时候 我们将整个系统分为独立的三个部分 结构层 驱动层和表现层
  • Unity UGUI的RawImage(原始图片)组件的介绍及使用

    Unity UGUI的RawImage 原始图片 组件的介绍及使用 1 什么是RawImage组件 RawImage是Unity UGUI中的一个组件 用于显示原始图片 与Image组件不同 RawImage可以直接显示原始图片的像素数据
  • Unity3d 简单的按照路径移动物体!

    在TORQUE引擎中 我们只要设置几个点 然后物体会按照这几个点顺序移动 Unity3d也可以的 现在介绍一个很简单的按照路径移动的方法 目标是让蓝色方块沿着紫色方块组成的路径移动 设计思想就是让蓝色方块移动第一个 然后继续移动到第二个 然
  • URP——后期处理特效

    通用渲染管道 URP 包括一个后处理效果的集成实现 如果使用URP 则不需要为后期处理效果安装额外的包 URP与Post Processing Stack v2包不兼容 URP使用体积框架进行后期处理效果 下面的图片显示了一个URP场景有没
  • Unity3D方向键控制人物移动的代码

    代码 var v Input GetAxis Vertical var h Input GetAxis Horizontal transform Translate transform forward Time deltaTime move
  • Unity 实现选框选中物体

    最近在看RTS游戏视频注意到了选框功能 就尝试做了一下 功能实现 脚本挂载到Camera上 要不然OnPostRender 函数无法调用 rectMat新建一个材质球 设置成默认的Sprites就可以了 using System Colle
  • Unity3d中使用OnGUI()函数判断“键盘按下抬起”功能的新方法。

    private bool flagJudgeDownAllow true 开始值为true void OnGUI key Event current FunctionKeyCodeV1 key private void FunctionKe
  • 《Unity Shader入门精要》彩图版免费分享~~~~~

    这书很多地方都要币或者要钱 这里就免费分享了 下面是网盘链接 顺手点个赞或者评论一波呗 下载链接 链接 https pan baidu com s 137Y1nkB6h8HIvKOfwFPnbQ 提取码 f8dw 顺手点个赞 蟹蟹蟹蟹
  • Unity+Pico 手柄按键控制

    一 定义手柄按键API 1 InputDevices GetDeviceAtXRNode 通过XRNode获取对应的设备 2 XRNode是一个枚举类型 包含LeftEye RightEye CenterEye Head LeftHand
  • 【Unity3d】Animator和Animation组件使用注意事项

    一 Animator一般用于人物动画控制 特点是动画是持续的 可能有动作切换 Animation一般用于间断性的动画的控制 比如一个场景特效的播放 只播放一次就完了 二 实测Animation速度比Animator快10 左右 内存占用没测
  • RAIN{INDIE} 自动寻路

    Unity游戏中有较多的自动寻路插件 看过几个 大同小异 而RAIN中的Behavior Tree感觉很好 听名字就知道很条理 下面 就用它做个简单的寻路小例子 首先 导入RAIN的包 结构如下 在使用的过程当中还会产生几个文件夹用来存放E
  • Unity3D如何修改Button显示的文字以及深入了解Button组件

    在创建了一个Button后 结构如图 先仔细观察一下Button的Inspector视图 发现其中竟然有一个叫Button的脚本组件 新建脚本 代码如下 并将该脚本绑定给Canvas组件 using UnityEngine UI using
  • 对Unity3D 静态批处理和动态批处理的理解

    Draw Call就是CPU调用图像编程接口 像OpenGL或者 DirectX 简单来说 Draw Call就是由CPU发起的一个命令 添加到一个命令缓冲区 当GPU完成了上一次的渲染任务之后 会从命令缓冲区的命令队列中再取出一个并执行
  • Unity中UI框架的使用1-添加面板、显示Loading页面

    其中BasePanel和Canvas都是挂在面板的预制物上的 1 导入我们的UI框架 本篇文章中有用的是两个UIPanelType NUIManager和NBasePanel 会放在文章最后供大家使用 2 先将我们做好的Panel设置成预制
  • unity的LOD组件

    本文转载自http blog csdn net huutu article details 52106468 LOD是Level Of Detais 的简称 多细节层次 在游戏场景中 根据摄像机与模型的距离 来决定显示哪一个模型 一般距离近
  • Unity打包WebGL的优化常用操作?

    1 贴图部分优化 如果贴图格式时2048 在不影响画面效果的情况下 改成1024或者5 12 还可以缩小包体 2 压缩和解压缩问题 WebGL打包的时候分三种压缩情况 gzip 比Brotli文件打 但打包快 http和https都支持 B
  • java中Keytool的使用总结

    java中Keytool的使用总结 2011 02 26 15 30 15 分类 在申请Android Map API Key的时候使用到了java中Keytool 下面转一篇介绍java中Keytool的文章 http blog csdn

随机推荐

  • 数据结构与算法之二叉树: Leetcode 98. 验证二叉搜索树 (Typescript版)

    验证二叉搜索树 https leetcode cn problems validate binary search tree 描述 给你一个二叉树的根节点 root 判断其是否是一个有效的二叉搜索树 有效 二叉搜索树定义如下 节点的左子树只
  • 自定义数组类

    在学习c 的过程中 我们经常使用到数组 那怎么去定义一个类去实现数组的功能呢 我们先列出一些经常对数组进行的一些操作 1 创建一个指定容量的数组 2 用已有的数组初始化另一个数组 3 用已有的数组给另一个数组赋值 4 给数组添加元素 给数组
  • Intellij Idea golang插件开发

    1 安装Intellij idea 的golang插件 2 建立目录 D SystemFile GoWorkspace 在系统里面配置GOPATH D SystemFile GoWorkspace 然后在GOPATH目录下面建立 src b
  • 2019-6-18 车牌识别尝试-图像抗扭处理和SVM学习(opencv)

    抗扭曲函数deskew 利用opencv中svm算法学习图片和识别图片 抽取特征向量函数hot分析 车牌识别中涉及字符的识别 识别方法可以用opencv自带的机器学习算法svm 支持向量机 来实现 参见https docs opencv o
  • pandas的定义以及pandas的Series的初步使用(一)

    一 什么是pandas pandas是一种Python数据分析的利器 是一个开源的数据分析包 最初是应用于金融数据分析工具而开发出来的 因此pandas为时间序列分析提供了很好的支持 pandas是PyData项目的一部分 官网 http
  • 大数据实训kaggle比赛-房价预测(下)

    接着开始表演 下面介绍模型 Sequential 序贯模型 它是函数式模型的简略版 为最简单的线性 从头到尾的结构顺序 不分叉 是多个网络层的线性堆叠 实现方法 模型需要知道它所期待的输入的尺寸 出于这个原因 序贯模型中的第一层需要接收关于
  • 计算机视觉论文-2021-06-29

    本专栏是计算机视觉方向论文收集积累 时间 2021年6月29日 来源 paper digest 欢迎关注原创公众号 计算机视觉联盟 回复 西瓜书手推笔记 可获取我的机器学习纯手推笔记 直达笔记地址 机器学习手推笔记 GitHub地址 1 T
  • Python机器视觉--OpenCV进阶(核心)--图像直方图与掩膜直方图与直方图均衡化

    1 图像直方图 1 1 图像直方图的基本概念 在统计学中 直方图是一种对数据分布情况的图形表示 是一种二维统计图表 图像直方图是用一表示数字图像中亮度分布的直方图 标绘了图像中每个亮度值的像素数 可以借助观察该直方图了解需要如何调整亮度分布
  • Python教你一招,爬取链家二手房并做数据可视化分析

    前言 数据采集的步骤是固定 发送请求 模拟浏览器对于url地址发送请求 获取数据 获取网页数据内容 gt 请求那个链接地址 返回服务器响应数据 解析数据 提取我们需要的数据内容 保存数据 保存本地文件 所需模块 win R 输入cmd 输入
  • mybatis 配置打印sql

    1 在mybatis config xml中配置加一个setting 2 如果是spring集成mybatis的话 在sqlSessionFactory配置好configLocation属性 3 在日志文件中配置如下 DEBUG
  • 强化对信息安全事件的预防

    声明 本文是学习信息技术 安全技术 信息安全事件管理 第1部分 事件管理原理 而整理的学习笔记 分享出来希望更多人受益 如果存在侵权请及时联系我们 范围 本部分提出了信息安全事件管理的基本概念和过程阶段 并将这些概念与结构化方法的原理相结合
  • spring常用注解

    1 Controller 在SpringMVC 中 控制器Controller 负责处理由DispatcherServlet 分发的请求 它把用户请求的数据经过业务处理层处理之后封装成一个Model 然后再把该Model 返回给对应的Vie
  • mysql-5.6.16-win32免安装配置方法

    转载自 http blog csdn net fzhmoive article details 20042437 http blog csdn net leili0806 article details 8573636 1 下载MySQL
  • 口袋进化服务器维护,《口袋进化》新手指引.新手指导

    第一只精灵 你做好成为一名训练家的准备了么 作为一枚纯纯的萌新 在刚接触时 建议根据游戏提供的引导 来逐步熟悉基本玩法和养成体系 除此之外 别忘了阅读新手FAQ 在这里 为大家总结了一些新手常见的问题 方便大家享受游戏乐趣 Q 怎么升级 A
  • 编译protobuf静态库依赖顺序问题

    在项目中要加入protobuf协议支持 在编译成功生成程序包动态库后 发现启动运行报错 未定义的protobuf符号xxx等等 用ldd查看so文件 发现确实提示了未找到 大致的makefile文件如下 CXX g CFLAGS g Wal
  • 前后端分离命名规范:JSON下划线,对象小驼峰,以及Jackson常用配置

    在application yml中添加配置即可 spring jackson配置 jackson json和对象的命名转换 property naming strategy SNAKE CASE date format yyyy MM dd
  • QML下如何实现邻近区域无遮挡文字滚动

    在一些嵌入式显示设备中需要实现文字滚动功能 而利用QML是实现文字的滚动大家经常使用的功能 也非常简单 本文主要讲解一下如何避免2个邻近区域的文字滚动重叠问题 大家有没有按照如下的方式来设置文本的滚动 Window visible true
  • 机器学习流程是什么?简述机器学习流程!

    1 抽象成数学问题 明确问题是进行机器学习的第一步 机器学习的训练过程通常都是一件非常耗时的事情 胡乱尝试时间成本是非常高的 这里的抽象成数学问题 指的明确我们可以获得什么样的数据 抽象出的问题 是一个分类还是回归或者是聚类的问题 2 获取
  • 【Linux】深入理解文件缓冲区

    文章目录 问题引入 如何理解缓冲区 缓冲区刷新策略 问题解释 模拟一个文件缓冲区 问题引入 首先看一段代码 include
  • Unity3D -- Hit UFO adapter模式

    目录 一 游戏内容 二 UML图设计 三 游戏的实现 1 DiskFactory 2 FlyAction 3 SSActionManager 4 PhyUFOFlyAction 5 PhyFlyActionManager 6 ISceneC