I’m working on a game and I’m trying to optimize things. I made a for loop to shorten the following code:
// if near pb1
if (pbMoveCheck_playerNearpb(pb1, pb2, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb1, pb2, x, y)) {
pb1Good = true;
pGood = true;
}
// if near pb1
if (pbMoveCheck_playerNearpb(pb1, pb3, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb1, pb3, x, y)) {
pb1Good = true;
pGood = true;
}
// if near pb1
if (pbMoveCheck_playerNearpb(pb1, pb4, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb1, pb4, x, y)) {
pb1Good = true;
pGood = true;
}
// if near pb2
if (pbMoveCheck_playerNearpb(pb2, pb1, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb2, pb1, x, y)) {
pb2Good = true;
pGood = true;
}
// if near pb2
if (pbMoveCheck_playerNearpb(pb2, pb3, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb2, pb3, x, y)) {
pb2Good = true;
pGood = true;
}
// if near pb2
if (pbMoveCheck_playerNearpb(pb2, pb4, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb2, pb4, x, y)) {
pb2Good = true;
pGood = true;
}
// if near pb3
if (pbMoveCheck_playerNearpb(pb3, pb1, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb3, pb1, x, y)) {
pb3Good = true;
pGood = true;
}
// if near pb3
if (pbMoveCheck_playerNearpb(pb3, pb2, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb3, pb2, x, y)) {
pb3Good = true;
pGood = true;
}
// if near pb3
if (pbMoveCheck_playerNearpb(pb3, pb4, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb3, pb4, x, y)) {
pb3Good = true;
pGood = true;
}
// if near pb4
if (pbMoveCheck_playerNearpb(pb4, pb1, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb4, pb1, x, y)) {
pb4Good = true;
pGood = true;
}
// if near pb4
if (pbMoveCheck_playerNearpb(pb4, pb2, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb4, pb2, x, y)) {
pb4Good = true;
pGood = true;
}
// if near pb4
if (pbMoveCheck_playerNearpb(pb4, pb3, b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(pb4, pb3, x, y)) {
pb4Good = true;
pGood = true;
}
So I chopped it down to this:
// Make lists of stuff
pushBlock1[] listPushBlocksA = { pb1, pb2, pb3, pb4 };
boolean[] pbGoodList = { pb1Good, pb2Good, pb3Good, pb4Good };
// if near pb loop
for (int i = 0; i < listPushBlocksA.length; i++) {
for (int j = 0; j < listPushBlocksA.length; j++) {
if (i != j & pbMoveCheck_playerNearpb(listPushBlocksA[i],
listPushBlocksA[j], b1, b2, b3, b4, m, p, x, y)
& pbMoveCheck_doublepb(listPushBlocksA[i],
listPushBlocksA[j], x, y)) {
pbGoodList[i] = true;
pGood = true;
}
}
}
Something obviously didn’t translate over when I redid the code because when I try to switch it in the game collisions that this is testing stop working. Can’t for the life of me see what could be wrong, any ideas?
Use logical &&, not bit-wise & operator.
Consider
and
You’re NOT changing
pb1Good,pb2Good,pb3Good, orpb4Goodas you were doing in the original code shown. While you initialized the arraypbGoodListwith those values,pbGoodListkeeps uniquely different instances of those values.You could, after the loop, copy the values out of the array into the individual boolean variables: