更新文档

This commit is contained in:
小李xl 2023-03-29 01:49:01 +08:00
parent 2ae188c579
commit 89dd0c8e38

View File

@ -104,13 +104,13 @@ public partial class YourActivity : ActivityObject
}
```
为了方便区分物体类型, 可以使用`ActivityIdPrefix`类中的常量来添加`id`前缀, 目前支持的类型如下:
* Role: 角色
* Enemy: 敌人
* Weapon: 武器
* Bullet: 子弹
* Shell: 弹壳
* Other: 其他类型, 例如门, 箱子等
* Test: 测试物体
* **Role**: 角色
* **Enemy**: 敌人
* **Weapon**: 武器
* **Bullet**: 子弹
* **Shell**: 弹壳
* **Other**: 其他类型, 例如门, 箱子等
* **Test**: 测试物体
例如我们创建一个敌人, 那么`[RegisterActivity()]`就可以这么写:
```csharp
@ -123,7 +123,7 @@ public partial class YourActivity : ActivityObject
var enemy = ActivityObject.Create<Enemy>(ActivityIdPrefix.Enemy + "0001");
```
### 3.2.4.自定义`RegisterActivity`
#### 3.2.4.自定义`RegisterActivity`
某些情况下需要更改`RegisterActivity`的参数, 或者需要对实例化出来的`ActivityInstance`进行统一的操作, 那么就需要我们自己写一个子类来继承`RegisterActivity`.
操作`ActivityInstance`需要重写:
```csharp
@ -138,9 +138,9 @@ public virtual void CustomHandler(ActivityObject instance)
例子: 注册武器, [RegisterWeapon.cs](../DungeonShooting_Godot/src/game/item/weapon/RegisterWeapon.cs)
由于创建武器必须指定武器属性数据, 那么原来的`[RegisterActivity()]`就不适用了, `RegisterWeapon`重写了构造函数, 改变了初始化参数, 并且重写`CustomHandler()`, 对`ActivityInstance`进行初始化属性操作
### 3.2.5.`ActivityObject`常用功能
#### 3.2.5.`ActivityObject`常用功能
#### 自定义组件
##### 自定义组件
这个功能类似于`Unity`的`MonoBehaviour`, 组件必须继承`Component`类, 组件的作用是拆分功能代码, 开发者可以将相同功能的代码放入同一个组件中, 与`Godot`的`Node`不同的是, 挂载到`ActivityObject`上的组件并不会生成一个`Node`节点, 它相比于`Node`更加轻量
自定义组件代码:
@ -156,7 +156,7 @@ var component = activityInstance.AddComponent<MyComponent>();
```
注意: 一个`ActivityObject`上不允许挂载多个相同的组件
#### 运动控制
##### 运动控制
`ActivityObject`的移动由自身的`MoveController`组件控制, 非特殊情况下不要直接修改`ActivityObject`的位置, 而是使用`MoveController.AddConstantForce()`函数来添加外力
```csharp
//添加一个向右的外力, 速度为100
@ -167,7 +167,7 @@ var force = activityInstance.MoveController.AddConstantForce(new Vector2(0, 100)
```
物体的运动方向就是所有外力总和的方向, 通过`MoveController.Velocity`可以获取当前运动速度
#### 垂直方向运动
##### 垂直方向运动
当游戏中需要制作飞行物体或者模拟投抛运动时, 就需要控制物体纵轴所处高度, `ActivityObject`中提供了一系列控制纵轴方向运动的属性和函数, 以下列举几个关键属性和函数:
```csharp
/// <summary>
@ -249,7 +249,7 @@ public void Throw(float altitude, float verticalSpeed, Vector2 velocity, float r
```
调用示例, 模拟弹壳投抛落在地上弹跳的过程
```csharp
var startPos = activityInstance.Master.GlobalPosition;
var startPos = GlobalPosition;
var startHeight = 6;
var direction = GlobalRotationDegrees + Utils.RandomRangeInt(-30, 30) + 180;
var verticalSpeed = Utils.RandomRangeInt(60, 120);
@ -259,4 +259,63 @@ var shell = ActivityObject.Create<ShellCase>(ActivityIdPrefix.Shell + "0001");
shell.Throw(startPos, startHeight, verticalSpeed, velocity, rotate);
```
#### 协程
##### 协程
该功能与`Unity`的协程功能类似, 在协程函数中通过`yield`关键字暂停执行后面的代码, 并将控制权返还给`ActivityObject`, 协程常被用在动画处理和资源异步加载
`ActivityObject`中协程相关函数:
```csharp
/// <summary>
/// 开启一个协程, 返回协程 id, 协程是在普通帧执行的, 支持: 协程嵌套, WaitForSeconds, WaitForFixedProcess
/// </summary>
public long StartCoroutine(IEnumerator able);
/// <summary>
/// 根据协程 id 停止协程
/// </summary>
public void StopCoroutine(long coroutineId);
/// <summary>
/// 停止所有协程
/// </summary>
public void StopAllCoroutine();
```
协程`yield return`返回特殊值类型如下:
* **WaitForSeconds**: 当前协程等待秒数
* **WaitForFixedProcess**: 当前协程等待帧数
* **IEnumerator**: 嵌套执行子协程, 等子协程执行完毕后才会继续执行后面的代码
协程`yield return`如果返回除以上数据类型以外的数据, 将忽略返回值
调用实例, 以下代码在`ActivityInstance`初始化时执行协程`StartRotation`, 协程在60帧内让物体每帧角度加1
```csharp
public override void OnInit()
{
StartCoroutine(StartRotation());
}
private IEnumerator StartRotation()
{
for (int i = 0; i < 60; i++)
{
RotationDegrees += 1;
//结束这一帧, 返回0会被忽略返回值
yield return 0;
}
}
```
### 3.3.地牢房间
#### 3.3.1.地牢房间概述
#### 3.3.2.地牢生成规则
#### 3.3.3.创建模板房间
### 3.4.UI系统
#### 3.4.1.UI系统概述
#### 3.4.2.UI代码生器
#### 3.4.3.常用功能