C++是我真正进入的第一种编程语言,但我的大部分工作都是学术或游戏编程.我居住的大多数编程工作都需要Java或.NET程序员,除了基本语言之外,我对他们需要什么技术有相当好的了解.例如,Java程序员可能需要了解EJB,Servlets,Hibernate,Spring以及其他技术,库和框架.
但是,我不确定C++.在现实生活中,对于一般的业务编程,除了语言特性之外,C++程序员还需要了解什么?像Win32 API,某些库,框架,技术,工具等等.
编辑:当我说基本语言时,我也想到了标准库,对不起,如果它错了或不清楚.我想知道是否有更多特定的域要求类似于Java或.NET程序员可能需要学习的所有技术,以及C++程序员通常需要知道的内容.我同意标准库和Boost是必不可少的,但除此之外还有什么或者每个公司/项目/域都有所不同吗?
我正在处理游戏对话文件(玩家和不可玩角色之间的对话),其中对话选择及其结果取决于某些条件并导致某些动作.现在,我可以编写一个简单的解析器来处理某种语言来指定前置条件和后置条件,但是我的一个朋友建议使用XML.条件可以存储为对话元素的属性,选择和动作是内部元素.然后我使用eval函数来解析这些条件和语句(我使用Ruby来制作这个游戏).为了使这种方法更简单,我可以编写一个简单的GUI来操作这些文件而不必担心丑陋的XML.
但它让我觉得在XML文件中处理逻辑是一个奇怪的选择.我的理解是XML文件用于存储和交换数据,我总是阅读关于人们如何过度使用XML以获取其不适合的各种事物的咆哮.我的朋友们回应说明XML是如何用于所有事情的,包括XHTML和这种子弹描述语言(这也说明了一些逻辑).
说实话,使用XML会为我简化很多事情.编写解析器可能既痛苦又耗时,而且我的要求通常很简单.但它真的没问题,或者我会后悔这样的选择吗?
对于对细节感兴趣的人,这是基本对话交换在XML文件中的样子:
<dialogue id="101" condition="!npc.carsFixed">
<message>Man, fix my car!</message>
<choices>
<choice condition="hero.carFixingSkill > 5" priority="7" id="Sure!">
<command>hero.carFixingSkills += 1</command>
<command>npc.carFixed = true</command>
<command>hero.playSmokeAnimation()</command>
<command>nextDialogue = 104</command>
</choice>
<choice condition="hero.carFixingSkill <= 5" id="I can't...">
<command>nextDialogue = 105</command>
</choice>
<choice id="Fix it yourself">
<command>npc.likesHero -= 1</command>
</choice>
</choices>
</dialogue>
Run Code Online (Sandbox Code Playgroud)
如果用Ruby编写相应的代码将是:
def dialogue101
if !npc.carsFixed
showMessage("Man, fix my car!")
choices = []
if hero.carFixingSkill > 5
choices.push(Choice.new("Sure!", 7))
else
choices.push(Choice.new("I can't"))
end
choices.push(Choice.new("Fix it yourself"))
choices = selectTopPriority(choices) if …Run Code Online (Sandbox Code Playgroud) 对于我正在制作的2D游戏(对于Android),我使用的是基于组件的系统,其中GameObject包含多个GameComponent对象.GameComponents可以是输入组件,渲染组件,子弹发射组件等.目前,GameComponents具有对拥有它们的对象的引用并且可以对其进行修改,但GameObject本身只有一个组件列表,并且它不关心组件是什么,只要它们在对象更新时可以更新.
有时组件有一些GameObject需要知道的信息.例如,对于碰撞检测,GameObject将自身注册到碰撞检测子系统,以在其与另一个对象碰撞时被通知.碰撞检测子系统需要知道对象的边界框.我将x和y直接存储在对象中(因为它被几个组件使用),但宽度和高度仅为保存对象位图的渲染组件所知.我想在GameObject中有一个方法getBoundingBox或getWidth来获取该信息.或者一般来说,我想从组件向对象发送一些信息.但是,在我目前的设计中,GameObject不知道它在列表中具有哪些特定组件.
我可以想出几种方法来解决这个问题:
我可以让游戏对象拥有一些重要组件的特定字段,而不是拥有一个完全通用的组件列表.例如,它可以有一个名为renderingComponent的成员变量; 每当我需要获得我刚才使用的对象的宽度时renderingComponent.getWidth().这个解决方案仍然允许组件的通用列表,但它以不同的方式处理它们中的一些,并且我担心由于需要查询更多组件,我最终会有几个特殊字段.有些对象甚至没有渲染组件.
将所需信息作为GameObject的成员,但允许组件更新它.因此,对象的宽度和高度默认为0或-1,但渲染组件可以在其更新循环中将它们设置为正确的值.这感觉就像一个黑客,我可能最终会向GameObject类推送很多东西以方便使用,即使并非所有对象都需要它们.
组件实现一个接口,指示可以查询的信息类型.例如,渲染组件将实现HasSize接口,该接口包括getWidth和getHeight等方法.当GameObject需要宽度时,它会遍历其组件,检查它们是否实现了HasSize接口(instanceof在Java中使用关键字,或is在C#中).这似乎是一个更通用的解决方案,一个缺点是搜索组件可能需要一些时间(但是,大多数对象只有3或4个组件).
这个问题与具体问题无关.它常常出现在我的设计中,我想知道处理它的最佳方法是什么.性能有点重要,因为这是一个游戏,但每个对象的组件数量通常很小(最大值为8).
简短的版本
在基于组件的游戏系统中,在保持设计通用性的同时,将信息从组件传递到对象的最佳方法是什么?
将Ruby作为脚本语言嵌入C++的最佳方法是什么?使用ruby.h?痛饮?别的什么?我需要的是向Ruby公开一些C++对象,并让Ruby解释器评估访问这些对象的脚本.我不关心扩展Ruby或用C++访问它.
我发现这篇关于在C++中嵌入Ruby的文章,虽然它非常有用,但它有点旧,我想知道是否有关于这个主题的任何其他资源(或类似引擎的开源实现).
所以我一直在考虑获得微软认证,我必须在Windows Forms和WPF之间做出选择(目前用于开发Windows应用程序).我对Windows Forms有很好的了解,但从未尝试过WPF.此外,我居住的大多数职位发布似乎都是面向WinForms的.这可能会在未来几年内发生变化,所以我想知道我是否应该开始学习WPF或坚持尝试过的真实表格.
任何见解?
如何备份和还原SQL Server 2005代理作业计划?
每当我切换到DDMS视图并启动方法分析时,我在停止分析时会收到以下错误消息:
Method Profiling Error:
Unable to download trace file:
Remote object doesn't exist!
Run Code Online (Sandbox Code Playgroud)
这只发生在1.6和2.1 AVD,2.2和2.3工作正常.自从Eclipse Android插件的最新更新以来,我一直遇到这个问题.我在Ubuntu 10.04上使用Eclipse 3.5.2和Android Development Toolkit版本8.0.0.v201011171904-77661.如果您需要更多信息,请与我们联系.
编辑1:
编辑2:
跟踪文件实际上是在SD卡上创建的,我可以使用adb或DDMS文件资源管理器将其拉出来并在traceview中查看它.当我单击"停止方法分析"图标时,我只是收到错误消息,并且不会自动显示跟踪文件.我尝试删除AVD并创建新的AVD,安装最新的插件版本,然后重新安装插件,但问题仍然存在.我可以忍受它,但让它像往常一样工作会很好.
您知道代码的特定部分对项目至关重要,但可能需要花费大量时间才能完成吗?你有没有感觉到你宁愿在别的东西上工作(可能不那么重要)或根本没有代码而不是在那部分工作?那个野兽,你努力避免并使用你知道的每一个懒惰技巧来推迟其不可避免的实施?
现在,我可能只是在懒惰,但我总是不得不处理这样的代码.写一些我不喜欢写的东西(如果你是为了好玩并且没有得到报酬,那就更糟了!).一个庞大的系统,需要花费大量的时间才能让它进入一个阶段,在这个阶段你可以获得任何有用的结果或它的工作指示.你如何开始这样的编码?大多数人可能会建议分而治之和类似的建筑技术,但这不是关于你如何做到的; 这是关于你如何让自己开始这样做.你采取的第一步是什么?
这可能是一个愚蠢的问题,但我只是想确保......
如果我将IDE(本例中为Visual Studio)生成的代码合并到我的软件中,我可以将自己的许可证应用于该代码,还是受其自己的许可证约束?
我有一些SSIS软件包受到密码保护(它们的保护级别显然是EncryptAllWithPassword)是由离开公司并且无法再访问的开发人员,并且尝试打开它们会出现以下错误,因为密码不能供应:
加载'Package.dtsx'时出错:无法删除包含错误的包保护错误0xC0014037"包使用密码加密.密码未指定或不正确.".这发生在CPackage :: LoadFromXML方法中.
有没有办法打开这些包裹?我可以访问最初用于创建这些软件包的管理员帐户,并且可以使用同一个人加密的其他软件包,但使用我知道的其他密码.
我已经联系了当地的微软代表,并且到目前为止他们只将我链接到一个描述如何设置或更改密码的页面,这无济于事,因为我需要先打开包或提供旧密码.有没有人之前处于类似的情况或知道解决这个问题的方法?