【问题标题】:Modulo coordinate issues (% in C#)模坐标问题(C# 中的%)
【发布时间】:2014-04-18 02:49:49
【问题描述】:

在我的基于图块的游戏中,世界被分割成 32x32 的图块块。它们跨越所有方向,因此在零以下的位置有块。平铺图像被绘制到附加到每个块的 1024x1024 纹理 2D 上。我需要能够正确使用带负坐标的模数,以基本上将游戏世界坐标转换为纹理上的坐标。

以下不起作用,如果坐标是负数,坐标显然会被反转。 (即 (-32, -32) 将是 (-32, -32) 而不是 (992, 992))

   public int mod(int num)
   {
       //Mods a pixel position to fit in a chunk texture
       return Math.Abs(num % 1024);
   }

我该怎么办?我需要一些有用的东西。

我也试过这个:

    public int mod(int num)
    {
        //Mods a pixel position to fit in a chunk texture
        if (num < 0)
            return (num % 1024) + 1024;
        else
            if (num >= 0)
                return num % 1024;
            else return -1;
    }

...这消除了反转问题,但是如果坐标是-1024或类似的,它会在模数处变为0并最终为1024,这超出了纹理的范围...

【问题讨论】:

    标签: c# xna coordinates modulo


    【解决方案1】:

    在您的问题情况下,您只需要再次修改它,即使 1024 = 0 (code):

    static double calc(double num)
    {
        double mod = num % 1024;
        return mod < 0 ? (1024 + mod) % 1024 : mod;
    }
    

    【讨论】:

      【解决方案2】:

      我对我的游戏做了类似的事情,为了得到你需要做的正确坐标:

      public int PerformRepeatLogic(int x)
      {
          //Mods a pixel position to fit in a chunk texture
          int result = Math.Abs(x) % 1024;
      
          if (x < 0)
              result = 1024 - result;
          return result;
      }
      

      有了这个,您可以轻松地通过x = PerformRepeatLogic(x) 正确“循环”您的坐标。 (例如:宽度为1000-5 将变为995

      【讨论】:

      • 不。不工作。 (-1024, -1024) 仍然等于 (1024, 1024) 而不是 (0, 0)
      • 你是什么意思(即 (-32, -32) 将是 (-32, -32) 而不是 (992, 992))?我想我可能误解了你。
      • 使用宽度为 1024 的方法,(-32, -32) = (992, 992), (-512, -512) = (512, 512) 和 (-1024, -1024) = (1024, 1024) 我需要 (-1024, -1024) 等于 (0, 0)
      • 你不能仅仅通过1024 % 1024 来实现吗?第一个 1024 是你的 X 位置,第二个是宽度?
      • 我提到-1024 % 1024,事实并非如此,google.com/search?q=1024+%25+1024
      猜你喜欢
      • 2017-05-28
      • 2019-08-14
      • 1970-01-01
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      相关资源
      最近更新 更多