openra专题

C#开发的OpenRA游戏之属性SelectionDecorations(11)

C#开发的OpenRA游戏之属性SelectionDecorations(11) 前面分析选择一个物品的属性,当玩家选择时,就会在物品周边画出四个指示符号。而这四个指示符号,是通过下面的语句: cr.DrawLine(new float3[] { tl + u, tl, tl + v }, 1, color, true); 不过隐藏在这个函数后面,会有更加复杂的内容。上面语句里可以使用三个坐

C#开发的OpenRA游戏之属性RenderSprites(8)

C#开发的OpenRA游戏之属性RenderSprites(8) 本文开始学习RenderSprites属性,这个属性是跟渲染有关的,因此它就摄及颜色相关的内容,所以我们先来学习一下调色板,这是旧游戏的图片文件保存的格式,如果放在现代来看,不会再采用这种方法,毕竟现在存储空间变大,便宜了,并且内存空间也便宜了。 但是这里使用的旧的图片资源,因此必须使用调色板才可以读取相关的图片资源。 p

C#开发的OpenRA游戏之属性SelectionDecorations(10)

C#开发的OpenRA游戏之属性SelectionDecorations(10) 前面分析了选择属性,继续分析前面的内容,不过这里不再是选择,而是选择相关的属性。 当用玩家选择地图上一个物品,或者士兵,或者坦克时,就会在周边画上一些指示标记,并且有一个状态条。 通过上图,可以看到建筑物周边有四个红色的指示边角,就是用来标记这个物品被选中了。 而画出上面四个指示标记功能类,就是属性类Se

C#开发的OpenRA游戏之属性Selectable(9)

C#开发的OpenRA游戏之属性Selectable(9) 在游戏里,一个物品是否具有选中的能力,是通过添加属性Selectable来实现的。当一个物品不能被用户选取,那么就不要添加这个属性。 这个属性定义在下面这段描述里: ^Selectable:        Selectable:        SelectionDecorations:        WithSpriteC

C#开发的OpenRA游戏之属性QuantizeFacingsFromSequence(7)

C#开发的OpenRA游戏之属性QuantizeFacingsFromSequence(7) 前面分析了身体的方向,在这里继续QuantizeFacingsFromSequence属性,这个属性就是通过序列定义文件里获取身体的方向。 根据前面分析可知,同样有一个信息类QuantizeFacingsFromSequenceInfo: [Desc("Derive facings from s

C#开发的OpenRA游戏之游戏设计思路

OpenRA设计思路 在OpenRA有很多部分的内容,比如UI、渲染、单元行为等等。 不过在地图里,所有单元、建筑物、其它物品都是采用Actor来实现。每个Actor包含一系列Trait属性。 Trait属性有info类和同名称操作类构成。有一个信息类实例在同一类型的所有参与者之间共享。每个Actor创建自己的Trait实例。 每个信息类负责创建每个属性类,可以查看ITraitInfo

C#开发的OpenRA游戏之延时初始化Lazy<T> 类

C#开发的OpenRA游戏之延时初始化Lazy<T> 类 Lazy<T> 是一个类,用于实现延时加载(Lazy Initialization)。延时加载是指对象的创建被推迟,直到第一次被使用时。Lazy<T> 允许你在第一次访问对象时进行初始化,这对于大型或资源密集型对象的性能优化非常有用。你可以通过提供一个委托(Delegate)来延迟初始化对象,Lazy<T> 确保所有线程使用同一个延时加载

C#开发的OpenRA游戏之世界存在的属性CombatDebugOverlay(3)

C#开发的OpenRA游戏之世界存在的属性CombatDebugOverlay(3) 这次来分析CombatDebugOverlay属性,这个属性只有在调试游戏的时候才会使用。当你设置这个属性的时候,就可以看到如下图的结果: 可以看到物品的周边都有一个圆圈,以及有一些十字的点位标志。 那些十字表示的点,其实就是开火判断范围。比如一个士兵要向这些建筑物开火,怎么样知道他在这个射程范围之内,

C#开发的OpenRA游戏之游戏设计思路

OpenRA设计思路 在OpenRA有很多部分的内容,比如UI、渲染、单元行为等等。 不过在地图里,所有单元、建筑物、其它物品都是采用Actor来实现。每个Actor包含一系列Trait属性。 Trait属性有info类和同名称操作类构成。有一个信息类实例在同一类型的所有参与者之间共享。每个Actor创建自己的Trait实例。 每个信息类负责创建每个属性类,可以查看ITraitInfo

6张图让你了解openRA 下载及编译

下面的3张图是免费赠送的用vs解决方案编译的方法

C#开发的OpenRA游戏之步兵射击(1)

C#开发的OpenRA游戏之步兵射击(1) 前面已经分析了步兵训练的过程,知道步兵是怎么样训练出来的,有了步兵之后,就是控制一群步兵去攻击对方了,那么这个攻击的过程又是怎么样实现的呢?子弹又是怎么样打出去,对方又是如何受伤的呢?这么多问题,都需要根据源码来一一分析,才能还原事实的真相,才能真正地领会游戏的实现原理,才能更进一步地设计和修改游戏。 要管理地图上每一个对象,就需要把每一个对象都

C#开发的OpenRA游戏之步兵训练

C#开发的OpenRA游戏之步兵训练 前面已经分析过建造物品的窗口,在这里步兵训练也是一样的过程,不过还是有一点区别,那就是步兵会自己走去,而建造的物品是不会自己行动的。步兵也是一个主要攻击手段,并且便宜,现在就来分析步兵训练的实际过程。 步兵是定义在文件OpenRA\mods\cnc\rules\ infantry.yaml里,所有的步兵定义都如下面这样定义: E1:

C#开发的OpenRA游戏之选择建筑物显示状态信息

C#开发的OpenRA游戏之选择建筑物显示状态信息 前面已经分析了金钱系统,有了钱之后,就可以放任地建造万物了。 在建造的过程中,当你选择建筑物时,就可以看到当前建筑物的健康信息和制造当前物品的进度,如下图所示: 从上图可以看到最上面的进度条是这个建筑物的健康程度,在这里全部是绿色,说明建筑没有受到任何伤害;下面那一条进度条,就是当前物品的建造进度,这里看到只进行了一部分,还没有完成。

C#开发的OpenRA游戏之金钱系统(6)

C#开发的OpenRA游戏之金钱系统(6) 前面已经分析怎么样找到最近并且采矿车数量不超过设定值的精炼工厂,但是没有分析怎么样移动过去,也没有分析怎么样显示采矿车进行倒矿的过程,目前就来分析相关的代码,这样对于整个游戏的实现就会更加清晰,修改起来也会得心应手。 从前面的代码结束开始,就会运行到这里: if (harv.LinkedProc == null) {     QueueCh

C#开发的OpenRA游戏之金钱系统(5)

C#开发的OpenRA游戏之金钱系统(5) 前面分析了采矿车到矿场采矿的过程,那么采矿车什么时候采满呢?采满之后又是怎么样运送到精炼工厂呢? 首先我们来分析采矿车是怎么样判断采满矿产的,毕竟采矿车不能无限装载矿产资源。所以我们再次回到采矿车类Harvester,来分析它怎么样接收矿产,以及怎么样判断采矿车已经采满。采矿车类定义在文件Harvester.cs里。 在这里看到调用harv.A