0

我对编程很陌生,最近开始学习处理。在我的代码中,collide 函数将 touch 布尔值设置为 true,但是通过对其进行排列,它只测试最终数组的 true 而不是它之前的数组。我在哪里错了?我希望我的问题足够清楚。

编辑:

对不起,让我再试一次。我想我的问题是找出如何正确排列碰撞函数。我似乎无法为数组中的碰撞添加 [i]。目前,该代码有效,但它只测试最后一个数组的真值,而不是它之前的数组。

数组代码:

for(int i = 0 ; i < lineDiv; i++){ 
collide(xPts[i], yPts[i], vecPoints.xPos, vecPoints.yPos, myDeflector.Thk, vecPoints.d);

碰撞函数:

void collide(float pt1x, float pt1y, float pt2x, float pt2y, int size1, int size2){
if (pt1x + size1/2 >= pt2x - size2/2 && 
pt1x - size1/2 <= pt2x + size2/2 && 
pt1y + size1/2 >= pt2y - size2/2 && 
pt1y - size1/2 <= pt2y + size2/2) {
touch = true;
}
else{
touch=false;
}
4

2 回答 2

1

您的“触摸”变量是全局的。每次调用 collide() 函数时,它都会覆盖之前设置的任何内容。也许你只是想在调用 collide() 后测试 touch 是否为真,然后退出 for 循环?

或者,您可能希望让 collide() 返回触摸布尔值,避免全局。

于 2013-01-08T19:53:48.450 回答
0

看起来你想要做的是运行一个循环,在数组的那个元素上运行函数,如果其中任何一个元素为真,则返回一个值。这是我最好的猜测,您可能需要编辑您的问题以阐明您要做什么。所以假设这个:

1)将您的方法更改为函数

boolean collide(float pt1x, float pt1y, float pt2x, float pt2y, int size1, int size2){
if (pt1x + size1/2 >= pt2x - size2/2 && 
pt1x - size1/2 <= pt2x + size2/2 && 
pt1y + size1/2 >= pt2y - size2/2 && 
pt1y - size1/2 <= pt2y + size2/2) {
return true;
}
else{
return false;
}

2)改变你的循环和你如何称呼它

touch = false;  // if you don't set this to false before the loop, it will be the last value taken
for(int i = 0 ; i < lineDiv; i++){ 
     if (collide(xPts[i], yPts[i], vecPoints.xPos, vecPoints.yPos, myDeflector.Thk, vecPoints.d)) touch = true;

在操作之前,当您遍历数组和处理过程中,触摸可能会在真假之间循环(因为您可能会提取数据),您不太可能想要这种行为,因为您无法做到除非您将该数据打包在另一个结构中,例如数组,否则可以使用它。

所以现在,“触摸”设置为 false,如果任何函数调用返回 true,则将更改为 true。如果一切都是假的,它将保持假。

注意:您可以考虑使用 xPts.length() 或 yPts.length() 与 lineDiv。假设 xPts 和 yPts 具有相同的元素数,这将减少数组越界异常的可能性。

于 2013-01-10T21:09:41.963 回答