自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 资源 (1)
  • 收藏
  • 关注

原创 AI行为树理解

基于前面几次的面试,自己进行行了总结:在问道我项目里的怪物AI逻辑的时候,我自己项目里用的是状态机制,算是行为树的一层,但是复杂的行为树有很多很多层,比较能完成的实习NPC或者怪物行为。自己也在百度上找了许多资料,对此谈下我自己的理解! @TOC一级目录二级目录三级目录基础-Basics1、行为树的名字很好地解释了它是什么。不像有限状态机(Finite State Machine)或其他用于 AI 编程的系统,行为树是一棵用于控制 AI 决策行为的、包含了层级节点的树结构。树的最末端——叶子,

2021-12-01 20:07:47 598

原创 九大生命周期函数

Awake函数:一般脚本实例被创建时调用的触发用于游戏对象初始化,注意Awake函数是早于Start函数OnEnable触发时间:当对象变为可用或激活状态时被调用作用:事件监听Start触发时间:Update函数第一次运行前调用作用:用于游戏对象的初始化FixedUpdate触发时间:每隔固定物理时间间隔调用一次 ,可以通过修改物理帧数进行修改作用:用于物理状态的更新Update触发时间:每帧调用一次 作用:用于更新游戏场景和状态LateUpaate触发时间:每帧调用一次(

2021-10-28 00:35:40 15

原创 协程与线程

协程:协同程序。协程的使用前提:直接或间接的继承MonoBehavior才可以使用。不足:会产生外的开销。协程方法与普通方法的区别:被调用时:普通方法被调用时,原来执行的部分保留现场,停止执行,然后去执行要调用的方法,并且,被调用的方法执行完之后才能返回到调用前的状态接着往下执行。。。协同方法的执行是不用等协同方法执行完再执行调用之前原来方法的代码。 而是两者异步执行。为了方便理解,这里可以把原方法(调用普通方法和协同方法的方法设为main。 普通方法叫Function,协同方法叫Coroutin

2021-10-25 23:57:43 1013

原创 ab包打包

利用menuitem对编辑器进行扩展,便于操作、注意点,需要引用io,且存储的位置。using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using System.IO;public class CreateAssetBundles{ [MenuItem("Asset/Build AssetBundles")]//设置为菜单选项 static

2021-10-23 11:53:40 6

原创 观察者模式

观察者模式适用于:当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模式属于行为型模式。一个抽象模型有两个方面,其中一个方面依赖于另一个方面。将这些方面封装在独立的对象中使它们可以各自独立地改变和复用。一个对象的改变将导致其他一个或多个对象也发生改变,而不知道具体有多少对象将发生改变,可以降低对象之间的耦合度。一个对象必须通知其他对象,而并不知道这些对象是谁例子场景:多个观察对象(公司员工)同时监听一个主题对象(

2021-10-20 23:55:21 8

原创 lua实现单例模式

luaSingleton = {}function Singleton:new(o) o = o or {} setmetatable(o,self) self.__index = self return oendfunction Singleton:Instance() if self.instance == nil then self.instance = self:new() end return self.instan

2021-10-19 22:12:24 16 1

原创 里氏替换原则

一、里氏替换原则的定义1、里氏替换原则通俗的来讲就是:子类可以扩展父类的功能,但不能改变父类原有的功能。2、里氏代换原则告诉我们,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。3、里氏代换原则是实现开闭原则的重要方式之一,由于使用基类对象的地方都可以使用子类对象,因此在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象。二、里氏替换原则包含的含义

2021-10-18 23:54:14 17

原创 外观模式c++

外观模式的定义:为子系统中的一组接口(相当与上面的模块)提供一个一致的界面。此模式定义了一个高层接口,这个结口使得这一子系统更加easy使用。说白了就是:我们仅仅需调用高层的函数接口。而不用关心高层内部调用是怎样组合底层方法的。更不用关心底层函数是怎样实现的。应用实例:去医院看病,可能要去挂号、门诊、划价、取药,让患者或患者家属觉得很复杂,如果有提供接待人员,只让接待人员来处理,就很方便。优点:1、实现了子系统与客户端之间的松耦合关系。减少系统相互依赖、提高灵活性、提高了安全性。2、客户端屏蔽了子系统

2021-10-17 23:39:16 22

原创 单例模式c++

单例 Singleton 是设计模式的一种,其特点是只提供唯一一个类的实例,具有全局变量的特点,在任何位置都可以通过接口获取到那个唯一实例。#ifndef _INSTANCE_H_#define _INSTANCE_H_class Instance{private: Instance(){} ~Instance(){} Instance(const Instance& copy){} static Instance* m_pInstance;public: static Ins

2021-10-17 23:38:27 4

原创 c++与c#的区别

1、继承:C++支持多继承,C#类只能继承一个基类中的实现但可以实现多个接口。2、数组:声明 C# 数组和声明 C++ 数组的语法不同。在 C# 中,“[]”标记出现在数组类型的后面。3、数据类型:在C++中bool类可以与整型转换,但C#中bool 类型和其他类型(特别是 int)之间没有转换。long 类型:在 C# 中,long 数据类型为 64 位,而在 C++ 中为 32 位。4、struct 类型:在 C# 中,类和结构在语义上不同。struct 是值类型,而 class 是引用类型。5

2021-10-14 17:13:31 76

原创 UDP何TCP的区别以及进程间的通信

UDP与TCP1.基于连接与无连接2.TCP要求系统资源较多,UDP较少;3.UDP程序结构较简单4.流模式(TCP)与数据报模式(UDP);5.TCP保证数据正确性,UDP可能丢包6.TCP保证数据顺序,UDP不保证进程的通信1.管道管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程间使用。进程的亲缘关系通常是指父子进程关系。2.FIFO:命名管道有名管道也是半双工的通信方式,但是它允许无亲缘关系进程间的通信。3.消息队列消息队列是由消息的链表,存放在内核

2021-10-11 19:33:13 19

原创 用协程的输出10组计数(每组5次,每次1秒)

using System.Collections;using System.Collections.Generic;using UnityEngine;public class Work7_28 : MonoBehaviour { // Use this for initialization void Start () { StartCoroutine("Outthenumber"); } // Update is called once per fr

2021-10-11 11:43:30 17

原创 使用射线通过点击地面控制人物移动

一。设置标签using System.Collections;using System.Collections.Generic;using UnityEngine;public class Tags{ public const string ground = "Ground";}二、通过鼠标点击地面,获取目标位置,并让主角朝向目标位置using System.Collections;using System.Collections.Generic;using UnityEn

2021-10-11 11:36:24 1

原创 Partial关键字

Partial原文链接Partial是局部类型的意思。允许我们将一个类、结构或接口分成几个部分,分别实现在几个不同的.cs文件中。C#编译器在编译的时候仍会将各个部分的局部类型合并成一个完整的类局部类型适用于以下情况:(1) 类型特别大,不宜放在一个文件中实现。(2) 一个类型中的一部分代码为自动化工具生成的代码,不宜与我们自己编写的代码混合在一起。(3) 需要多人合作编写一个类。局部类型的限制(1) 局部类型只适用于类、接口、结构,不支持委托和枚举。(2) 同一个类型的各个部分必须都有修

2021-10-08 17:17:41 5

原创 重写strcpy,时间复杂度和空间复杂度

对代码进行了优化,减少if判断以及行数简单时间复杂度char*myStrcpy(char*to, const char*from){ assert((to != nullptr) && (from != nullptr)); char*addstr = to; while ((*to++ = *from++) != '\0'); return addstr;}时间复杂度:算法执行语句的次数空间复杂度:对一个算法在运行过程中临时占用存储空间的大小。...

2021-09-23 00:59:11 6

转载 数据结构的一些题目,链表

版权所有,转载请注明出处,谢谢!原文链接:https://blog.csdn.net/luckyxiaoqiang/article/details/7393134已知链表结点声明如下:struct ListNode{int m_nKey;ListNode * m_pNext;};1、求单链表中结点的个数//求单链表中结点的个数int numberNode(ListNode* node){ if (node=nullptr) { return; } int num = 0;

2021-09-18 20:36:54 9

原创 输入整型字符串,输出该整数;如:输入“345”,输出345;

通过ASCLL码,字符的相减实现。不过在之前需要判断空字符,以及正负号问题。int atoi1(const char* str){ int num = 0, flag = 1; while (' '==*str) { str++; } if ('+'==*str||'-'==*str) { if ('-'==*str) { flag = -1; } str++; } while (*str>='0'&&*str<='9') {

2021-09-17 16:56:56 15

原创 输入一个整型数组,输出该数组的主要元素,如果不存在主要元素,则输出-1,找出好的算法,需要考虑时间和控件复杂度;

排序以及一些其他的可以封装为函数。#include<iostream>using namespace std;int main(){ int n = 0; cout << "请输入数组的大小" << endl; cin >> n; int *arry = new int[n]; cout << "输入数组的元素" << endl; for (int i = 0; i < n; i++) { cin &g

2021-09-17 16:33:07 4

原创 Cocos-2d怪物爆炸效果函数

1.由于需要实现怪物爆炸时的效果,考虑到每个怪物的图片引用不同,所有返回值为空下面是头文件的定义public://爆炸效果,参数:路径初始图片,添加到的位置,图片初始张,结束张加一,文件路径 void ExplosionEffect(const std::string& filename1, Sprite*sp, int starsum, int sum, const std::string& filename);下面需要到cpp文件中去实现Sprite*spBoom = Sp

2021-06-12 22:55:09 41

原创 Cocos2D-X摇杆

用到相似三角形,和两点间的距离公式。具体实现如下。头文件#ifndef _MONSTER_H_#define _MONSTER_H_#include"cocos2d.h"class Monster:public cocos2d::Sprite{public: //怪物移动 void monsterMove(); //碰撞 //初始化 //创建函数private: //怪物速度 float m_mspeed; //等级 short m_mLv; //伤害 short

2021-05-25 20:50:30 15

原创 转义字符和声明

转义序列包括/*换行符 \n纵向制表符 \v反斜线 \\回车符 \r横向制表符 \t退格符 \b问号 \?进纸符 \f响铃符 \a单引号 \'双引号 \"*/当然,我们也可以使用泛化的转义序列,其形式是\x后紧跟一个或者多个十六进制数字,或者\后紧跟1个、2个或三个八进制数字,其中数字部分表示的是字符对应的数值。声明和定义extern int i;//声明i,而非定义iint j;//声明并定义j//e

2021-05-13 14:51:34 8

原创 算数的整形提升

算术运算的整形提升是在运算时才进行的,如 1/2*0.25结果是0,因为第一个运算的时候没有进行整形提升,运算开始之前并不会进行整形提升

2021-04-16 22:05:23 11

原创 2021-03-16 矩形的碰撞

#矩形的碰撞#头文件#ifndef _RECTANGLE_H_#define _RECTANGLE_H_class CRctangle{public: CRctangle(); CRctangle(float Leftx, float Lefty, float rightx, float righty); bool Collision(CRctangle rctangle);//碰撞函数 ~CRctangle();//析构函数private: float m_LeftTopX;

2021-03-16 15:08:35 22

原创 2020-11-17

输入年月日,判断这一天是这一年第几天#include<iostream>using namespace atd;void yearmonth(int year, int month, int day)//4.输入某年某月某日,判断这一天是这一年的第几天?{ int calender[12] = { 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; if (year % 4 == 0)//如果是闰年,则不变 {

2020-11-17 20:31:51 15

原创 2020-11-09

vs2013,scanf输入的报错。#include<iostream>using namespace std;#include<stdio.h>int maxn(int a, int b, int c){ a=a > b ? a : b; return a > c ? a : c;}char chchange(char a){ if ('a'<=a&&a<='z') { a = a + ('A' - 'a');

2020-11-09 00:13:57 10

meeting_01.mp4

meeting_01.mp4

2021-09-13

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人 TA的粉丝

提示
确定要删除当前文章?
取消 删除