小编Kas*_*dum的帖子

将对象转换为T

我正在使用XmlReader.NET中的类解析XML文件,我认为编写通用解析函数来一般性地读取不同的属性是明智的.我想出了以下功能:

private static T ReadData<T>(XmlReader reader, string value)
{
    reader.MoveToAttribute(value);
    object readData = reader.ReadContentAsObject();
    return (T)readData;
}
Run Code Online (Sandbox Code Playgroud)

当我意识到,这并不像我原先计划的那样完全有效; 它会引发原始类型(如intor)的错误double,因为强制转换无法从a转换string为数字类型.有没有办法让我的功能以修改后的形式占上风?

c# generics casting

79
推荐指数
3
解决办法
10万
查看次数

Java中的收益率回报率

我使用泛型在java中创建了一个链表,现在我希望能够迭代列表中的所有元素.在C#中,我将yield return在链表中使用,同时浏览列表中包含的元素列表.

我如何创建上面的java版本,我可以迭代链表中包含的所有项目?

我希望能够编写代码ala

LinkedList<something> authors = new LinkedList<something>();
for (Iterator<something> i = authors.Values ; i.HasNext())
      doSomethingWith(i.Value);
Run Code Online (Sandbox Code Playgroud)

并且认为价值'属性'/方法将包含类似的代码

LinkedListObject<something> current = first;
While (current != null){
 yield return current.getValue();
 current = current.getNext()
}
Run Code Online (Sandbox Code Playgroud)

编辑:请注意,我对使用任何第三方API不感兴趣.仅内置java功能.

c# java linked-list

51
推荐指数
4
解决办法
3万
查看次数

RSS中的<pubDate>和<lastBuildDate>有什么区别?

我觉得,在每个RSS.xml文件中,pubDate和lastBuildDate都匹配.

我相信这一个,并不总是如此......

首先,上述两者之间的区别是什么?

其次,RSS阅读器根据pubDate或lastBuildDate按日期对内容进行排序?

rss feed

34
推荐指数
2
解决办法
2万
查看次数

多人游戏同步

我实现了服务器/客户端架构,所有状态更改都发送到函数,验证并广播到所有连接的客户端.这种方法效果很好,但系统目前还没有在游戏的客户端实例之间保持同步.

如果服务器和特定客户端之间恰好有5秒的延迟,那么他将在其余客户端5秒后收到状态更改,从而使他的游戏状态不同步.我一直在寻找各种方法来实现客户端之间的同步系统,但到目前为止还没有找到多少.

我是网络编程的新手,并不是那么天真地认为我可以自己发明一个工作系统而不需要花费大量时间.然而,我所拥有的想法是保留某种时间系统,因此每个状态更改都将与游戏中的特定时间戳相关联.这样,当客户端收到状态更改时,它将准确知道更改发生在游戏的哪个时段,并且反过来能够关联延迟.这种方法的问题在于,在那些n秒延迟游戏将继续在客户端,因此客户端将不得不及时回滚以更新状态更改,这肯定会变得混乱.

所以我正在寻找论文讨论解决它的主题或算法.也许我对多人游戏系统如何工作的整体设计存在缺陷,在某种意义上说,除非从服务器收到概念,否则客户端的游戏实例不应该更新?现在客户只是在游戏循环中更新自己,假设任何状态都没有改变.

c# networking synchronization

32
推荐指数
3
解决办法
2万
查看次数

分离游戏和渲染逻辑

将渲染代码与实际游戏引擎/逻辑代码分开的最佳方法是什么?将它们分开是一个好主意吗?

假设我们有一个名为Knight的游戏对象.必须在屏幕上呈现骑士以供用户查看.我们现在有两个选择.要么我们给Knight一个Render/Draw我们可以调用的方法,要么我们创建一个渲染所有骑士的渲染器类.

在两者分开的场景中,骑士应该还包含渲染他所需的所有信息,还是应该将它分开呢?

在我们创建的最后一个项目中,我们决定让渲染对象所需的所有信息都存储在对象本身中,但是我们有一个单独的组件来实际读取该信息并渲染对象.该对象将包含诸如大小,旋转,缩放以及当前正在播放的动画等信息,并且基于此,渲染器对象将构成屏幕.

像XNA这样的框架似乎认为加入对象和渲染是一个好主意,但是我们害怕被绑定到特定的渲染框架,而构建单独的渲染组件使我们可以在任何给定时间更自由地更改框架.

design-patterns coupling

29
推荐指数
3
解决办法
9006
查看次数

找到在线暑期项目组的地方

夏天来了,我将有很多时间在我的手上.我认为花时间与世界某地的其他几位热情的程序员在线合作进行项目是一个好主意.我以前从未尝试过在线协作,虽然我习惯于在更大的团队中工作并使用源代码控制,所以主要是缺乏直接的沟通对我来说是新的.我有兴趣与我自己的程序员一起开展一个项目,或者(最好)更好地完成项目,并在夏季/秋季完成项目.

然而,一个问题.我会在哪里寻找这样一个项目的人?我对加入一个正在进行的项目并不感兴趣,而是成为一个新项目的一部分.当然必须有在线网站,这是可能的吗?该项目在任何方面都不会太大.我正在考虑一个小小的舒适项目,如街机2d游戏,字幕网站,世界杯统计跟踪器或类似.

此外,什么是更好的方法.找到项目的人,然后提出项目的想法或提出一个想法,看看是否有人感兴趣?

PS:如果这个网站上的任何人发现有趣的想法随时发布在这里或PM我,我们将谈论它.

group-project

12
推荐指数
2
解决办法
416
查看次数

何时进行子类而不是区分行为

我难以决定何时应该进行子类化而不是仅添加表示类的不同模式的实例变量,然后让类的方法根据所选模式进行操作.

例如,假设我有一个基础车类.在我的计划中,我会处理三种不同类型的汽车.赛车,公共汽车家庭模型.每个人都有自己的齿轮实现,如何转动和座椅设置.我应该将我的汽车继承到三个不同的车型,还是应该创建一个类型变量并使齿轮,车削和座椅通用,以便它们根据所选择的车型而有所不同?

在我目前的情况下,我正在开发一款游戏,而且我已经意识到它开始变得有点混乱,所以我会询问有关可能重构我当前代码的建议.基本上有不同的地图,每个地图可以是三种模式之一.根据地图定义的模式,将会有不同的行为,地图将以不同的方式构建.在一种模式中,我可能必须在超时基础上向玩家和产生生物的租金,其中另一个玩家负责产生生物,而在另一个模式中可能有一些自动生成的生物与玩家产生的生物和建造建筑物的玩家.所以我想知道是否最好有一个基本地图类,然后将其子类化为每个不同的模式,或者是否继续沿着当前添加差异化行为的路径,具体取决于地图类型变量设置为.

c# oop

9
推荐指数
1
解决办法
3057
查看次数

战争迷雾的效果

我正在尝试将战争雾应用于屏幕上当前对玩家不可见的区域.我通过将游戏内容渲染RenderTarget到另一个中并将战争迷雾渲染到另一个中来实现这一点,然后我将它们与效果文件合并,该效果文件从游戏中获取颜色RenderTarget并从战争雾渲染目标中获取alpha.FOW RenderTarget在FOW出现时为黑色,而在FOW出现时则为白色.

这确实有效,但它将战争的雾(未显示的位置)变成白色而不是黑色的预期颜色.

在应用效果之前,我将设备的后备缓冲区清除为白色.当我试图将它清除为黑色时,根本没有出现战争迷雾,我认为这是alpha混合黑色的产物.但它适用于所有其他颜色 - 为结果屏幕提供该颜色的色调.

如何在仍能够在两个渲染目标之间进行Alpha混合的同时实现黑雾?

应用FOW的渲染代码:

private RenderTarget2D mainTarget;
private RenderTarget2D lightTarget;

   private void CombineRenderTargetsAndDraw()
    {
        batch.GraphicsDevice.SetRenderTarget(null);
        batch.GraphicsDevice.Clear(Color.White);

        fogOfWar.Parameters["LightsTexture"].SetValue(lightTarget);

        batch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend);
        fogOfWar.CurrentTechnique.Passes[0].Apply();
        batch.Draw(
            mainTarget,
            new Rectangle(0, 0, batch.GraphicsDevice.PresentationParameters.BackBufferWidth, batch.GraphicsDevice.PresentationParameters.BackBufferHeight),
            Color.White
        );

        batch.End();
    }
Run Code Online (Sandbox Code Playgroud)

我用来应用FOW的效果文件:

texture LightsTexture;

sampler  ColorSampler  : register(s0);

sampler LightsSampler = sampler_state{
    Texture = <LightsTexture>;
};

struct VertexShaderOutput
{
    float4 Position : POSITION0;
    float2 TexCoord : TEXCOORD0;
};

float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
    float2 tex = input.TexCoord;

    float4 color = …
Run Code Online (Sandbox Code Playgroud)

.net c# xna effects

9
推荐指数
1
解决办法
2575
查看次数

甜甜圈2D空间的二进制空间划分数据结构

我有一个包裹在边缘的2D地图.因此,如果您偏离右边缘,您将重新出现在地图的左侧.与其他三个边缘一样.

对于KDTree来说,这是一个可继承的问题,我用它来查找点范围内的元素.通常,您将检查超球是否与超平面碰撞,以查看是否应继续搜索树的另一侧,但此检查不适用于包边.

有没有办法修改KD树以使用甜甜圈2D空间?

c# algorithm data-structures space-partitioning

9
推荐指数
2
解决办法
905
查看次数

为什么这会提高性能?

我有两个for循环基本上在两个不同的数组中查找(每个数组的峰值大小约为2-4k),并根据这些值在第三个数组中设置一个值.由于一些奇怪的原因,这段代码的性能有两个不同,这取决于我把两个for循环放在哪个顺序.

这是第一次设置.它在我的PC上执行约150毫秒:

public static int[] SchoolMultiplication(int[] a, int[] b, int numberBase)
{
    List<double> times = new List<double>();
    TimeTest timeTest = new TimeTest();

    int aLen = a.Length;
    int bLen = b.Length;

    int[,] resultMatrix = new int[a.Length + b.Length, aLen];
    int[] result = new int[a.Length + b.Length];

    timeTest.Start();

    for (int horizontalIndex = 0; horizontalIndex < b.Length; horizontalIndex++)
    {
        for (int verticalIndex = 0; verticalIndex < a.Length; verticalIndex++)

        {
            resultMatrix[a.Length + b.Length - 1 - verticalIndex - horizontalIndex, verticalIndex] = a[a.Length - verticalIndex …
Run Code Online (Sandbox Code Playgroud)

c# arrays optimization

8
推荐指数
1
解决办法
496
查看次数