Questions tagged «c#»

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


6
子弹在视频游戏中如何工作?
我在用C#设计视频游戏时遇到了这个问题。 如果我们考虑《战地风云》或《使命召唤》之类的游戏,那么数百枚甚至数千枚子弹会同时飞行。事件是不断触发的,据我所知,这会吸收很多处理能力……或者是吗?我想知道各种游戏开发人员如何管理(2D和3D)项目符号,以及每种方法最有效的方法是什么。 我读了一个问题:如何在视频游戏中模拟子弹?但是从程序设计的角度来看,它没有涉及项目符号的工作方式。 我有几个主意,但每个都有缺点: 我想到的最有效的方法(用于2D游戏): 假设我要创建一个名为Bullet的类,并且用户长时间按住按钮,将每0.01秒创建一个Bullet对象。本项目符号有: 1速度 2从其拍摄的起始位置 3精灵纹理 4命中效果 由于项目符号是其自己的类,因此它可以管理绘图,移动和动作侦听器本身。 在处理器上处理成千上万的实例化实例然后销毁(触发击中效果时)会不会很困难?RAM空间? 3D游戏的有效方法-我的另一个想法是: 可以说我创建了一个武器类。该武器具有多种功能,其中一些功能: 1检测武器瞄准的位置,并确定它是否在瞄准目标 2触发枪声的动画 3有一个doDamage()方法,该方法指示从枪支指向的内容中减去生命值 4按下按钮时通知项目符号动画类 然后,我可以创建一个静态类,例如BulletAnimation,它可以从触发它的枪支所在的位置,该枪支指向的位置(用于子弹目的地)获取通知,以及有关用于子弹的适当精灵和速度的信息。然后,此类根据位置和所需的精灵绘制精灵(在新线程上,可能是idk),以模拟从枪支发射的子弹。 后者似乎更难编写代码,并且要不断地调用静态函数一次执行成千上万的子弹,是否需要大量处理能力?获取开始位置和结束位置的持续更新也很困难。 我的问题是,游戏创作者最有效的方法是什么?这种方法会从2D游戏变为3D游戏吗?

1
实际使用基于组件的实体系统
昨天,我阅读了GDC Canada上有关属性/行为实体系统的演示,我认为它很棒。但是,我不确定如何实践地使用它,而不仅仅是理论上的。首先,我将快速向您解释该系统的工作方式。 每个游戏实体(游戏对象)都由属性(=数据,可以通过行为,也可以通过“外部代码”访问)和行为(=逻辑,包含OnUpdate()和OnMessage())组成。因此,例如,在Breakout克隆中,每个积木将由(例如!)组成:PositionAttribute,ColorAttribute,HealthAttribute,RenderableBehaviour,HitBehaviour。最后一个看起来像这样(这只是一个用C#编写的无效示例): void OnMessage(Message m) { if (m is CollisionMessage) // CollisionMessage is inherited from Message { Entity otherEntity = m.CollidedWith; // Entity CollisionMessage.CollidedWith if (otherEntity.Type = EntityType.Ball) // Collided with ball { int brickHealth = GetAttribute<int>(Attribute.Health); // owner's attribute brickHealth -= otherEntity.GetAttribute<int>(Attribute.DamageImpact); SetAttribute<int>(Attribute.Health, brickHealth); // owner's attribute // …

13
哪些C#库可用于支持游戏开发?[关闭]
由于游戏基于许多不同的子系统,例如图形(DirectX,OpenGL等),声音(OpenAL,Ogg Vorbis等)或物理(碰撞等),因此您知道哪些有用的库是有用的C#中的游戏开发,它们提供什么好处?
58 c#  .net 

7
自学游戏开发的危害是什么?[关闭]
我即将踏上游戏开发之旅。在回答最后一个问题后,我将使用C#和XNA。 但是,我个人并不认识任何其他游戏开发人员,并且我也不从事该行业,因此,他们将是自学成才的。显然,例外情况是提出问题和阅读在线/打印的信息,但我仍将其归类为自学成才。 这样,我想为没有人“把我留在他们的翅膀下”而可能遇到的问题做好准备。 打个比方,当我自学弹吉他时,我弹A大调和弦的方式使移至我后来学到的和弦更加困难。 如果您可以分享您的经验教训,以及在学习游戏开发方面可能出什么问题的建议,我将不胜感激。 我很清楚,犯错误是学习的最大部分,但是,如果有错误,我可以为之做好准备,那么我会为此感到高兴。
58 c#  xna  books 

9
面对浮点非确定性,确定性游戏怎么可能?
为了使游戏像RTS网络游戏一样,我在这里看到了许多答案,这些建议建议使游戏完全具有确定性。那么您只需要彼此转移用户的操作,并稍微延迟所显示的内容,以便在呈现下一帧之前“锁定”每个人的输入。这样,诸如单位位置,健康状况之类的事情就不需要通过网络不断更新,因为每个玩家的模拟都是完全相同的。我也听到过建议进行重放的同一件事。 但是,由于浮点计算在机器之间,甚至在同一机器上同一程序的不同编译之间是不确定的,真的可以这样做吗?我们如何防止这一事实在整个游戏中引起波动的玩家(或重播)之间产生微小差异? 我听说有人建议完全避免使用浮点数int来表示小数的商,但这对我来说并不实用-例如,如果我需要取一个角度的余弦值怎么办?我是否真的需要重写整个数学库? 请注意,我主要对C#感兴趣,据我所知,在这方面,C#与C ++存在完全相同的问题。

7
2D Platformer AABB碰撞问题
我的AABB冲突解决方法有问题。 我先解析X轴,然后解析Y轴,以解决AABB相交问题。这样做是为了防止此错误:http : //i.stack.imgur.com/NLg4j.png 当物体移入播放器且必须水平推动播放器时,当前方法可以正常工作。如您在.gif文件中所见,水平尖峰正确地推动了播放器。 但是,当垂直峰值移动到播放器中时,X轴仍将首先解析。这使得“将钉鞋用作升降机”是不可能的。 当玩家进入垂直尖峰(受重力影响而掉入)时,他被推向Y轴,因为开始时X轴上没有重叠。 我尝试过的方法是此链接的第一个答案中描述的方法:2D矩形对象碰撞检测 但是,尖峰和移动的对象是通过更改位置而不是速度来移动的,直到调用Update()方法之前,我才计算它们的下一个预测位置。不用说此解决方案也不起作用。:( 我需要以上述两种情况都可以正常工作的方式解决AABB碰撞。 这是我当前的碰撞源代码:http : //pastebin.com/MiCi3nA1 如果有人可以研究这个问题,我将非常感激,因为这个错误从一开始就一直存在于引擎中,并且我一直在努力寻找一个好的解决方案,但没有成功。这严重使我整夜都在看碰撞代码,并阻止我进入“有趣的部分”并对游戏逻辑进行编码:( 我尝试实现与XNA AppHub平台演示中相同的碰撞系统(通过复制粘贴大部分内容)。但是,“跳跃”错误发生在我的游戏中,而AppHub演示中没有发生。[跳虫:http : //i.stack.imgur.com/NLg4j.png ] 要跳,我检查播放器是否为“ onGround”,然后将-5添加到Velocity.Y。 由于玩家的Velocity.X高于Velocity.Y(请参见图中的第四个面板),因此onGround在不应该设置为true时设置为true,从而使玩家跳入半空中。 我相信这在AppHub演示中不会发生,因为播放器的Velocity.X永远不会高于Velocity.Y,但我可能会误会。 我先在X轴上解析,然后在Y轴上解析,从而解决了这个问题。但是,如上所述,这加剧了与尖峰的碰撞。

4
如何在Unity中完全隐藏和保护播放器的琴弦?
我一直在使用Unity创建一个完全脱机的2D游戏(这是问题所在),游戏过程需要您在特定级别输入某些字符串,并且Unity编译为DLL,可以很容易地对其进行逆向工程,因此有没有一种方法可以保护这些字符串(游戏处于离线状态,所以我无法从其他来源获取)? 游戏非常依赖这些字符串,是的,我知道混淆,但是我想要更强大的东西。而且我知道,简单的方法就是从数据源在线进行所有操作,但是我想知道是否有可能。 可以这样反编译:
47 unity  c#  anti-cheat 

5
游戏中的演员应该负责吸引自己吗?
我对游戏开发非常陌生,但对编程却不是。 我(再次)使用JavaScript的canvas元素在玩Pong类型的游戏。 我创建了一个Paddle具有以下属性的对象... width height x y colour 我也有一个Pong具有诸如...的属性的对象 width height backgroundColour draw()。 该draw()方法当前正在重置canvas,这就是出现问题的地方。 如果Paddle对象具有draw()负责其绘制的方法,或者draw()该Pong对象的负责负责其演员的绘制(我认为这是正确的术语,如果我不正确,请更正我)。 我发现在Paddle实例化两个对象Player和时,绘制自身会很有利Enemy。如果在没有Pong的draw(),我需要两次写类似的代码。 最佳做法是什么? 谢谢。

1
为什么此节拍检测代码无法正确注册某些节拍?
我制作了此SoundAnalyzer类来检测歌曲中的节拍: class SoundAnalyzer { public SoundBuffer soundData; public Sound sound; public List<double> beatMarkers = new List<double>(); public SoundAnalyzer(string path) { soundData = new SoundBuffer(path); sound = new Sound(soundData); } // C = threshold, N = size of history buffer / 1024 B = bands public void PlaceBeatMarkers(float C, int N, …
38 c#  audio 

9
在Unity中,如何正确实现单例模式?
我看过一些视频和教程,这些视频和教程主要用于Unity中创建单例对象GameManager,它们似乎使用了不同的方法来实例化和验证单例。 是否有一种正确的或更确切的首选方法? 我遇到的两个主要示例是: 第一 public class GameManager { private static GameManager _instance; public static GameManager Instance { get { if(_instance == null) { _instance = GameObject.FindObjectOfType<GameManager>(); } return _instance; } } void Awake() { DontDestroyOnLoad(gameObject); } } 第二 public class GameManager { private static GameManager _instance; public static GameManager Instance …

4
为什么我的物体在45度时比在90度时移动得更快?
我的游戏中有一些物体在45度和90度时移动得更快。 每个对象都有 点(x,y)的位置 Vector2D(x,y)方向 整机速度 我在更新过程中所做的就是计算新职位: position.x += direction.x * speed position.y += direction.y * speed 我该如何纠正?我希望它以相同的速度在任何角度移动。
32 c#  2d  geometry 

3
什么是标准C#/ Windows Forms游戏循环?
当用C#编写使用原始 Windows窗体和某些图形API包装器(如SlimDX或OpenTK)的游戏时,应如何构建主游戏循环? 规范的Windows窗体应用程序的入口点看起来像 public static void Main () { Application.Run(new MainForm()); } 同时可以做到一些什么是挂钩neccessary 的各个事件Form类,这些事件没有提供明显的地方放的码位进行不断定期更新游戏逻辑对象或开始和结束渲染帧。 这种游戏应该使用什么技术来实现类似于规范的游戏 while(!done) { update(); render(); } 游戏循环以及最小的性能和GC影响?

5
将实例或类用于游戏资源(木材,铁,金)
因此,我正在制作一个游戏,您可以在该游戏中将船只发送到地点以买卖木材,铁,黄金等资源。 现在我想知道如何在游戏中创建资源。我想出了两种选择 为每个资源创建一个类: public class ResourceBase { private int value; // other base properties } public class Gold : ResourceBase { public Gold { this.value = 40 // or whatever } } 创建资源类的实例 public class Resource { string name; int value; public Resource(string name, int value) { this.name = name; …

5
在基于网格的液体模拟中模拟压力
我在XNA游戏中有一个基于2D网格的水系统,我们有一种使用元胞自动机模拟水的滴落和扩散的方法。 沿斜坡流下的水的示例: 每个图块可以包含0到255个质量的液体值,以字节为单位存储。我没有使用floats旧的供水系统,但是它增加了复杂性并影响了性能。 每个水铺瓦都会使用一组简单的规则进行更新: 如果下面的图块中有空间,请尽可能多地从当前图块移至最下面的图块(向下流动) 如果2个边不相同且都不为零并且都可以通过,我们将获得3个图块的总和(左+当前+右),并将其除以3,剩下的就放在中间(当前)图块上 如果上述规则给出的总和为2,则我们应将图块分为两侧(1、0、1) 如果规则2的总和为1,则选择一个随机面流入 如果规则2失败,我们应该检查一侧是否可以通过,另一侧是否可以通过。如果是这样,我们将当前图块一分为二 如何扩展这种逻辑以包含压力?压力会使液体从“ U形弯头”上方上升并充满气穴。 当前如何失败的示例: 水应在U型弯管的两侧流动并平衡。此外,我还创建了一些方法来找出水障碍到底有多远,以及因此而受到的压力。现在,我需要能够获取这些数字并将其应用于其他区域以均衡压力。
30 xna  c#  physics  grid  water 

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.