LudoArt Blog

The programmer of tomorrow is the magician of the future.

【游戏编程模式】观察者模式

观察者模式

【游戏编程模式】观察者模式 观察者应用广泛,如MVC架构。 Java将其放到了核心库中(java.util.Observer),而C#直接将其嵌入了语法(event关键字) 案例:成就解锁 假设我们向游戏中添加了成就系统。 它存储了玩家可以完成的各种各样的成就,比如“杀死1000只猴子恶魔”,“从桥上掉下去”,或者“一命通关”。 要实现这样一个包含各种行为来解锁成就的系...

【游戏编程模式】享元模式

享元模式

【游戏编程模式】享元模式 案例一:森林 每棵树都有一系列与之相关的位: 定义树干,树枝和树叶形状的多边形网格。 树皮和树叶的纹理。 在森林中树的位置和朝向。 大小和色彩之类的调节参数,让每棵树都看起来与众不同。 如果用代码表示,那么会得到这样的东西: class Tree { private: Mesh mesh_; Texture bark_; T...

【游戏编程模式】命令模式

命令模式

【游戏编程模式】命令模式 命令是具现化的方法调用。 命令模式是一种回调的面向对象实现。 案例 在每个游戏中都有一块代码读取用户的输入——按钮按下,键盘敲击,鼠标点击,诸如此类。 这块代码会获取用户的输入,然后将其变为游戏中有意义的行为。 下面是一种简单的实现: void InputHandler: handleInput() { if (isPressed...

Unity中级编程

Unity中级编程 创建属性 从类的外部去访问这个类的成员变量,有两种方法:第一种是通过定义公共变量,第二种是通过使用属性的办法(更佳) 使用属性的办法可以完成公共变量无法实现的操作: 通过省略get或set将字段变为只写或只读 可以将访问器视为函数,这表示你可以在访问器内部执行其他操作 using UnityEngine; using System.Collectio...

【C++2.0新特性】默认的方法和禁用的方法

默认的方法和禁用的方法 假定要使用某个默认的函数,而这个函数由于某种原因不会自动创建。 例如,提供了移动构造函数,因此编译器不会自动创建默认的构造函数、复制构造函数和复制赋值构造函数。 在这些情况下,可以使用关键字default显式地声明这些方法的默认版本: class Someclass { public: Someclass(Someclass &&...

【C++2.0新特性】initializer_list

initializer_list 模板initializer_list 可以使用初始化列表语法将STL容器初始化为一系列值: std::vector<double> payments {45.99, 39.23, 19.95, 89.01}; 这将创建一个包含4个元素的容器,并使用列表中的4个值来初始化这些元素。 这之所以可行,是因为容器类现在包含将 initiali...

【C++2.0新特性】explicit for ctors

explicit explicit for ctors taking one argument struct Complex { int real, imag; Complex(int re, int im=0):real(re), imag(im) {} Complex operator+(const Complex& x) ...

【C++2.0新特性】统一的初始化

统一的初始化 C++11扩大了用大括号括起的列表(初始化列表)的适用范围,使其可用于所有内置类型和用户定义的类型。使用初始化列表时,可以添加等号,也可不添加。 int x = {5}; double y {2.75}; short quar[5] {4, 5, 2, 76, 1}; int * ar = new int[4] {2, 4, 6, 7}; /*创建对象时,也可以使用大括号...

【C++2.0新特性】可变模板参数

可变参数模板 可变参数模板可以创建可接受可变数量参数的模板函数和模板类。如以下代码: /*处理边界情况,即0个参数的情况*/ void print() { } /*print函数接收一个参数firstArg和一包参数args*/ template <typename T, typename... Types> void print(const T& firstArg...

nullptr和std::nullptr_t C++11 let you use nullptr instead of 0 or NULL to specify that a pointer refers to no value. For example: void f(int); void f(void*); f(0); /*calls f(int)*/ f(NULL); /*c...