2010-10-04 88 views
2

我正在尝试绕中心点围绕一个物体运行,就像太阳和我们的行星一样。但是我没有运气。任何帮助都会非常棒。谢谢。我在卢娜写作,我不认为这里有一个类别,但这可能只是一般的代码。但如果它在错误的地方,我的道歉。围绕中心点的轨道对象

local function animate(event) 

    local rads = degrees * (Math.PI/180); 
    ballOne.x = 20 * Math.cos(rad); 
    ballOne.y = 20 * Math.sin(rad); 
    degrees = degrees + 1 

end 

Runtime:addEventListener("enterFrame", animate) 

回答

3

您可以尝试20.0和180.0迫使他们浮点,否则你的计算可能最终会被整数不会很好地工作,否则,一切似乎都很好。

另外我建议一个或两个单元测试。如果你输入0,90,180和260,你应该输出偶数(+/- 20,0或0,20)。这将帮助你调整它,让你相信结果。

- 编辑 - 写了你的程序的一个常规版本,因为我不认识你的很多代码。发现rad与rads的问题(在评论中提到)。下面是你的算法的一个常规转储:

float degrees=0.0 
float rads = degrees * (Math.PI/180.0); 
float x = 20.0 * Math.cos(rads); 
float y = 20.0 * Math.sin(rads); 
degrees = degrees + 1 
println x 
println y 

这是有效的。单元测试的意思是你可以设置一些以“0.0”度调用你的方法,并确保输出的x为20.0,y为0.0,然后用90调用它,你应该得到0,20(实际上你可能会得到一个轻微的浮点错误,只是测试看到x是小于.001或者其他东西)

如果您使用谷歌认可的框架来开发这些应用程序,我100%肯定会有一些“官方”做单元测试的方式,我强烈建议你仔细研究一下,特别是对于动态语言,单元测试可以是绝对关键的。

单元测试最重要的部分之一是,您可以在开发环境中使用单点触摸来运行它们。这可以确保无论您添加什么代码,以前的所有工作仍然有效。它可以让你有信心去重构现有的代码,而不用担心打破你甚至不知道互动的东西。

大多数以动态语言工作的人认为单元测试是绝对需求,甚至在静态类型语言中,它们非常重要,因为您的项目越来越小。

+0

嗯,我仍然必须失去一些东西,我改变了20到20.0和180到180.0,但是当我运行它时,我仍然看不到任何动作。通过单元测试你的意思是尝试让它输出数字而不是告诉对象去哪里?我不确定我知道单元测试是什么。我也忽略了我设定度数为100的部分,但我认为这正是它在圈子中开始的地方。你能否看看我是否可以改变任何事情,如果我只是留下了一些东西。谢谢,詹姆斯。 – 2010-10-05 14:22:07

+0

@詹姆斯做单元测试的最简单方法就是为每个测试该类的类添加一个main()方法。只需传递数字,看看它们是否与你期望的相符。恐怕我不知道到底发生了什么,“local rads”不是我熟悉的类型,它需要等同于float/double,而不是int/long。我将在Java中快速检查并翻译一些内容并发布我的结果。 – 2010-10-05 16:47:20

+0

@詹姆斯一个问题,你知道你说的是“本地拉德”,后来你用“拉德”。动态语言通常有一个巨大的缺陷,因为如果你拼错了它们,它们就会无声无息地创建变量。否则你的算法是健全的,我得到了有效的结果。 – 2010-10-05 16:55:07