2014-09-27 111 views
2

这是我第一次尝试创建2D游戏,所以我的代码可能不如它的效率高。无论如何,我试图创建一个方法来创建我的瓷砖圈子。这种方法的要点是在我的屏幕上创建圆形污垢补丁。这里有一点我的代码:用瓦片创建一个圆圈

private void generateDirt(int x, int y) { 

    int dirt = 3; 
    int radius = random.nextInt(7) + 3; 

    for (int i = radius; i > 1; i--) { 
     for (int angle = 0; angle < 360; angle++) { 
      double theta = Math.toRadians(angle); 

      // Broken Line to solve jutting blocks 
      // if (theta % Math.PI == 0) theta = 0; 

      tiles[(int) (x + radius * (Math.sin(theta) * Math.cos(theta))) 
        + (int) (y + radius 
          * (Math.sin(theta) * Math.sin(theta))) * width] = dirt; 
     } 
     radius--; 
    } 

} 

如果我注释掉,我减少半径的一部分,并绘制只是一个单圈轮廓(注释掉for循环的最外层(INT I =半径...)那么除了这两个奇怪的瓷砖突出在侧面之外,这个圆形是完美画出来的,有时候突出的块在右侧(我认为它是等于pi/2时)和底侧。但主要的问题是,当我试图通过减小半径来填充圆圈时,圆圈......以及......变成了正方形,它失去了圆形并形成了非常刚硬的角落。很晚,我甚至不确定我的数学是否正确。TBH,我只是随意地投入trig函数,最后得到了一个看起来像一个圆圈的东西。如果你能帮助我找出问题所在,或者告诉我一个更好的方法来做到这一点,请让我知道!谢谢您的帮助!

*另外,半径实际上是直径(我算),我需要更改名称...

+0

您是否尝试过调试您的解决方案?只需放置一些断点,您就可以一步一步地观看正在发生的事情。如果你是编程新手,你应该学习如何调试你的代码。真的很方便。你可以在网上找到很多教程。 – 2014-09-27 06:37:23

回答

1

嗯,我找到了答案,以我自己的问题。事实证明,我不需要将角度转换为弧度。事实上,这只是弄乱了坐标。只使用“角度”而不是“theta”变量可以解决问题。