我和朋友正在讨论,我们想知道为什么这么多开源项目决定用C而不是C++.像Apache,GTK,Gnome等项目选择了C,但为什么不用C++,因为它几乎是一样的?
我们正在寻找导致这些项目(不仅是我列出的项目,而且是所有C项目)的原因,而不是使用C而不是C++.主题可以是性能,易于编程,调试,测试,概念等.
我已经开始使用XNA Framework编写游戏,并且遇到了一些我不知道如何正确解决的简单问题.
我正在使用Texture2D显示菜单并使用键盘(或游戏手柄)我更改了所选的菜单项.我的问题是用于在菜单项之间切换的当前函数太快了.我可能会单击向下按钮,它将关闭5或6个菜单项(由于Update()被多次调用,因此更新所选项目).
ex.
(> indicate selected)
> MenuItem1
MenuItem2
MenuItem3
MenuItem4
MenuItem5
I press the down key for just a second), then I have this state:
MenuItem1
MenuItem2
MenuItem3
> MenuItem4
MenuItem5
What I want is (until I press the key again)
MenuItem1
> MenuItem2
MenuItem3
MenuItem4
MenuItem5
Run Code Online (Sandbox Code Playgroud)
我想要的是让玩家多次点击向上/向下键以便从一个菜单项转到另一个菜单项,或者在进入下一个菜单项之前有一些最小等待时间的方法.
我目前正在项目中使用C++和Java,并且我希望能够将包含在C++中的对象发送到我的Java接口,以便通过GUI修改它,然后用C++发回修改.
到目前为止,我已经通过JNI接口向Java返回任何内容,int或布尔值.这次我必须通过界面发送一个对象.我在C++和Java中都提供了类似的类定义.我想知道如何创建对象,以便我可以在Java中使用它.
在C++中我有:
JNIEXPORT MyObject JNICALL Java_ca_X_Y_Z_C_1getMyObject(JNIEnv* env, jclass, jint number);
Run Code Online (Sandbox Code Playgroud)
Java将调用此函数以便从C++端获取对象(该对象包含在单例中,易于访问).
在Java端,我只是简单地调用这个方法,
MyObject anObject = C_getMyObject(3);
Run Code Online (Sandbox Code Playgroud)
哪个应该返回我新创建的对象.
当我进行实际调用时,Java当前返回一个UnsatisfiedLinkError.怎么了?
我正在开发一款游戏,经过两个月的工作(不是全职时间),我逐渐意识到我们的游戏规格缺乏很多细节.我不是一个专业的游戏开发者,这只是一个爱好.
我希望得到的帮助或建议是:您在游戏中找到的主要组件是什么,必须开发或已经作为图书馆存在?这个问题的目的是让我能够指定更多的游戏方面.
目前,我们几乎只指定了我们如何处理视觉,完全忘记了游戏逻辑的一切(AI,实体交互,Quest逻辑(我们如何决定任务是否完成)).
到目前为止,我已经找到了这些要点:
为了减少这个问题的范围,如果你能专门讨论与开发RPG类型的游戏有关的方面,我会喜欢它.我还会指出我正在使用XNA来开发这个游戏,但我几乎没有掌握所有可用的类(几乎只使用Game组件和一些与它相关的类,如GameTime,SpriteBatch,GraphicDeviceManager )但不多.
我遇到了GetHashCode和Equals的问题,我已经覆盖了一个类.我使用operator ==来验证两者是否相等,并且如果它们的哈希码相同以便验证它们确实相等,我希望它将调用GetHashCode和Equals.
但令我惊讶的是,没有被调用,并且相等测试的结果是错误的(虽然它实际上应该是真的).
覆盖代码:
public class User : ActiveRecordBase<User>
[...]
public override int GetHashCode()
{
return Id;
}
public override bool Equals(object obj)
{
User user = (User)obj;
if (user == null)
{
return false;
}
return user.Id == Id;
}
}
Run Code Online (Sandbox Code Playgroud)
平等检查:
if (x == y) // x and y are both of the same User class
// I'd expect this test to call both GetHashCode and Equals
Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用TeamCity 4.5来自动化XNA项目的构建,但我遇到了一个小问题.我的项目在Visual Studio 2008下正确编译,但在使用TeamCity编译时不能编译.配置文件使用sln2008设置,并且编译运行一段时间,但是一旦将.png纹理编译为.xnb,我就会收到以下错误:
[11:28:41]: [Project "Content.contentproj" (default targets):] Content\head.png Building content threw InvalidOperationException: D3DERR_INVALIDCALL
at Microsoft.Xna.Framework.Content.Pipeline.CommonHelperFunctions.InitD3D()
at Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.InitD3D()
at Microsoft.Xna.Framework.Content.Pipeline.TextureImporter.Import(String filename, ContentImporterContext context)
at Microsoft.Xna.Framework.Content.Pipeline.ContentImporter`1.Microsoft.Xna.Framework.Content.Pipeline.IContentImporter.Import(String filename, ContentImporterContext context)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.ImportAssetDirectly(BuildItem item, String importerName)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.ImportAsset(BuildItem item)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAssetWorker(BuildItem item)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.BuildAsset(BuildItem item)
at Microsoft.Xna.Framework.Content.Pipeline.BuildCoordinator.RunTheBuild()
at Microsoft.Xna.Framework.Content.Pipeline.Tasks.BuildContent.RemoteProxy.RunTheBuild(BuildCoordinatorSettings settings, TimestampCache timestampCache, ITaskItem[] sourceAssets, String[]& outputContent, String[]& rebuiltContent, String[]& intermediates, Dictionary`2& dependencyTimestamps, KeyValuePair`2[]& warnings)
Inner exception: COMException: Exception from HRESULT: 0x8876086C
Run Code Online (Sandbox Code Playgroud)
我没有任何想法导致这种情况.就像我说的,它能够正确编译.fbx模型以及我的ContentPipeline项目和我的SharedContent项目(解决方案的一部分).
我真正想要的是一些指向问题根源的指针(如果可能的话,解决问题的方法).据我了解,D3D库似乎存在问题.我还要提醒您,整个解决方案在Visual Studio 2008下编译,因此TeamCity存在一个小问题,要么我没有提供某些东西,要么实际上设置错误.
我一直遇到ComboBox控件的问题.我不是GUI的专家,但我知道这个问题与控件的重点有关.
出于某种原因,当我点击它之外时,ComboBox不会失去焦点.比如说:
要么
请注意,ComboBox只将DropDownStyle设置为ComboBoxStyle.DropDownList.这意味着它是默认的ComboBox行为.我认为默认行为是当你单击它或其他控件(按钮或ComboBox)时,ComboBox会失去焦点.这不是这种情况,为什么?
更新: 我需要的是某种ActiveComponent = null.如果您在标准工具栏中选择Debug或Release(ComboBox),则行为应类似于Visual Studio.目前,如果我点击ComboBox外部,它仍然是焦点.
我试图从一个泛型转换为另一个,说:
myClass<MoreAbstract> anItem = myclass<DerivateFromMoreAbstract> anotherObject;
Run Code Online (Sandbox Code Playgroud)
或者做类似的事情
aFunction(anotherObject); // myclass<DerivateFromMoreAbstract> anotherObject
Run Code Online (Sandbox Code Playgroud)
其中aFunction签名是
aFunction(myClass<MoreAbstract> item);
Run Code Online (Sandbox Code Playgroud)
实际上,myClass实际上是我在网上找到的shared_ptr的简化实现.我想知道是否有任何方式我可以实际从一种指针类型切换到另一种被封装的指针类型.
有没有办法做这样的演员?如果是这样,那么正确的做法是什么?
如果它对任何人有帮助,VC++会给我这个错误:
Error 1 error C2440: 'type cast' : cannot convert from 'myClass<T>' to 'myClass<T>'
Run Code Online (Sandbox Code Playgroud) 我有一个小类,允许我加载着色器并在我的程序中使用它们.我能够编译着色器,但是当它是时候链接它们时,它们只是不想.使用glGetProgramInfoLog我得到以下错误日志.我不明白为什么它告诉我没有定义程序,因为编译工作正常...
Vertex info
-----------
(0) : error C3001: no program defined
Fragment info
-------------
(0) : error C3001: no program defined
Run Code Online (Sandbox Code Playgroud)
以下代码执行GLSL链接:
program_ = glCreateProgramObjectARB();
if (vertex_) {
glAttachObjectARB(program_, vertex_);
}
if (fragment_) {
glAttachObjectARB(program_, fragment_);
}
glLinkProgramARB(program_);
Run Code Online (Sandbox Code Playgroud)
vertex_和fragment_是顶点和片段着色器,program_是ProgramObjectARB.
我想知道为了实现这个目的,我需要做些什么必要的修改.
顶点着色器:
varying vec4 OCPosition; // surface positon in world's coordinates
varying vec4 ECposition; // surface position in eye coordinates
varying vec4 ECballCenter; // ball center in eye coordinates
uniform vec4 BallCenter; // ball center in modelling coordinates
void main()
{ …Run Code Online (Sandbox Code Playgroud)