我有一个速度为-5的物体朝向墙壁。当它撞到墙壁时,我希望它获得5的速度,从而反转方向和反弹。但是,当我运行它时,它无法正常工作。我已经使用了几种变体,我想我正在犯一个语法错误。
public void action(int t) {
setVY(-5); //works - no surprises sets velocity to -5
.
.
if(getY() <= 0 ) {
setVY(5); //THIS METHOD DOESN'T WORK
setVX(5); // works no surprises , ball goes right
hooks.setMessage("hits wall", 25); //no surprises
}
}
这样编译运行没有错误。该物体现在向北移动,然后以45度向北/向东转向。
答案 0 :(得分:1)
对不起,我无法对你的问题发表评论,因为我使用的是应答机构。你可以更具体地说明什么是无效的。你认为vy是错误的还是setter setVY没有为你的对象设置正确的值?或者是不同的东西不起作用?
正如Gilbert上面提到的:你为什么要比较y和5?在某些情况下,y永远不会是5个小于或小于5的东西。对象已经是一小部分&#34;内部&#34;墙壁,你仍然希望物体改变方向和反弹......
再见 马库斯
答案 1 :(得分:1)
这很有效。虽然它可能不像你期望的那样工作。在再次检查位置之前,您还记得将速度添加到位置吗?如果没有,getY()仍然会返回5,它将再次翻转yv的符号(所以它的回复方式)。您可以编写一个小单元测试来确认这是有效的。
由于您的示例不起作用,很难确切地说出错误,但如果您使用正确的数据提供算法,它将翻转y速度的符号。