Questions tagged «c#»

C#是Microsoft与.NET平台一起创建的一种多范例,托管,强类型,垃圾回收的编程语言。

2
投射纹理和延迟照明
在上一个问题中,我问是否可以使用延迟照明进行投影纹理化。现在(半年后),我对同一件事的实现有疑问。我正在尝试将这种技术应用于轻型通行证。(我的投影仪不影响反照率)。我有这台投影机查看投影矩阵: Matrix projection = Matrix.CreateOrthographicOffCenter(-halfWidth * Scale, halfWidth * Scale, -halfHeight * Scale, halfHeight * Scale, 1, 100000); Matrix view = Matrix.CreateLookAt(Position, Target, Vector3.Up); 其中halfWidth和halfHeight是纹理的宽度和高度的一半,Position是投影机的位置,target是投影机的目标。这似乎还可以。我正在使用此着色器绘制全屏四边形: float4x4 InvViewProjection; texture2D DepthTexture; texture2D NormalTexture; texture2D ProjectorTexture; float4x4 ProjectorViewProjection; sampler2D depthSampler = sampler_state { texture = <DepthTexture>; minfilter = point; magfilter = point; mipfilter …

3
发生某些事情时播放声音的好方法?听起来如何?
因此,我一直在考虑我的课程在很多时候会变得多么单板。例如,在Character类的Jump方法中,可以引用声音效果对象并进行播放。就其本身而言,这很好,但是当考虑到物理,动画,碰撞等因素时,Jump方法将变得非常庞大,并且Character该类对许多不同的事物具有很多依赖性。不过,这可能很好。但是,如果我们不再希望角色跳跃时播放声音该怎么办?现在,我们必须在混乱的代码中找到特定的代码行,Jump并将其注释掉。 所以..我在想.. 相反,如果有某种AudioSystem类,而它所做的只是订阅它对其他类感兴趣的随机事件,那该怎么办?例如,Character类可能有一个Jumped事件(我想也是静态的),该事件Character在方法的类内引发。然后,Character班级对角色跳跃时播放的声音效果一无所知。那AudioSystem将是一个巨大的类,程序员可以撤退以通过使用静态事件将声音效果与游戏中发生的某些事件联系起来。然后,如果它得到太大,它可以在像子分离EffectsAudioSystem,BackgroundAudioSystem,AmbientAudioSystem,等等。 然后,在游戏的选项中,可以有一个复选框来启用或禁用这些声音,而要做的只是用一个简单的单个布尔标志禁用一个系统。系统的概念也可以扩展到物理,动画等方面,以至于玩家行为所导致的大多数游戏响应都通过这些精心设计和分离的系统进行连接。 好的,我的问题可能有点含糊,但是这种声音听起来如何?我真的从未听说过有关这种系统的很多讨论。目前为止,这一切都在我的脑海中进行,到目前为止,尚未进行任何编码,因此,这也许是“理论上不错,但实际上却不好”的交易之一。这种系统是否可以在更大的游戏上使用,还是最终会崩溃,甚至比原始系统更像是意大利面条般的混乱?
10 c#  architecture  sound 

2
有效消除游戏中的死物?
我正在使用for循环或foreach循环(无关紧要)来遍历所有需要更新或绘制的对象。但是,当某个对象被杀死时,我希望它再次从集合中删除。 为此,我将对象添加到一个死对象列表中,然后,在绘制并更新了所有内容之后,我将遍历此列表中的所有内容,并将列表中的对象也从原始源中删除。 有更好的方法吗?
10 xna  c#  xna-4.0 

2
XNA游戏服务和荣耀的全局变量之间有什么区别?
该Microsoft.Xna.Framework.Game班有一个服务属性,它允许程序员通过提供一流的类型和类Add方法的一个实例,一个服务添加到他们的游戏。 现在,不必将传递AudioComponent给需要它的所有类和方法,而只需传递Game实例并查找服务即可。(服务定位器) 现在,由于游戏具有许多服务(GraphicsDevice,SceneGraph,AudioComponent,EffectsManager等),因此您现在基本上将Game传递给了一切。 那么,为什么不只将这些实例设置为Singleton呢?好吧,因为单例很糟糕,因为它们具有全局状态,可以防止测试,并使您的设计更加脆弱。同样,服务定位器被视为对许多人的反模式,因为您传递的是服务定位器(游戏),而不是将依赖项传递给对象,该服务定位器将此类与其他服务耦合在一起。 那么,为什么在XNA和游戏开发中推荐“服务”呢?是因为游戏不同于常规程序,并且与它们的组成部分高度交织在一起,并且必须通过类的功能所必需的每个组成部分都非常繁琐吗?游戏服务是游戏设计中必不可少的邪恶吗?是否有其他选择不涉及冗长的参数列表和耦合?
10 xna  c#  architecture 

1
枚举与 技能值的整数
我正在实施一个基本的技能和属性系统,尽管我对应该如何去做有第二个想法。 例如,我可以使用Dictionary / HashMap,它使用SkillType枚举表示键,并使用整数值表示值。但是我应该这样做吗? public class Skills { public IDictionary<StatType, Int> skills; //StatType is enum, being the key; the int //is the value. } vs. public class Skills { public int LongBlade, Armor, Marksman; //...etc } 我想知道这里类型安全的好处,而不是仅仅使用基本整数。有什么建议吗?
10 c# 

3
XNA中渲染大量地形的有效方法
我正在创建一个XNA游戏,该游戏需要巨大的玩家空间。当前,我正在使用的测试高度图是4096x4096,并保存为4位BMP。 我要尝试的是获取巨大的高度图文件,然后在游戏中进行渲染。我遇到的问题是,将整个地形立即加载到内存中效率很低,因为它将占用大部分可用内存。 我遇到的另一个问题是,由于XNA中设置了硬限制,因此无法在一个图元中全部渲染地形。 话虽如此,我遇到了许多解决方案,下面列出了所有这些解决方案: 基于当前用户的位置进行渲染-基本上不管用户在世界上的方向如何,都围绕用户绘制一个正方形。这也不是我想要的,因为您仍在渲染用户看不到的空间。 根据用户的方向和位置进行渲染-我找到了一个公式来检索一个三角形,该三角形应该具有应该绘制的高度图像素,但是事实证明这非常困难。 将地形分为多个块并渲染最接近用户的块-效率仍然不高,因为您仍在渲染人们看不到的块。而且它很费力,因为那时我必须将高度图分成几部分,而可伸缩性成为一个大问题。 在尝试了这些解决方案之后,我对如何做的想法一无所知。在人们告诉我执行这些复杂算法的地方,我已经收到了一些答案,但是我什至不知道该如何执行这些算法。 因此,基本上,我要求一种简单,直接的方法来以最高效率在XNA中渲染巨大的地形。 总的来说,我对游戏开发比较陌生,但是如果它看起来很有希望,我愿意研究。 更新1:研究了geoclipmapping方法后,我开始使用它进行编码。我完成了所有的数学运算,然后游戏开始运行。但是,它效率极低-对我而言,这可能是不好的编码。它以2FPS的速度运行,并使用了我CPU的整个核心。我将尝试改进代码,但我想需要更多帮助,因此这里是 Terrain manager类的代码的Pastebin。如果可以提高效率,我将在稍后发布更多结果。
10 c#  xna 

3
在XNA Framework上构建的等距游戏有哪些重要且有用的资源?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 6年前关闭。 我目前正在使用Microsoft XNA Framework开发等距游戏。我正在寻找可用于使该项目成功完成的资源,例如等距引擎,物理引擎,子画面引擎(用于等距游戏),事件处理程序等。 任何投入将不胜感激。

1
如何将物理从几何着色器整合到程序生成的世界中?
本质上,我想消除从CPU到GPU产生相干噪声的需要。从那里,我还想使用此噪声作为体素点的密度来生成三维世界的地形。在此之后,我想获取这些密度并将它们代表世界的地形多边形化(生成顶点)。 一切都很好。但是,我也想实时地动态改变世界。一旦达到这一点,尝试将顶点返回给CPU来执行诸如碰撞检测之类的事情,以及我想涉及CPU而不是GPU的所有游戏计算等问题。 所以问题是:如何将顶点的子集返回给CPU以处理冲突? 还有一个问题:是否有一种简单的方法来获取一组顶点并在GPU上从中生成索引? 对于这些不同的东西应该使用哪种着色器,我感到困惑。我听说有人使用像素着色器来收集密度,然后使用几何着色器来处理从顶点生成的地形,然后以某种方式合并顶点着色器来进行动态变形。 我正在使用C#4.0,.NET 4.0和XNA Game Studio 4.0。
10 c#  xna  shaders 


6
在XNA中将Game1静态化是一个坏主意吗?
将我的Game1课程设为静态真的不是一个好主意吗?就像目前在我的Game1课堂上一样,我有一个名为的类TileHandler,负责处理与我当前的那组瓷砖有关的AnimalHandler所有事情,并且处理所有我的动物(令人惊讶地)。 现在,如果我AnimalHandler要检查瓷砖是否TileHandler从那时起便是可步行的,这会引起问题,或者我必须将可步行瓷砖的列表传递到中AnimalHandler,而不希望这样做。 更简单的方法是将其设置为Game1静态,然后AnimalHandler直接运行Game1._tileHandler.WalkableTile(position)。 现在,我看不到有任何立即出错的问题或会导致任何问题的任何事情,但是我只是刚刚开始使用静态类,所以,有什么知识渊博的人是否会看到任何大的原因来说明这是一个坏主意?
10 xna  c#  architecture 

1
将空气阻力添加到高尔夫球轨迹方程中
我正在VB.NET 2005中开发2D高尔夫游戏,但是我对如何实施会影响球的空气或风阻力感到困惑。 我已经有了射弹的这些方程式: v0v0v_0为击打或击打时高尔夫球的初始速度 垂直和水平分量高尔夫球的速度: vXvÿ= v0cos(θ)=v0sin(θ)−gt∗vx=v0cos(θ)vy=v0sin(θ)−gt∗ \begin{align} v_x &= v_0 cos(\theta) \\ v_y &= v_0 sin(\theta) - gt* \end{align} 高尔夫球的垂直和水平距离: xy=v0cos(θ)t=v0sin(θ)t−(0.5)gt2x=v0cos(θ)ty=v0sin(θ)t−(0.5)gt2 \begin{align} x &= v_0cos(\theta)t \\ y &= v_0sin(\theta) t - (0.5)gt^2 \end{align} 如何在此方程式中增加空气阻力以适当影响高尔夫球的速度?我不知道该怎么做,有人处理过类似的方程式吗?

3
创建实体作为聚合
我最近询问了如何将实体与其行为分开以及与本文相关的主要答案:http : //cowboyprogramming.com/2007/01/05/evolve-your-heirachy/ 这里讨论的最终概念是:作为纯聚集体的对象。 我想知道如何使用C#将游戏实体创建为纯聚合。我还不太了解如何运行的概念。(也许实体是实现特定接口或基本类型的对象的数组?) 我当前的想法仍然涉及为每种实体类型都有一个具体的类,然后实现相关的接口(IMoveable,ICollectable,ISpeakable等)。 我如何才能完全将实体创建为聚合,而又没有该实体的任何具体类型?

2
延迟渲染引擎的场景图
作为学习练习,我编写了一个延迟渲染引擎。现在,我想向该引擎添加一个场景图,但是我有点困惑如何做到这一点。 在普通的(前向渲染引擎)上,我只将所有项目(全部实现IDrawable和IUpdateAble)添加到场景图中,而不是先遍历场景图宽度并在任何地方调用Draw()。 但是,在延迟渲染引擎中,我必须分开进行绘图调用。首先,我必须先绘制几何图形,然后绘制阴影投射器,然后绘制灯光(所有灯光都绘制到不同的渲染目标),然后再将它们组合在一起。因此,在这种情况下,我不能只遍历场景图并仅调用draw。我的观察方式要么是我要遍历整个场景图3次,检查必须绘制哪种对象,要么必须创建3个以某种方式相互连接的独立场景图。这两个似乎都是较差的解决方案,我想使场景对象更透明。 我想到的另一种解决方案是像往常一样通过场景图,然后将项目添加到3个单独的列表中,分离几何图形,阴影投射器和灯光,然后迭代这些列表以绘制正确的内容,这更好吗?明智的每帧重新填充3个列表?
10 xna  c#  scene-graph 

3
为什么Farseer 2.x将临时人员存储为成员而不是堆栈中?(。净)
更新:此问题涉及Farseer2.x。较新的3.x似乎没有这样做。 目前,我在广泛使用Farseer Physics Engine,并且我注意到它似乎将许多临时值类型存储为类的成员,而不是像人们期望的那样存储在堆栈中。 这是来自Body该类的示例: private Vector2 _worldPositionTemp = Vector2.Zero; private Matrix _bodyMatrixTemp = Matrix.Identity; private Matrix _rotationMatrixTemp = Matrix.Identity; private Matrix _translationMatrixTemp = Matrix.Identity; public void GetBodyMatrix(out Matrix bodyMatrix) { Matrix.CreateTranslation(position.X, position.Y, 0, out _translationMatrixTemp); Matrix.CreateRotationZ(rotation, out _rotationMatrixTemp); Matrix.Multiply(ref _rotationMatrixTemp, ref _translationMatrixTemp, out bodyMatrix); } public Vector2 GetWorldPosition(Vector2 localPosition) …

2
在Unity中生成随机数而不会产生类歧义
我在Unity(C#)中有一个要创建随机数的问题。我想使用System.Random(reference:using System),但是Unity抱怨它与自己的模棱两可UnityEngine.Random。我不能指定引用(使用System.Random),因为random它不是名称空间。如何指定我要随机使用系统而不是Unity系统?
10 unity  c# 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.