代码编织梦想

c#开发的openra使用trimexcess方法-爱代码爱编程

C#开发的OpenRA使用TrimExcess方法 当你在细看OpenRA的代码,就会发现在下面这段代码添加了一个方法: foreach (var nodes in levels) nodes.TrimExcess(); 在上面代码里遍历整个节点列表,把所有节点都调用TrimExcess方法处理一下, 这样做的意义何在?为什么我们

c#界面里的winform backcolor和backgroundimage属性-爱代码爱编程

C#界面里的winform BackColor和BackgroundImage属性 BackColor属性是获取或设置控件的背景色。 BackgroundImage属性是获取或设置在控件中显示的背景图像。       软件的界面是比较重要的功能,因为它决定了用户与软件交互的效果, 如果界面不好,那么用户就会感觉比较难操作。 特别针对工厂里

c#界面里的winform autosize和autosizemode属性-爱代码爱编程

C#界面里的winform AutoSize和AutoSizeMode属性 AutoSize属性是根据 AutoSizeMode 的设置调整窗体的大小。 AutoSizeMode属性是获取或设置窗体自动调整自身大小的模式。 设计时的大窗口 动态修改后的窗口     有这两个属性,我们就可以根据用户的需求来设计窗口的大小了。 比如我们设计

c#开发的openra加载文件的管理-爱代码爱编程

C#开发的OpenRA加载文件的管理 在前面我们分析了mod.yaml文件,发现里面有很多文件列表, 比如下像下面的文件: Packages: ~^SupportDir|Content/cnc ~^SupportDir|Content/cnc/movies ^EngineDir $cnc: cnc ^EngineDir

c#开发的openra的mod配置文件的容器manifest类_openra mod开发-爱代码爱编程

C#开发的OpenRA的mod配置文件的容器Manifest类 在前面已经看到OpenRA所有资源管理,都是来源于mod.yaml文件。 上次也分析到yaml文件采用类MiniYaml来管理读取, 最后通过函数MiniYaml.FromStream()返回整个文件mod.yaml的内容, 这些内容就会通过List<MiniYam

c#开发的openra的opengl创建纹理流程_c# 怎么 使用gl-爱代码爱编程

C#开发的OpenRA的OpenGL创建纹理流程 由于OpenRA采用的是OpenGL来显示游戏画面, 那么它就必然采用纹理来显示了。 并且由于它是2D的游戏,所以3D的模型是没有的,只要使用纹理贴图,就可以完全实现了游戏的功能。 OpenGL的纹理要起作用,需要经过一系列的动作。 先要使用glGenTextures函数来创

c#开发的openra实现应用程序目录的获取_开源软件怎么获取目录-爱代码爱编程

C#开发的OpenRA实现应用程序目录的获取 在OpenRA游戏里,当用户安装之后,就会点击运行应用程序。 由于用户会安装在不同的目录,不同的盘符上, 这时候怎么样来获取游戏资源文件的目录呢? 一般来说有两种方法,第一种是由安装程序来写入安装的目录, 第二种是由应用程序根据自己所在位置来定位。 现在就来说说怎么样使用应用程序来

c#界面里的allowdrop属性、dragdrop和dragenter事件-爱代码爱编程

C#界面里的AllowDrop属性、DragDrop和DragEnter事件 在软件开发里,使用到拖放功能的还是比较少见一些,因为开发的难度比较大,并且大家也不太熟悉, 但是使用起来就比较方便。 比如开发一个上传的软件,一般情况会让用户打开一个窗口选择上传的文件。 如果有这样一个功能,可以让用户直接拖文件到窗口,就给上传, 这样就会更加方便。 要实现这

c#界面里form.formborderstyle 属性的使用-爱代码爱编程

C#界面里Form.FormBorderStyle 属性的使用 窗口的边框样式,一般在设计时就要确定下来。 比如一个对话框,它的窗口是可以改变大小,还是固定不变的呢? 如果是可以改变大小,是否还需要修改控件的布局? 如果固定不变,就可以省掉不少事情,但是随着不同的分辨率显示会显示不全,或者留下大量空白的空间没用。 所以窗口的样式,就已经决定了设计基本方向

c#开发的openra游戏之金钱系统(3)-爱代码爱编程

C#开发的OpenRA游戏之金钱系统(3) 前面已经说到通过类FindAndDeliverResources来实现找到矿场,以及最近的精炼工厂,这样采矿车才能源源不断地从矿场采集大量的资源,运往工厂,才能换回来大量的金钱,这样才能维持整个游戏的开销。 类FindAndDeliverResources里是怎么样实现寻找到精炼工厂最近的矿场,以及怎么样

c#开发的openra游戏之金钱系统(1)-爱代码爱编程

C#开发的OpenRA游戏之金钱系统(1) 设计一个游戏,肯定要有一个唯一的资源,用这个资源来管理整个游戏的进度,以及相互争夺的焦点。在OpenRA里,就是使用矿产资源。所以在地图上分布几个矿场,玩家就需要相互争夺矿场,谁开采多谁就更有钱,谁有钱了就可以升级更好的科技,以及造更好的战车,造更多的战士。如果玩家的策略是差不多的情况下,胜负的关键就是在于金钱

c#开发的openra游戏之信标按钮-爱代码爱编程

前面已经分析了两个按钮:变卖和维修,接着下来就是分析信标按钮,这个按钮使用是比较少,但是对于多人游戏时,使用这个信号就很方便同盟军过来查看和帮助了,相当于一个朋友之间共同查看的地址。当你经过同盟标记的标志时,就会听到beacon detected,检测到信标,这就是你的盟友设置的地图导航标记,听到声音后按空格键就能跳到相应的位置。通常会在开局的时候,就在自

c#开发的openra游戏之建造物品的窗口11-爱代码爱编程

C#开发的OpenRA游戏之建造物品的窗口11 前面分析了预览物品放置的过程,接着下来就是当物品放到合适的位置,玩家就会点击一下左键,这时物品就在这个位置上建造起来。 由于前面在右边面板点击一下,就会创建一个PlaceBuildingOrderGenerator对象,在这个对象里就会调用下面的函数: public IEnumerable<O

c#开发的openra游戏之建造物品的窗口8-爱代码爱编程

C#开发的OpenRA游戏之建造物品的窗口8 前面已经分析到创建物品的命令从服务器返回,后面又会是怎么样更进一步创建呢?接着下来我们继续前面的分析。由前面的分析可知,所有物品的创建源于地图上的建筑物,也即是游戏对象。比如这里分析的是基地,当用户选中基地之后,就会在右边的窗口里显示可以建造的物品,那么建造物品的队列也是绑定到基地中,所以从服务器返回命令,只

c#开发的openra游戏之建造物品的窗口7-爱代码爱编程

C#开发的OpenRA游戏之建造物品的窗口7 前面分析了建造物品的创建窗口,可以看到怎么样建立一堆物品图标在右边的窗口上,但是它并没有分析物品建造的鼠标响应,也就是没有进行行为分析。现在就来分析这方面内容,通过鼠标的操作过程来分析整个程序的代码。我们知道如果一个窗口上某个位置需要响应鼠标消息,那么这个窗口先要响应鼠标消息,那这个窗口里又是哪个函数来响应鼠

c#开发的openra游戏之建造物品的窗口5-爱代码爱编程

C#开发的OpenRA游戏之建造物品的窗口5 前面分析了TAB窗口的建立和运行,现在关注它的子窗口,也就是ProductionPaletteWidget类实现的窗口,这个窗口主要用来显示所有可以创建物品的ICON图标。用户可以通过这个窗口实现物品创建,如下图所示:   比如要创建电厂,就是点击上面高亮显示的图标,就可以开始建造。可以看到具备条件的

c#开发的openra游戏之建造物品的窗口4-爱代码爱编程

前面分析了建造物品TAB窗口类ProductionTabsWidget,它是实现窗口显示内容绘制的,不过它还有一个逻辑处理类ProductionTabsLogic,在这个类实现一些功能配置,现在就来分析这个类。               ProductionTabs@PRODUCTION_TABS:                      Lo

c#开发的openra游戏之基地工程车移动8-爱代码爱编程

C#开发的OpenRA游戏之基地工程车移动8 根据前面A*算法分析,我们知道下面这段代码,就是采用对角线距离来计算的,因为游戏里允许对角线移动,采用计算公式如下: function heuristic(node) =     dx = abs(node.x - goal.x)     dy = abs(node.y - goal.y)     r

游戏中的a*算法使用python实现-爱代码爱编程

游戏中的算法少不了大明明鼎鼎A*算法, 但是要理解这样的算法,还是需要有一个简单的例子代码来不断地操作, 不断地变换参数,才能更加深入地了解它的过程。 OPEN = priority queue containing START CLOSED = empty set while lowest rank in OPEN is not the GOAL:

c#开发的openra游戏之基地工程车移动5-爱代码爱编程

前面已经分析到寻路算法,这个是RPG游戏的必经之路,因为角色的移动都是根据鼠标点击来实现,而点击的鼠标位置就是角色将要到达的目标位置。角色所在位置与目标位置就有一定的距离,并且之间有各种地形,以及各种游戏角色动态地阻挡。因此角色所在位置与目标位置之间,就需要采用一定有效的算法来找到移动的路径。 上面所说的算法,就是在文件PathFinder.cs里进