Cryengine制作pyside程序独立运行行程序的方...

CryENGINE3初探Flowgraph(FG)(三)----使用C++创建自定义Node - CSDN博客
CryENGINE3初探Flowgraph(FG)(三)----使用C++创建自定义Node
& & 终于进入代码部分了,反正我很早就跃跃欲试了,虽然中途遇到很多问题,但还是一一解决了,废话不多说,直接步入正题。
& & 这本教材中提到可以用C++,C#,和lua三种语言编写代码,书中还给了个示例,但是C++的链接已经无效了,所以我们只能不管它,我把C#写的工程示例下载了下来,也是有很多问题,所以今天我们先用C++来创建自定义Node。
& & 在正式开始之前,版本问题还真得考虑一下。VS只能是2010以上的版本,在这里我使用的是VS2013。而对于CE3的版本,如果大家使用的是3.5系列的话,应该在CE3根目录下直接就有Code文件夹,若果是高一点的版本,比如3.6系列,就只能解压它的压缩包了。还需要说明的一点是,在我们进行编译之前,大家最好把32和64位下的dll备份一下,因为我们实际上就是重新定制自己的dll,如果不备份,会把原先的覆盖掉,这样一旦编译错误,就只能重新解压CE3的SDK了。
& & 然后,找到c++的解决方案(3.5系列是这个文件:CryEngine_GameCodeOnly),打开它,右键编译一下,看看是否有错误。如果能正确生成dll文件,恭喜你,就可以直接用了,如果提示了很多错误的话,就得根据不同的原因折腾一大会儿了。我这边也是出了很多问题,最后经网上一位大神的指点,总算是解决了。
下图为成功生成dll
& & 这里具体会遇到哪些问题我也不知道,这就看大家VS玩的怎么样了,我这边出现了中英文字符的问题,降低了一下警告的等级,不把警告视为错误,然后就好了。如果大家在这一步有问题的话,欢迎提出来,我们一起想办法解决。降低警告的方法:右键CryGameSDK,选择属性,然后就是下图了:
& & 好吧,准备工完成后,我们就正式进入编程这一步。在这里我提前说明一下,我也是刚刚接触CE3的编码,所以里面很多封装好的函数具体的作用什么的也不是分的很清。我觉得在这种情况下,我们不用做太多的纠结,直接先跟着教程来做就是了,慢慢的接触的多了自然就会知道。
& & 好,那我们就动手吧!C++编写自定义节点共有如下几个步骤:
(一).新建一个cpp文件。
& & 书上说,我们的Node信息不会在工程的其他区域涉及到,所以不必添加.***件。
& & 在CryGameSDK下找到Node文件夹,右键建立cpp文件,取名“TotorialNode.cpp”(totorial:翻译为示例)。然后再文件中需要添加头文件、建立一个类,具体代码为如下:#include
&StdAfx.h&
#include &Nodes\G2FlowBaseNode.h&
class CTutorialNode :public CFlowBaseNode & eNCT_Instanced &
REGISTER_FLOW_NODE(&Tutorial:Multiplier&, CTutorialNode);
& & 书中解释:
& (1)G2FlowBaseNode虽然不是CE3严格意义上的一个组件,但是它封装了许多实用的函数。
& (2)书中对类的定义是这么解释的:CTutorialNode继承自CFlowBaseNode,后面的& eNCT_Instanced &表明了这个node将会成为游戏运行过程中的一个实例。(这句话的理解、还得琢磨琢磨,想一想,我水品有限,也只能翻译到这个地步)。
& (3)REGISTER_FLOW_NODE(&Tutorial:Multiplier&, CTutorialNode);是用来完成在开始运行时node的注册。
(二)重写父类的函数
//书中解释:我们不需要存储任何静态的变量,所以我们就简单的使用Public
CTutorialNode(SActivationInfo *pActInfo)
virtual IFlowNodePtr Clone(SActivationInfo *pActInfo)
return new CTutorialNode(pActInfo);
//端口被触发时调用,我们大部分都在这个地方写逻辑
virtual void ProcessEvent(EFlowEvent evt, SActivationInfo *pActInfo)
//配置节点的显示,输入和输出
virtual void GetConfiguration(SFlowNodeConfig &config)
//这个函数并不需要我们重写任何的实现,我们在在内存为这个函数只需要添加一个声明
virtual void GetMemoryUsage(ICrySizer *s) const
(三)实现Node的配置函数//添加枚举类型
enum EInput
EIP_Activate,
enum EOutput
EOP_Result
//配置节点的显示,输入和输出
virtual void GetConfiguration(SFlowNodeConfig &config)
static const SInputPortConfig inputs[] =
InputPortConfig_Void(&Activate&, &MyDes:Trigger the calculation&),
//端口名,默认值,描述
InputPortConfig&float&(&Left&, 0, &MyDes2:The left side of the calculation&),
InputPortConfig&float&(&Right&, 0, &MyDes2:The right side of the calculation&),
static const SOutputPortConfig outputs[] =
OutputPortConfig&float&(&Reslut&, &The Result of the calculation&),
config.pInputPorts =
config.pOutputPorts =
config.sDescription = _HELP(&Multiplies two numbers&);
config.SetCategory(EFLN_APPROVED);
}(四)实现ProcessEvent函数
//端口被触发时调用,我们大部分都在这个地方写逻辑
virtual void ProcessEvent(EFlowEvent evt, SActivationInfo *pActInfo)
switch (evt)
case IFlowNode::eFE_Activate:
if (IsPortActive(pActInfo, EIP_Activate))
float left = GetPortFloat(pActInfo, EIP_Left);
float right = GetPortFloat(pActInfo, EIP_Right);
float ans = left *
//把ans值更新到输出端口数组
ActivateOutput(pActInfo, EOP_Result, ans);
好了,代码就这样了。最后把完整的C++代码贴在下面
这是个添加自定义节点的代码
&StdAfx.h&
#include &Nodes\G2FlowBaseNode.h&
class CTutorialNode :public CFlowBaseNode & eNCT_Instanced &
//添加枚举类型
enum EInput
EIP_Activate,
enum EOutput
EOP_Result
//书中解释:我们不需要存储任何静态的变量,所以我们就简单的使用Public
CTutorialNode(SActivationInfo *pActInfo)
virtual IFlowNodePtr Clone(SActivationInfo *pActInfo)
return new CTutorialNode(pActInfo);
//端口被触发时调用,我们大部分都在这个地方写逻辑
virtual void ProcessEvent(EFlowEvent evt, SActivationInfo *pActInfo)
switch (evt)
case IFlowNode::eFE_Activate:
if (IsPortActive(pActInfo, EIP_Activate))
float left = GetPortFloat(pActInfo, EIP_Left);
float right = GetPortFloat(pActInfo, EIP_Right);
float ans = left *
//把ans值更新到输出端口数组
ActivateOutput(pActInfo, EOP_Result, ans);
//配置节点的显示,输入和输出
virtual void GetConfiguration(SFlowNodeConfig &config)
static const SInputPortConfig inputs[] =
InputPortConfig_Void(&Activate&, &MyDes:Trigger the calculation&),
//端口名,默认值,描述
InputPortConfig&float&(&Left&, 0, &MyDes2:The left side of the calculation&),
InputPortConfig&float&(&Right&, 0, &MyDes2:The right side of the calculation&),
static const SOutputPortConfig outputs[] =
OutputPortConfig&float&(&Reslut&, &The Result of the calculation&),
config.pInputPorts =
config.pOutputPorts =
config.sDescription = _HELP(&Multiplies two numbers&);
config.SetCategory(EFLN_APPROVED);
//这个函数并不需要我们重写任何的实现,我们在在内存为这个函数只需要添加一个声明
virtual void GetMemoryUsage(ICrySizer *s) const
s-&Add(*this);
REGISTER_FLOW_NODE(&Tutorial:Multiplier&, CTutorialNode);
最后,注意把位数、目录选择好,就可以编译生成dll了
打开相应CE3的版本,就可以看到我们添加的自定义Node了
好了,今天就先到这里,明天我试着尝试用C#编辑一下,如果成功的话,就和大家分享经验,如果不成功的话,就暂时只能先放在一边了,除此之外,做个总结,教程第三章就算完成了!如果大家有问题可以直接留言,更希望如果大神能看到这篇文章,能给出一些指点!
本文已收录于以下专栏:
相关文章推荐
学习CryEngine3大半年有余了,虽然曾经没有体验过“显卡危机”系列大作带来的快感,但当我第一次接触CE3时,还是他的强大所震撼了。时隔半年的总结,我对CE3有了新的认识,它真的是让人又爱又恨。这...
接着上篇博客,我们通过简单控制TimeOfDay来一步步深入FG。
(一)完成对TimeOfDay简单控制的实例
1.在场景中添加FlowgraphEntity。
经历了一个月的考试,终于又有机会抱着书啃啃CE3了,接着上回,我们继续来看CryENGINE3中的Entity。
首先我必须吐槽一点,可能是自己能力不足,书上这部分内容真是晦涩难解,很多要注意...
(一)继续探索
话接上回,我尝试了一下去下载教材中提到的C#源码,但是这套源码并不是官方提供的,而且好像也停止更新了,所以实用性不是很强,我自己还是没有编译成功,所以就暂时放弃了。如果有人有...
虽然已经放了寒假,但是感觉事情还是好多,我这两天算是跑动跑西,忙来忙去,啥都干了一通:班级小组信息系统答辩,我负责软件测试,折腾了半天Java MyEclipse,又是用ant JUnit做单元测试,...
有两种方法可以添加结点:
1.在code/solutions目录下编译sln文件,如CryEngine_GameCodeOnly.sln,编译成功后,添加结点直接在Flownodes目录下。定义类,有...
Node.js的npm/Sublime text3的packages
自定义文件夹位置
网上关于Nifi自定义Processor的中文资料,要么是很古老的eclipse版本,要么太过于简单,学习Nifi的道路确实有点看不清楚,好在找到一篇从零构造一个JsonPROCESSOR的英文文章,...
原文地址:http://java-/blog/792217 Matrix,中文里叫矩阵,高等数学里有介绍,在图像处理方面,主要是用于平面的缩放、平移、旋转等操作。
他的最新文章
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Crytek 所开发的游戏引擎 CRYENGINE 现已正式开源 - 简书
Crytek 所开发的游戏引擎 CRYENGINE 现已正式开源
德国游戏工作室 Crytek 今天在 Github 上公布了旗下游戏引擎 CRYENGINE 的源代码。在今年三月的 Game Developers Conference 大会上 Crytek 发布了这款游戏引擎的最新版本,并宣布将会将其开源,但这并不意味 CRYENGINE 可以完全免费使用了,开发者可以免费下载,但如果需要使用当中全部的功能还是需要另行付费。
在 VR 应用的项目开发中,类似于 CRYENGINE 这样的游戏引擎是必不可少的,但每款引擎的特性也是大相径庭的。例如 Unity,他的兼容性比较强,所以很多小规模独立工作室都选择它进行开发,大型的制作团队则多数选择使用 Unreal Engine 4,CRYENGINE 的使用群体并没有这两款引擎那么多,但它能提供高保真的视角效果。
Oculus Rift 专用 VR 游戏 The Climb(《攀登》)就是使用了 CRYENGINE 制作,以逼真的视觉效果赢得了广大玩家的一致好评,UploadVR 的 Joe Durbin 也大赞游戏画面的精致,细节逼真,让人百玩不腻,完全沉浸在游戏内蜿蜒起伏的山景之中。本文内容编译自 ,转载请注明出处。最新的CryEngine5随着用户自订购买价格,被越来越多的独立开发商和厂家接受。最近,有消息称有一款以CryEngine5为基础制作的电影制作软件很快即将面世。
很多游戏玩家都知道,Crytek公司打造的通用游戏开发引擎CryEngine是一款能够制作出漂亮图形效果的产品,这家公司最新的CryEngine5随着用户自订购买价格,被越来越多的独立开发商和厂家接受。最近,有消息称有一款以CryEngine5为基础制作的电影制作软件很快即将面世。
这款软件的名字为Film Engine,开发这款软件的公司名字也是Film Engine。根据该公司的介绍,Film Engine可以用于动作捕捉、绿屏合成并且还支持VR。Film Engine的前身是Cinema Sandbox,后者是Crytek公司研发的视频软件。由于Crytek专注于游戏和引擎的研发,Film Engine公司接手Cinema Sandbox并对其进行了大刀阔斧的修改,于是便有了Film Engine。
由于CryEngine在实时开发方面的先天优势,以此为基础进行开发制作的Film Engine自然也支持实时电影制作,而且对于VR也可以支持。

参考资料

 

随机推荐