自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

ForeverDirect的博客

Game Developer

  • 博客(67)
  • 收藏
  • 关注

原创 do{...} while(0) 用意

linux内核和其他一些开源的代码中,经常会遇到这样的代码:do { // ...}while(0)这样的代码一看就不是一个循环,do…while表面上在这里一点意义都没有,那么为什么要这么用呢?实际上,do{…}while(0)的作用远大于美化你的代码。查了些资料,总结起来这样写主要有以下几点好处:1、辅助定义复杂的宏,避免引用的时候出错:举例来说,假设你需要定义这样一个宏:#define DOSOMETHING()\ foo1();\

2020-08-03 11:12:17 224

原创 使用#import #include与@class相关知识点

使用#import #include与@class相关知识点一、#include与#import区别#include <xxx.h> 和 #import<xxx.h>用于对系统自带的头文件的引用,编译器会在系统文件目录下查找该文件#include "xxx.h" 和 #import "xxx.h"用户自定义的文件用双引号引用,引用时编译器首先会在用户目录下查找,然后去安装目录中查找,最后在系统文件目录中查找#import和#include同样可以将头文件引入到我们

2020-07-21 16:42:08 268

原创 C++中inline用法

1.引入内联关键字原因在C++中,解决一些频繁调用的小函数大量消耗栈空间(栈内存),特别引入inline修饰符。因为栈空间是有限的,频繁大量的使用会造成栈空间不足而程序出现问题(函数死循环或者递归层级过深)若定义函数宏,不会招致函数调用带来的额外开销,下面这个宏夹杂着宏实参,调用函数f:#define CALL_WITH_MAX(a, b) f( (a) > (b) ? (a) : (...

2020-04-12 11:54:45 426

原创 C回调函数用意剖析

1.简述回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数维基百科对回调的解析In computer programming, a callback is any executable code that is passed as an argument to other code, whi...

2020-04-11 09:33:58 217

原创 马克飞象自定义代码段风格

马克飞象自定义代码段风格个人比较喜欢用马克飞象书写博客和笔记,但是是黑底的代码风格,故修改:https://highlightjs.org/static/demo/这里会展示所有的代码样式:看中了C++代码风格,然后选择css风格:https://github.com/isagalaev/highlight.js/tree/master/src/styles点击进去拷贝css内容:...

2020-03-29 12:03:47 435

原创 Android-CMakeLists.txt 链接第三方库(动态或者静态库)到自己的生成库中

最近在做关于NDK开发的项目,编译方式通过cmake。如何将第三方动态链接库连接到自己生成的动态库中,按照以下步骤:1.首先看目录结构:首先将第三方库复制到jniLibs下,并创建对应的CUP平台目录2. CMakeLists.txt方式一:# For more information about using CMake with Android Studio, read the# ...

2019-12-30 21:54:07 2405 2

原创 c++中override和final

1. override保留字表示当前函数重写了基类的虚函数目的:1.在函数比较多的情况下可以提示读者某个函数重写了基类虚函数(表示这个虚函数是从基类继承,不是派生类自己定义的);2.强制编译器检查某个函数是否重写基类虚函数,如果没有则报错。用法:在类的成员函数参数列表后面添加该关键字既可,被override修饰后如果父类无对应的虚函数则报错,无法override。例子:class Base...

2019-12-23 22:04:15 668 1

原创 C++ map下标操作[]和insert区别

在构建map时候,我们是使用insert和[]有什么区别呢?哪个更好呢?哪个效率更高呢?哪个更安全呢?首先需要明确的是:map中不允许存在相同的keyBecause map containers do not allow for duplicate key values, the insertion operation checks for each element inserted...

2019-12-18 21:49:31 2128 1

原创 Unity Vector3类

Vector 是向量,矢量的意思,向量既有大小,又有方向。Verctor3 就是三维向量,一个三维向量会有三个分量,分别是 x,y,zusing UnityEngine;using System.Collections;public class Test : MonoBehaviour { // Use this for initialization void Star...

2019-11-19 22:37:04 916

原创 Unity跨平台的机制原理

简单梳理下Unity跨平台的机制原理前言首先需要了解的是,Unity3D的C#基础脚本模块是通过Mono来实现的什么是Mono?参考下百度百科:Mono是一个由Novell公司(由Xamarin发起)主持的项目,并由Miguel de lcaza领导的,一个致力于开创.NET在Linux上使用的开源工程。它包含了一个C#语言的编译器,一个CLR的Runtime,和一组类库,并实现了 ADO...

2019-11-16 22:56:25 406

原创 Unity Shader入门精讲

基础知识Unity 渲染需要两个组件 Mesh Filter 和 Mesh RendererMesh Filter:存储一个Mesh(网格,模型的网格,就是模型的由哪些三角面组成,组成一个什么样子的模型,三角面的一些顶点信息)Mesh Renderer: 用来渲染一个模型外观,按照Mesh的顶点,颜色以及Material(材质)控制模型渲染的样子Material(材质):简单理解为贴图(T...

2019-11-14 22:06:27 268

原创 Unity 四元数API详解

Quaternion类Quaternion(四元数)用于计算Unity旋转。它们计算紧凑高效,不受万向节锁的困扰,并且可以很方便快速地进行球面插值。 Unity内部使用四元数来表示所有的旋转。Quaternion是基于复数,并不容易直观地理解。 不过你几乎不需要访问或修改单个四元数参数(x,y,z,w); 大多数情况下,你只需要获取和使用现有的旋转(例如来自“Transform”),或者用四元...

2019-11-13 22:17:21 468

原创 Unity预制体Prefab及其实例化(Instantiate)

简介:在Unity3D工程建设中,Prefabs(预设)是很常用的一种资源类型,是一种可以被重复使用的游戏对象可以被置入多个场景中,也可以在一个场景中多次置入在场景中增加一个Prefab,就是实例化了一个Prefab所有的Prefab实例都是Prefab的克隆,在运行中生成的对象会有Clone标记只要Prefab原型发生改变,所有的Prefab实例多会发生变化Prefabs用法,创...

2019-11-12 23:16:47 16153

原创 Unity Invoke以及InvokeRepeating延时函数用法

Invoke和InvokeRepeating是MonoBehaviour中的两个内置延时方法InvokeInvoke(methodName:string, time:float): void;methodName:方法名time:多少秒之后执行InvokeRepeatingInvokeRepeating(methodName: string, time: float, rep...

2019-11-12 22:55:34 1732

原创 Unity官方教程 - 示例代码

Roll A BallPlayerController.cs/** PlayerController.cs*/using UnityEngine;using UnityEngine.SceneManagement;using UnityEngine.UI;public class PlayerController : MonoBehaviour{ public ...

2019-11-11 22:54:58 1643

原创 Unity基础随笔

基于公司的项目需求,不得已从自研引擎转向Unity技术支持,去支持公司新开的Unity游戏,故最近转战学习Unity。笔记:Unity 脚本基类 MonoBehaviour 与 GameObject 的关系,以及可重写函数四元数和旋转模型(Model):材质(Material)着色器(Shader)贴图和其他参数,贴图也算一种参数网格渲染器(Mesh Render),动画,...

2019-11-05 22:44:11 272

原创 ReacNative Android端事件机制主动调动JS界面

开发了半年的ReactNative写的App,一直是JS通过Bridge调用java(或oc),然后转调用cpp逻辑,最多再是cpp逻辑回调java(或oc)。这些都是简单的事情。最近有新需求,通过滑动手势加载新的资源,每次滑动切换资源的时候必须显示Loading提示。不然直接卡死,用户体验性太差。这里就牵扯到cpp逻辑要直接调用JS界面了。用到了ReactNative的事件机制。cpp 调用...

2019-11-02 23:35:05 129

原创 dynamic_cast和 static_cast的区别

dynamic_cast:dynamic_cast < type-id > ( expression)该运算符把expression转换成type-id类型的对象。Type-id必须是类的指针、类的引用或者void*;如果type-id是类指针类型,那么expression也必须是一个指针,如果type-id是一个引用,那么expression也必须是一个引用。dynamic_...

2019-09-18 22:58:42 3013

原创 C++异常处理

C++异常处理异常时程序在执行期间产生的问题。C++异常是指在程序运行时发生的特殊情况,比如尝试除以0的操作,以及dynamic_cast强制类型转换(基类指针指向的内存地址无效等)…异常提供了一种转移程序控制权的方式。C++异常处理涉及到三个关键字:try catch throwthrow:当问题出现时,程序会抛出一个异常,这是通过throw关键字来完成的catch:在您想要处理问题的地...

2019-09-18 22:25:14 390

原创 HRESULT判断宏

1.SUCCEEDED原型如下:BOOL SUCCEEDED( HRESULT hr);对应的定义(具体的实现):#define SUCCEEDED(hr) (((HRESULT)(hr)) >= 0)2.FAILED原型如下:BOOL FAILED( HRESULT hr);对应的定义(具体的实现):#define FAILED(hr) (((HRESU...

2019-08-08 20:54:03 416

原创 C++11 std::to_string

一般常用的转换字符串的方法std::stringstream,但是效率较低;目前C ++11提供了std::to_string效率方面:C风格的sprintf()没有动态分配内存效率最高;std::to_string其次;std::stringstream效率最差从C++17开始,std::to_string的效率将不差于sprintf,同时有类型更安全的转换函数std::to_char...

2019-02-14 22:32:59 14817

原创 C++ stringstream介绍以及使用

文章目录背景1. istringstream2. ostringstream3. stringstream背景C++引入了ostringstream istringstream stringstream这三个类,包含#include&amp;amp;lt;sstream&amp;amp;gt;头文件istringstream类似于C++风格字符串的输入操作ostringstream类似于C++风格字符串的输出操作st...

2019-01-05 12:39:58 1976 1

原创 C++基础-string截取、替换、查找子串函数

截取子串s.substr(pos, n) 截取s中从pos开始(包括0)的n个字符的子串,并返回s.substr(pos) 截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回替换子串s.replace(pos, n, s1) 用s1替换s中从pos开始(包括0)的n个字符的子串查找子串s.find(s1) 查找s中...

2018-12-08 13:27:00 323 2

原创 C++ regex 正则表达式的使用

在C++中,有三种正则表达式可以选择使用:C++11 regex、POSIX regex 和 boost regexC++ regex函数有3个:regex_match、regex_search 、regex_replaceregex_matchregex_match是正则表达式匹配的函数,下面以例子说明// regex_match example#include &amp;amp;lt;iostrea...

2018-12-07 23:55:02 471

原创 C++ rapidjson使用示例

rapidjson使用示例文章目录rapidjson使用示例本示例所用环境示例代码与注释如果想深入学习rapidjson工具,官方文档肯定是必须看一看的本示例所用环境引擎版本:cocos2d-x 3.10示例代码与注释说明:我是直接使用原本引擎创建了新的cocos2dx工程,然后略微修改了HelloWorldScene.cpp中的代码。为了方便,使用rapidjson生成json串,...

2018-12-07 21:46:43 1307

原创 C++:替换文本中的指定字符串

替换文本文件或者二进制文件中的指定字符串// 方法一// 将源文件中的特定字符串替换,内容输出到新文件中bool FileStringReplace(ifstream &amp;amp;amp;amp;amp;amp;instream, ofstream &amp;amp;amp;amp;amp;amp;outstream){ string str; size_t pos = 0; while (getline(instream, str)) // 按行读取

2018-10-07 13:08:08 15828 5

原创 8个实战及常用Shell脚本编写

注意事项:1).开头加解释器:#!/bin/bash2).语法缩进,使用四个空格,多加注释说明3).命名建议规范:变量名大写,局部变量小写,函数名小写4).默认变量是全局的,函数中使用local指定局部变量5).调试脚本两个命令:set -e遇到执行非0时退出脚本,set -x打印执行过程6).一定要先测试,在加入到工程中1.获取随机字符串或数字获取随机8位字符串获取随机8位数...

2018-10-02 12:46:38 7448

原创 使用Android Studio构建Hello World工程

这是谷歌公司为安卓开发制造的编辑器,功能太强大了,太复杂了,乍一看去让人眼花缭乱,我这人又喜欢简洁的东西,一时间还真是头大。其实我也不知道为啥要接触Android开发,因为我原本是一个iOS开发。大概是因为我缺钱吧,那就从头开始吧,不过我学习的节奏和别人完全不同,我喜欢优哉游哉地学习,并且喜欢寻找自己不懂的点攻克,别人一般是看不懂的。好现在进入正题。这就是传说中的Android Studio...

2018-09-21 23:55:44 192

原创 汉字的ASCII码对照表

GB2312和GBK每一个汉字由2个字节组成,这2个字节的ASCII码大小分别是: gb2312:high8 = 0xa1–&amp;gt;0xfe (161 - 254) low8 = 0xa1–&amp;gt;0xfe (161 - 254)gbk:high8 = 0x80–&amp;gt;0xfe (128 - 254) low8 = 0x40–&amp;gt;0xfe (64 - 254)GB23...

2018-09-10 21:42:16 80768

原创 iOS之NSFilemanager文件管理(沙盒)

iOS因为沙盒机制,故只能访问通讯录、相册和APP内的文件,接下来就介绍如何进行文件管理。App所产生的数据都存储在自己的沙盒中,一般沙盒有三个文件:“`Documents、Library和tmpDocuments:这个目录存放用户数据。存放用户可以管理的文件;iTunes备份和恢复的时候会包括次目录。 Library:主要使用它的子文件夹,我们熟悉的NSUserDefaults...

2018-09-10 20:31:47 504

原创 Objective-C快速入门

目前工作需要,简单了解了下OCObjective-C的方法与函数 方法是唯对象所有函数是不依赖与对象存在的 方法 - (void)test; 类型要用()括起来声明 必须写在@interface- @ end之间,实现必须写在@ implementation- @ end之间 只能由对象来调用 可以直接访问成员变量 Objective-C...

2018-08-24 13:24:03 609

原创 CMake 使用方法 & CMakeList.txt

CMake 简介CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。他能够输出各种各样的makefile或者project文件,能测试编译器所支持的C++特性,类似UNIX下的automake。CMake使用方法CMake的所有的语句都写在一个叫:CMakeLists.txt的文件中。当CMakeLists.txt文件确定后,可以用ccmake命...

2018-04-22 11:06:20 2315

原创 afx.h stdafx.h以及VS项目些许思考

一、 该头文件包含一些定义与设置,为MFC提供最基本的支持,将各种松散的东西组织起来,同时为MFC类库的后续建立提供方便。一个最简单的MFC只需要afxwin.h即可,而afxwin.h开始就是#include 《afx.h》 具体来说,afx.h内容如下: 1.编译选项设置,还包括warning等的预设值 2.一些头文件:afxver_h,C相关头文件,一些win32库,包括MFC库 ...

2018-04-21 19:57:10 2164 1

原创 C++预编译头文件

一、 在实际项目开发中,当代码量以及文件数量达到一定规模时,编译项目往往需要耗费比较长的时间。此时我们可以为一些配置或者逻辑引入一些脚本(游戏开发中通常为lua);同时我们可以在工程中使用预编译头文件,即工程中总有那么一堆头文件是几乎所有cpp都必须包含的,而且这些头文件中的代码是不会经常改变的。使用预编译头我们便可以将这些头文件只编译一次,然后可供其他所有cpp使用。 二、 ...

2018-04-21 17:43:48 1929

原创 数据库常见面试题

(一)什么是存储过程?有哪些优缺点?存储过程是一些预编译的SQL语句。可以说是一个记录集,有一些T-SQL语句组成的代码块,这些T-SQL语句代码像一个方法一样实现一些功能(对单表或多表的增删改查),然后再给这些代码块取一个名字,再用到这个功能的时候调用就行。存储的过程是一个预编译的代码块,执行效率比较高一个存储过程替代大量的T-SQL语句,可以降低网络通信量,提高通信速率可以在一定程...

2018-03-04 15:45:46 248

原创 浅谈--Memcached

memcached是什么?memcached 是以LiveJournal 旗下Danga Interactive 公司的Brad Fitzpatric 为首开发的一款软件。现在已成为 mixi、 hatena、 Facebook、 Vox、LiveJournal等众多服务中 提高Web应用扩展性的重要因素。 许多Web应用都将数据保存到RDBMS中,应用服务器从中读取数据并在浏览器中显示。

2018-01-28 16:04:41 182

原创 git常用命令

一、代码上传(1)git init : 初始化git仓库 (2)git add –all / git add . 添加本地文件到暂存区 (3)git commit -m “你的注释” 添加本地文件到版本库 (4)git remote add origin https://git.coding.net/ckq/dianshang.git 添加远程仓库地址 (5)git push orig

2018-01-24 01:45:58 167

原创 工厂模式

1.简单工场模式只有一个工厂,只能生产一个类别的产品(所有产品类都是从一个基类派生)当需要增加新的产品类,就需要改动工厂类它的主要特点是需要在工厂类中做判断,从而创造相应的产品。当增加新的产品时,就需要修改工厂类。通俗实例: 有一家生产处理器核的厂家,它只有一个工厂,能够生产两种型号的处理器核。客户需要什么样的处理器核,一定要显示地告诉生产工厂。enum CTYPE {

2018-01-18 21:22:26 201

原创 人工智能:矢量数学和运动物理学

学习人工智能,矢量数学和运动物理学的特性必须熟悉 人工智能体的设计离不开矢量数学和运动物理学方面的知识矢量数学:设计游戏的人工智能时常用到矢量数学。从计算一个游戏智能体射击的方向到表达一个神经网络的输入输出,矢量无处不在。简要介绍一些矢量数学需要掌握的知识:笛卡尔坐标系,二维空间xy平面描述物体的位置 三维空间增加z轴,xyz构成三维坐标系统 一维空间是指只由一条线

2018-01-13 00:06:14 731

原创 TCP分片/IP分片区别

IP/TCP分片

2017-10-15 21:31:21 755 1

空空如也

空空如也

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

TA关注的人

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