《天使脚本手册中文版》是一本面向剧本创作爱好者的实用指南,它提供了从创意构思到最终成稿的全流程指导。书中不仅涵盖了故事结构、人物塑造等基础理论知识,还分享了大量实战技巧和案例分析,适合各层次编剧阅读参考。
### Angel Script 开发技术手册知识点解析
#### 一、初识 Angel Script
##### 1.1 Angel Script 简介
Angel Script (AS) 是一种轻量级的脚本语言,主要用于游戏开发和软件扩展功能。它提供了一种简单有效的方法来嵌入脚本功能到应用程序中。
- **特性**:支持高级编程特性如对象导向编程(OOP)、异常处理等,并且具有高效的执行速度。
##### 1.2 特点
- 跨平台支持:AS 可以运行在多种操作系统上,包括 Windows、Linux 和 MacOS。
- 易于集成:AS 提供了一系列 API,使得 C++ 程序能够轻松地与脚本进行交互。
- 高性能:尽管是一种解释型语言,但 AS 通过预编译等方式提高了执行效率。
- 丰富的文档:提供了详细的文档和示例代码,便于学习和使用。
#### 二、编写第一个 HelloWorld 示例
##### 2.1 创建项目
在 Code::Blocks 开发环境中创建一个新的控制台应用程序项目。将 Angel Script 的源码包解压并将 `include` 和 `source` 目录添加到项目中。
##### 2.2 设置开发环境
- 包含必要的头文件:`#include angelscript.h`
- 创建脚本引擎实例:`asIScriptEngine* engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);`
- 注册错误处理函数:`engine->SetMessageCallback()`
- 注册全局函数:使用 `RegisterGlobalFunction()` 将 C++ 函数注册到脚本引擎,以便脚本可以调用。
##### 2.3 创建脚本模块
创建一个脚本模块:
```cpp
asIScriptModule* mod = engine->GetModule(module001, asGM_ALWAYS_CREATE);
```
添加脚本代码:`mod->AddScriptSection(example001, ascript.c_str());`
编译模块:`mod->Build();`
##### 2.4 执行脚本函数
- 创建上下文环境:`asIScriptContext* ctx = engine->CreateContext();`
- 获取函数标识 ID: `int funcID = engine->GetModule(module001)->GetFunctionIdByDecl(void PrintHello());`
- 设置参数并执行函数。
- 获取函数返回值。
#### 三、面向对象编程支持
##### 3.1 C++ 对象注册
**注册 C++ 类**: 使用 `engine->RegisterObjectType()` 和 `engine->RegisterObjectBehaviour()` 来注册自定义的 C++ 类型和行为。
**注册成员函数**: 使用 `engine->RegisterObjectMethod()` 注册类的成员函数。
##### 3.2 C++ 类成员函数调用
在脚本中可以通过对象实例调用 C++ 类的成员函数,需要确保这些成员函数已经被正确地注册到了脚本引擎中。
##### 3.3 返回对象
当脚本中的函数返回一个对象时,需确保该对象类型已被正确注册。通过 `engine->RegisterObjectProperty()` 可以注册对象属性。
##### 3.4 定义脚本类
**脚本中定义类**: 在脚本中定义自己的类,并使用 `engine->RegisterScriptClass()` 进行注册。
**继承与多态**: 支持类的继承和多态性,可以在脚本中定义基类和派生类,并实现多态行为。
#### 四、其他概念
##### 4.1 异常处理
- **错误处理机制**: 使用 `SetMessageCallback()` 设置错误处理回调函数来处理脚本运行时可能出现的错误或异常。
- **自定义异常**: 支持自定义异常类型的定义和抛出。
##### 4.2 性能优化
**预编译**: 预编译脚本可以提高执行效率。
**动态链接**: 动态加载与卸载脚本模块,支持使用动态库(DLL)。
##### 4.3 与其他语言的共通点
- **通用概念**: Angel Script 中的一些基本概念如变量类型、函数定义和异常处理等,与其他脚本语言具有共同之处。
- **可移植性**: Angel Script 和其他跨平台的语言在不同操作系统上的使用方式相似。