Questions tagged «c#»

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

5
基于Tile的2D平台平台中的45°坡度
我想在基于图块的平台游戏中使用简单的45°坡度,但是我似乎无法将算法推倒。请看一下代码和视频,也许我错过了明显的地方? //collisionRectangle is the collision rectangle of the player with //origin at the top left and width and height //wantedPosition is the new position the player will be set to. //this is determined elsewhere by checking the bottom center point of the players rect if(_leftSlope || _rightSlope) { //Test bottom …
12 xna  c#  xna-4.0  platformer 

1
在MUD样式的基于文本的世界中组织关卡/房间
我正在考虑编写一个小型的基于文本的冒险游戏,但是我不确定如何从技术角度设计世界。 我的第一个想法是使用XML进行设计,其设计如下所示。对大量XML表示歉意,但我认为完全解释我在做什么很重要。 <level> <start> <!-- start in kitchen with empty inventory --> <room>Kitchen</room> <inventory></inventory> </start> <rooms> <room> <name>Kitchen</name> <description>A small kitchen that looks like it hasn't been used in a while. It has a table in the middle, and there are some cupboards. There is a door to the north, …

3
将粒子绘制为平滑斑点
我是游戏/图形开发的新手,并且正在玩2D粒子。我想像液体/水一样将斑点彼此靠近地绘制为斑点。我不想绘制重叠的大圆圈,因为斑点不会很平滑(太大)。我不是很了解物理学,但是我想我想要的是看起来与表面张力相似的东西。 我无法在stackexchange或Google上找到任何内容(也许我不知道正确的关键字?)。到目前为止,我已经找到了两种可能的解决方案,但是我无法找到有关算法的任何具体信息。 其中之一是计算我认为是斑点的粒子的凹壳。我可以通过创建一个等效类(基于“彼此靠近”的关系)来计算blob。奇怪的是,我无法找到任何算法来解释如何计算凹面船体。许多文章(以及stackexchange中的文章)都链接到执行此操作的库或商业产品(我需要库才能在C#中工作),但从来没有任何算法。同样,此解决方案可能会遇到一个圆形的粒子问题,该粒子无法检测到中间的空白区域。 在研究凹壳时,我偶然发现了一种叫做alpha形状的东西。这似乎正是我想要做的,但是就像凹壳一样,我还没有找到任何解释它们实际工作原理的资料。我找到了一些演示材料,但还不够继续。就像我以外的每个人都知道的一个大秘密:-/ 计算凹壳或alpha形状后,我想使其成为贝塞尔曲线以使其平滑且美观。 尽管我确实发现自己的方法过于复杂,但是也许我正在尝试以错误的方式解决此问题?如果您可以对我的问题提出其他解决方案,或者解释我所缺少的内容,我将非常高兴和感激:-) 谢谢。

2
我如何在XNA中收集微型游戏,使用户可以下载微型游戏包,而主.exe可以在不更改的情况下运行它们?
我目前正在用XNA制作PC游戏。它实际上是一个小游戏的集合(目前有3个小游戏),但是我计划制作和添加更多可下载的“包”。 我的问题是,实现此目标的最佳方法是什么? 目前我的想法是: 创建一个“游戏”界面 为此接口构建游戏,但将其创建为.dll。 让主.exe文件扫描目录并在运行时加载.dll。 我并没有对此想法产生太多的混乱,但是我知道至少有一些应用程序使用了这种插件方法(Notepad ++似乎),但是我不确定有没有做过的游戏(尽管我敢肯定)它们必须存在)。但是,这似乎是一个以前已经解决的问题,所以我想知道是否存在任何形式的既定最佳实践。
12 xna  c# 

2
为什么Unity使用反射来获取更新方法?
为什么为了不统一使用反射来访问MonoBehaviour像信息的方法Awake,Update,Start,...? 使用反射会不会很慢?为什么不利用其他方法Template Method呢?它可以在MonoBehaviour基类中简单地将方法定义为抽象,并强制子类实现该方法。
12 unity  c#  performance 

1
创建健壮的物品系统
我的目标是创建一个模块化/尽可能通用的物料系统,该系统可以处理以下内容: 可升级物品(+6武士刀) Stat修饰符(+15敏捷) 物品修饰符(%X几率造成Y伤害,几率冻结) 充电物品(魔术师使用30次) 套装物品(装备4件X激活Y功能) 稀有度(常见,独特,传奇) 可分解的(分解成一些手工材料) 可制作(可以使用某些材料制作) 消耗(5分钟%X攻击强度,恢复+15 hp) *我能够解决以下设置中加粗的功能。 现在,我尝试添加许多选项以反映我的想法。我不打算添加所有必要的功能,但是我希望能够按照自己的意愿实施它们。这些也应该与库存系统和数据序列化兼容。 我计划完全不使用继承,而是使用实体组件/数据驱动的方法。最初,我想到的系统具有: BaseStat:通用类,可随时随地保存统计信息(也可用于项和字符统计信息) Item:包含数据的类,例如列表,名称,itemtype和与ui,actionName,description等相关的事物。 IWeapon:武器界面。每个武器都有实现IWeapon的自己的类。这将具有Attack(攻击)和对角色统计的引用。装备武器后,它的数据(物品类别的stat)将被注入角色stat(无论拥有什么BaseStat,它都会作为Stat奖励添加到角色类别中)因此,例如,我们想制作一把剑(想产生带有json的物品类),所以剑将对角色属性增加5点攻击。因此,我们有一个BaseStat为(“ Attack”,5)(我们也可以使用enum)。装备时,此属性将作为BonusStat(将是不同的类)添加到角色的“攻击”属性中。因此,名为Sword的类将实现IWeapon,项目类别已创建。因此,我们可以向这把剑注入角色统计数据,并且在攻击时,它可以从角色统计数据中检索总的攻击统计数据,并在Attack方法中造成伤害。 BonusStat:是一种将统计信息添加为奖励而无需触及BaseStat的方法。 IConsumable:与IWeapon相同的逻辑。添加直接属性相当容易(+15 hp),但是我不确定要使用此设置添加临时武器(%x攻击5分钟)。 IUpgradeable:可以使用此设置来实现。我正在考虑将UpgradeLevel作为基本属性,在升级武器时会增加它。升级后,我们可以重新计算武器的BaseStat以匹配其升级级别。 在此之前,我可以看到该系统相当不错。但是对于其他功能,我认为我们还需要其他东西,因为例如,我无法在其中实现Craftable功能,因为我的BaseStat无法处理该功能,这就是我遇到的问题。我可以将所有成分添加为统计信息,但这没有任何意义。 为了使您更轻松地进行此操作,以下一些问题可能会对您有所帮助: 我是否应该继续执行此设置以实现其他功能?没有继承就可能吗? 您有什么办法可以想到,在没有继承的情况下实现所有这些功能? 关于物品修饰符,如何实现?因为它的性质非常通用。 有什么建议可以做些什么来简化构建这种架构的过程? 有没有我可以挖掘的与此问题相关的来源? 我确实尽力避免继承,但是您认为在保持相当可维护性的同时,可以轻松地通过继承解决/实现这些继承吗? 由于我的问题范围很广,因此可以随意回答一个问题,这样我就可以从不同的方面/人那里获得知识。 编辑 遵循@ jjimenezg93的回答,我用C#创建了一个非常基本的系统进行测试,它可以正常工作!看看是否可以添加任何内容: public interface IItem { List<IAttribute> Components { get; set; } void ReceiveMessage<T>(T message); } public interface …

5
如何在基于组件的游戏中正确处理碰撞?
在围绕组件设计的游戏中,尝试绕过正确处理碰撞的方法。 我看到许多示例PhysicsComponent在实体的组件列表中添加了某种示例,但实际的实现使我感到困惑。 为了PhysicsComponent使它起作用,需要访问周围的环境。这对我来说没有直觉。组件不应该不仅意识到其容器(实体),还没有意识到其容器的容器(世界)吗? 对我来说,听起来好像关卡或场景应该维护这些实体的列表,并且每次游戏更新都会遍历这些实体以确定哪个碰撞。 我的问题是,首先,这是否是好的设计,其次,如何确定哪些实体会发生冲突。我想实体实体可以实现一个空的IRigidBody接口,以便该级别可以确定列表中的哪些实体支持冲突。但这会破坏组件设计吗? 相反,它们应该包含一个空的RigidBody成分吗?实际上,这可能会更好,因为它可能并不总是空的,而且这种方法更适合未来。唯一的问题是复杂性。场景不仅必须遍历每个实体,还必须遍历每个实体的组件,以确定它是否具有此RigidBody组件。 第三,当它们确实发生碰撞时,应该以某种方式告知两个实体,我也不确定如何做到这一点。 假设两个实体都包含一个HealthComponent,并且当它们碰撞时,两个实体的健康状况都会降低一些任意值5。我想当场景中检测到两个实体之间发生碰撞时,要负责处理此问题? 但是,现场是否要承担太多责任?当场景负责实体不应该访问的许多事物时,我可以看到这种情况可能会变得一发不可收拾并且变得笨拙。 编辑:问题已更新,具有更多详细信息。

3
我想摆脱我的“制作一切静态和全局”设计模式,但是如何做呢?
我正在太空中制作一个小地牢爬行者,我想听听一些有关如何使引擎后端更好的建议。基本上,当前所有内容都是基于管理人员的: BackgroundManager:具有AddBackground(image, parallax)制作炫酷背景效果的方法。 ConfigManager:读取/制作配置文件,还保存从该配置文件读取的数据。 DrawManager:有Draw(sprite)方法来绘制的东西到屏幕上,事情就是这样SetView(view),GetView()等等。 EntityManager:包含所有活动实体,并具有添加,删除和查找实体的方法。 DungeonManager(实际上称为GridManager,但这是为了简单):有方法,如GenerateDungeon(),PlaceEnemies(),PlaceFinish()等。 现在我什至没有列出所有我的经理,所以我认为这必须改变。我的游戏也基于屏幕,这使它更令人讨厌,因为我不需要经理管理的一半内容,例如主菜单(我的主菜单中不需要物理/实体/地下城) !) 现在,我考虑使管理器不是静态的,并为我的ScreenMainGame提供所有特定于游戏的管理器的实例。但这使打电话给/获取与管理人员有关的任何东西变得一团糟...例如,如果我想从不在的任何地方绘制地牢ScreenMainGame.Draw(),我就必须这样做... ((ScreenMainGame)ScreenManager.CurrentScreen).GridManager.Draw() 真丑。 那么,游戏开发者们,你们有谁知道如何解决这个混乱局面吗?我将不胜感激!

2
这两个代码中的哪个“更好”?制作局部变量还是类变量?
我制作了更多游戏,问了更多愚蠢的问题。 希望这一段很简短。我正在创建一个非常基本的类,该类通过向刚体施加力来移动Player对象,但这让我想知道,我应该对rb进行类引用还是对Update每帧进行局部引用?(请记住,它已经存在于Monobehaviour.GameObject统一父类中)。 我想知道是否做很多局部变量会减慢整个循环的速度(通过局部变量,我的意思是在函数本身内部,而不是在类的顶部,希望我使用正确的术语)。 这就是我想做的两种方式: public class Player : MonoBehaviour { private void FixedUpdate() { Rigidbody rb = GetComponent<Rigidbody>(); float v = Input.GetAxis("Vertical"); rb.AddForce(v * rb.transform.forward * Const.walkForce); } } 要么... public class Player : MonoBehaviour { Rigidbody rb; private void Awake() { rb = GetComponent<Rigidbody>(); } private void FixedUpdate() { …
11 unity  c#  game-loop 

2
如何进行延迟的鼠标输入?
我有一个赛车游戏,想法是玩家喝醉了。我希望鼠标有一个延迟的输入,您将鼠标左右移动来转动。 如何在用户提供的输入和汽车转弯量之间设置恒定的延迟? 现在我有这个: h = Mathf.Lerp(h, (((Input.mousePosition.x / Screen.width) * 2) - 1), Time.deltaTime * 2); 发生的情况是转弯被延迟了,但是非常慢,换句话说,如果我非常快地移动鼠标,汽车会非常缓慢地转弯,但是如果我将乘数提高到Time.deltaTime,汽车会转弯更快,但是延迟效果会最小化。 我还能怎么做?
11 unity  c#  input  mouse 

2
检查游戏对象的组件是否可以销毁
在Unity中开发游戏时,我正在大量使用[RequireComponent(typeof(%ComponentType%))]以确保组件满足所有依赖性。 我现在正在实现一个突出各种UI对象的教程系统。要进行突出显示,我要引用GameObject场景中的,然后使用Instantiate()克隆它,然后以递归的方式删除显示不需要的所有组件。问题在于,随着RequireComponent这些组件的广泛使用,许多组件无法简单地以任何顺序删除,因为它们由尚未删除的其他组件所依赖。 我的问题是:有没有一种方法可以确定是否Component可以将a 从GameObject当前连接的对象中删除。 我发布的代码在技术上可以正常工作,但是会引发Unity错误(如图所示,未在try-catch块中捕获) 这是代码: public void StripFunctionality(RectTransform rt) { if (rt == null) { return; } int componentCount = rt.gameObject.GetComponents<Component>().Length; int safety = 10; int allowedComponents = 0; while (componentCount > allowedComponents && safety > 0) { Debug.Log("ITERATION ON "+rt.gameObject.name); safety--; allowedComponents = 0; foreach (Component c in …
11 unity  c# 

2
如何等待异步操作/协程?
我正在寻找一种通用/可重用的方法来等待协程和异步操作在Unity 5中完成,类​​似于C#5的await关键字。 我能想到的最简单的方法是这样的: public class SomeUtility { public bool IsDoingSomething { get; private set; } public IEnumerator DoSomethingAsync() { IsDoingSomething = true; yield return new WaitForSeconds(2); IsDoingSomething = false; } } 然后在另一个协程中: while(!someUtilityInstance.IsDoingSomething) yield return null; 但是,这不是很好,因为它会使while语句变得混乱,不可重用(即使是简单的实用程序功能,也需要实例和专用的类!)以及很多甚至不需要的单例或静态内容。 我发现最接近的是使用Unity的AsyncOperation。这在这里很好地工作: public static IEnumerator Await(this AsyncOperation operation) { while(!operation.isDone) yield return operation; } …

2
为动态障碍物和玩家造成的障碍寻找路径?
嗨,我正在Unity 5中创建TD,并且在寻路方面需要一些帮助。 我将为我的AI 使用Arons A *寻路,这使我能够使用动态对象并在运行时更新路径。但是,在我的游戏中,我希望玩家能够使用特殊的炮塔来阻挡小兵,这将迫使小兵攻击“障碍塔”而不是到达目的地。 我怎样才能完成这样的事情? 图片更清晰:
11 unity  c#  2d  ai  path-finding 


2
在两个联网状态之间插值?
我在客户端上模拟了许多实体(它们的速度以每帧为基础添加到它们的位置中),我让它们自己推算。他们发送有关上次被查看的地点及其速度变化的更新。效果很好,其他玩家也看到了这项工作。但是,一段时间后,这些播放器开始不同步。这是因为延迟。 我想知道如何在状态之间进行插值,以使它们看起来处于正确的位置。我知道玩家最后一次看到的位置以及他们当前的速度,但是插值到最后一次看到的状态会导致玩家实际向后移动。我根本不能对其他客户使用速度,而只是将它们“拖”向适当的方向,但是我认为这会引起锯齿运动。有哪些选择?

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.