草庐IT

c# - 为什么 foreach(var i in array2D) 适用于多维数组?

给定以下C#代码:int[,]array2D=newint[10,10];intsum=0;foreach(variinarray2D){sum+=i;}问题是:是什么导致了i的类型?被正确推断为int?这一点都不明显,因为array2D是一个矩形数组。它没有实现IEnumerable.它还实现了一个GetEnumerator()方法,返回System.Collections.IEnumerator.因此,我希望i类型为object.我的代码使用的是.net4.03。相关问题:WhydoC#MultidimensionalarraysnotimplementIEnumerable?.

c# - 在二维网格中查找所有循环/封闭形状

我有一个“无限”二维网格,我想检测封闭/完整的“结构”——任何形状的区域,这些区域被四面包围。但是,我需要识别每个单独的闭合电路-包括较大的形状(如果有的话)。在研究这个过程中,我发现了循环检测算法,但我没有看到一种干净/有效的方法来将较大的电路与较小的电路分开。例如给定以下两个“完整”结构:01110010100111000000011111010101011111第一个是由8个“墙”包围的单个单元格。循环检测使得检测这一点变得微不足道。第二个示例包含示例一个的两个副本,但它们共用一堵墙。我关心的是三个独立的电路-左室、右室和整体结构。循环算法的多次通过可能有效,但我必须确保我没有回

c# - 两个向量 2D 之间的角度

我正在尝试计算两个向量之间的角度。我试过了,但它总是返回零:publicdoubleGetAngle(Vector2a,Vector2b){doubleangle=Math.Atan2(b.Y,b.X)-Math.Atan2(a.Y,a.X);returnangle;}GetAngle(newVector2(1,1),newVector2(50,50)); 最佳答案 你应该看看atan2(here)的文档。您正在寻找的是找到B(左上向量)和A(右下向量)之间的差异,然后将其作为参数传递给atan2returnMath.Atan2(b

c# - 计算二维有符号距离场

我正在尝试计算黑白图像像素的带符号距离场,但我认为我的代码某处出错了。因为这是我的输入和输出:输入输出我遇到的问题是S中间的黑线,我的理解让我相信它应该是完全浅灰色的?这是我正在使用的代码:for(intx=0;x 最佳答案 你的罪魁祸首是这个条件语句://Ifnotequalaif(a!=p){这意味着您只对从黑色像素到白色像素的最短距离感兴趣,或者如果“a”是白色,那么您正在寻找最近的黑色像素。如果您将该测试更改为仅查看:if(p==white){然后你可能会得到你所期望的。(我没有对此进行测试,所以希望它是正确的)。(此外,如

c# - Unity 4.3 - 2D,如何以编程方式将 Sprite 分配给对象

我正在尝试创建一个负责创建和显示不同Sprite的对象,因此我想以编程方式直接访问Assets/Sprite,而不是将Sprite拖放到该对象下的层次结构中。有一种方法可以通过编程方式创建一个新的Sprite并分配我在Assets文件夹中的内容吗?我还想要一种数据结构,在游戏开始时加载一些图像,一个数组或字典或类似的东西,这样我就可以根据某些情况更改我需要显示的图像。但是让我感到困惑的是,因为我是Unity的新手,所以如何使用Assets文件夹以编程方式引用Sprite来创建Sprite。随进度编辑:我创建了一个像这样的Sprite数组:publicSprite[]mySprites;

c# - Unity 2d跳跃脚本

有没有人有一个好的2d游戏unity跳转脚本?我的代码有效,但离跳跃还很远,看起来它在飞。usingUnityEngine;usingSystem.Collections;publicclassmovingplayer:MonoBehaviour{publicVector2speed=newVector2(10,10);privateVector2movement=newVector2(1,1);//UsethisforinitializationvoidStart(){}//UpdateiscalledonceperframevoidUpdate(){floatinputX=Inpu

c# - cocos2d-xna : sprite is not drawn if using instance of a class inherited from sprite

我有一个基于Cocos2DXNA和MonoGame的游戏项目。我想在CCSprite类中添加一些自定义逻辑,所以我创建了一个继承自CCSprite的类。我添加了一个虚拟自动属性并尝试使用此类,但出于某种原因,作为我的自定义Sprite类实例创建的Sprite未显示在图层上,而作为CCSprite类实例的Sprite完全没问题。代码如下所示:publicclassSprite:CCSprite{publicstringSomeProp{get;set;}}...line1:varmySprite1=newSprite("texture.png");line2:varmySprite1=n

c# - 使用 LINQ 将 2D 网格转换为 'diamond' - 这可能吗?

前几天我需要一种算法将二维网格变成菱形(通过有效旋转45度),这样我就可以将对角线序列作为平面可枚举来处理,如下所示:1231456=>42789753869我的算法如下:publicstaticIEnumerable>RotateGrid(IEnumerable>grid){intbound=grid.Count()-1;intupperLimit=0;intlowerLimit=0;Collection>rotated=newCollection>();for(inti=0;irow=newCollection();for(intj=upperLimit,k=lowerLimit;

c# - 最佳实践 : efficient sprite drawing in XNA

在我的2DXNA游戏中绘制Sprite的有效方法是什么?更具体地说,我将这个问题分成了4个问题。我曾经声明Game1的spriteBatchstatic,并调用了SpriteBatch.Begin和.Close在每个IDrawable.Draw.效果不佳。为每个可绘制对象提供自己的SpriteBatch也效果不佳。Q1:我认为最好有一个SpriteBatch实例,并且只调用开始/关闭一次。这是正确的吗?目前,我的Game1.Draw看起来像这样:spriteBatch.Begin();base.Draw(gameTime);//drawselementsofGame.Component

c# - Box2D body 速度上限?

我有一个质量为10的物体,程序的每个循环我都使用简单方法对其施加100的力;Vector2force=newVector2(0,1)*100;bod.ApplyForce(force,bod.GetWorldCenter());它工作得很好,加速等等,但一旦速度达到10(我假设是100/10),它就不会再快了。我无论如何都不是物理学家,但我确实记得body应该不断加速,就像在重力作用下一样。这个速度限制是Box2D做事方式的结果,还是我真的搞砸了?另外,我该怎么做才能修复它。注意:如果我使用ApplyLinearImpulse而不是ApplyForce,我会得到相同的有限速度更新:我很