草庐IT

c# - 我如何在 XNA 中暂停重绘?

我制作了一个XNA图像查看器,但它总是重新绘制场景,即使它没有改变,它让我的上网本烧得厉害,所以我希望它在没有任何变化时暂停绘图。将帧率降低到1是保持凉爽的一种方法,但会导致输出滞后。如何在没有输入的情况下防止重绘?这个问题解决了,但是又发现了一个问题——游戏在窗口处于焦点状态时会消耗大量的CPU,而在非焦点状态时,它只占用大约1%的CPU。有关如何解决此其他问题的详细信息,请参阅此问题:HowtoreduceXNAgameCPUusagewhilenothingworthcomputingishappening? 最佳答案 您可以

c# - XNA - 键盘文本输入

好的,基本上我希望能够检索键盘文本。就像在文本字段中输入文本之类的。我只是在为Windows编写游戏。我忽略了使用Guide.BeginShowKeyboardInput,因为它打破了独立游戏的感觉,而且Guide总是显示XBOX按钮这一事实对我来说也不合适。是的,这是最简单的方法,但我不喜欢它。接下来我尝试使用System.Windows.Forms.NativeWindow。我创建了一个继承自它的类,并将游戏窗口句柄传递给它,实现了WndProc函数以捕获WM_CHAR(或WM_KEYDOWN),尽管WndProc被调用以获取其他消息,WM_CHAR和WM_KEYDOWN从未这样做

c# - 为什么 .NET 中的矩阵乘法这么慢?

我不太明白是什么让C#/.NET(甚至Java)中的矩阵乘法如此缓慢。看看这个基准(source):试图找到一个更新的基准。C#的整数和double性能非常接近用MSVC++编译的C++。double的速度提高了87%,32位整数的速度提高了99%。非常好,我会说。但是再看看矩阵乘法。差距扩大到C#大约快19%。这是一个非常大的差异,我不明白。矩阵乘法只是一堆简单的数学。怎么变得这么慢?它不应该与同等数量的简单浮点或整数运算大致一样快吗?这对于游戏和XNA尤其重要,因为矩阵和矢量性能对于物理引擎等事物至关重要。前段时间,Mono通过一些漂亮的向量和矩阵类添加了对SIMD指令的支持。它缩

c# - 使用 SpriteBatch 在 XNA 中绘制矩形

我正在尝试使用spritebatch在XNA中绘制一个矩形。我有以下代码:Texture2Drect=newTexture2D(graphics.GraphicsDevice,80,30);Vector2coor=newVector2(10,20);spriteBatch.Draw(rect,coor,Color.Chocolate);但由于某种原因它没有绘制任何东西。知道出了什么问题吗?谢谢! 最佳答案 这是您可以放入从Game派生的类中的代码。这演示了在何处以及如何创建一个白色的1像素正方形纹理(以及完成后如何处理它)。以及如何

c# - 如何检查列表是否包含某种类型的对象? C#

我有一个列表(称为Within),它包含GameObject类型的对象.GameObject是许多其他人的父类,包括Dog和Ball.如果Within包含Ball类型的任何对象,我想创建一个返回true的方法,但我不知道该怎么做。我试过使用Count,Any,Find以及C#中提供的一些其他方法,但我无法让它们工作。publicboolDetectBall(ListWithin){//ifWithincontainsanyobjectoftypeball:{returntrue;}} 最佳答案 if(within.OfType().

c# - 从 2D 到 3D 的运动

谁能给我一些意见或建议我需要找出照片中的物体从一个位置移动到另一个位置的程度(实际上我需要计算相机在两张图像之间移动了多少,但是因为物体将保持静止并且只是在其上旋转Y轴我认为移动图像会更容易)。与此示例几乎相同,但没有那么复杂。所以我拍摄了rubiks立方体的第一张照片,并按照此处的示例在立方体上选择了4个点该图像是Texture2D,蓝色圆圈表示用户选择的立方体正面的4个点。这4个点存储在列表中,下一个图像被加载,看起来像这样再次,用户必须选择与之前相同的面(白色面)的4个点。然后将这4个点存储到一个新的列表中。所以现在我有两个列表,我需要计算“整个正面”从图像1移动(旋转/缩放/平

c# - 调试器无法继续运行该进程。无法开始调试

我用它在visualstudio2012中使用我的XNA游戏,一切看起来都很完美,但是当我单击顶部栏上的调试按钮时,“开始调试”和“不调试开始”是灰色的,我点击它们。我仍然可以点击“开始”箭头,当我点击时我收到以下错误消息。 最佳答案 XNA解决方案带有2个项目,游戏项目和内容项目。确保将游戏项目设置为“启动项目”。为此,右键单击游戏项目并单击“设置为启动项目”,它现在应该可以正常工作了。 关于c#-调试器无法继续运行该进程。无法开始调试,我们在StackOverflow上找到一个类似的

C# XNA : Optimizing Collision Detection?

我正在开发一个简单的碰撞检测演示,其中仅包含一堆在窗口中弹跳的对象。(目标是查看游戏一次可以处理多少个对象而不会丢帧。)存在重力,所以物体要么移动要么与墙壁碰撞。天真的解决方案是O(n^2):foreachCollidablec1:foreachCollidablec2:checkCollision(c1,c2);这很糟糕。因此,我设置了CollisionCell对象,它维护有关屏幕一部分的信息。这个想法是每个Collidable只需要检查其单元格中的其他对象。对于60像素x60像素的单元格,这产生了近10倍的改进,但我想进一步插入它。分析器显示,代码将50%的时间花在每个单元格用来获

c# - 游戏架构

我有一个关于我正在制作的XNA游戏的问题,但它也是一个针对future游戏的通用问题。我正在制作Pong游戏,但我不知道在哪里更新什么,所以我会更好地解释我的意思。我有一个Game、Paddle和Ball类,例如,我想验证球与屏幕限制或桨之间的碰撞,但我遇到了两种方法:更高级别的方法-将Racket和球的属性公开并在游戏中显示。更新检查碰撞?底层方法-我将我需要的所有信息(屏幕限制和Racket信息)提供给ball类(通过参数,或在公共(public)静态类中)和Ball.Update我检查碰撞?我想我的问题以更通用的方式是:对象是否需要知道如何更新和绘制自身,甚至需要从更高级别以某种

c# - 是否有可能在 Monogame/XNA 中获得 "contextual"手势?

我正在使用Monogame开发多点触控应用程序,多个用户可以在更大的多点触控屏幕上同时处理单独的文档/图像/视频,我想知道是否有可能使手势“上下文感知”",即用两根手指捏住墙一侧的文档不应影响平移墙另一侧的人。Monogame的工作方式是,所有输入点都转换为手势,可以使用以下方式读取:if(TouchPanel.IsGestureAvailable){vargesture=TouchPanel.ReadGesture();//dostuff}有没有办法将手势限制在屏幕上的某个点,还是我需要自己实现?例如,通过查看源代码,似乎TouchPanelState类完成了所有工作,但不幸的是它的