Computer Science Canada Collision Problem in Array |
Author: | landfarm [ Fri Dec 18, 2009 10:37 pm ] | ||
Post subject: | Collision Problem in Array | ||
What is it you are trying to achieve? I am trying to create collision detection. What is the problem you are having? The problem is that when I put "i" into the collision check, it says it has not been declared yet. Describe what you have tried to solve this problem I put a for loop before the collision check, clearly declaring the "i". Post any relevant code (You may choose to attach the file instead of posting the code if it is too long)
Please specify what version of Turing you are using Latest Version. |
Author: | Tony [ Fri Dec 18, 2009 10:41 pm ] |
Post subject: | RE:Collision Problem in Array |
i is local to the score of the for-loop. That is, if it's created inside the for-loop, you can't use it outside. Though in this case, if you want to use the last value of i, you can use "num" instead. |
Author: | landfarm [ Sat Dec 19, 2009 12:50 pm ] |
Post subject: | Re: Collision Problem in Array |
I replaced i with num and now it's working, but the player is not bouncing when it hits the platforms. Is there something wrong with my collision? I'm going to try using WhatDotColour now, but I would still like a clear explanation for my mistake. You guys are the best! ![]() |
Author: | Tony [ Sat Dec 19, 2009 1:00 pm ] |
Post subject: | Re: Collision Problem in Array |
I don't really understand why you would check the collision for just one platform, when you have multiple ones. landfarm @ Sat Dec 19, 2009 12:50 pm wrote: I would still like a clear explanation for my mistake.
Uhh... perhaps it's... landfarm @ Sat Dec 19, 2009 12:50 pm wrote: I'm going to try using WhatDotColour now |
Author: | landfarm [ Sat Dec 19, 2009 1:23 pm ] | ||
Post subject: | Re: Collision Problem in Array | ||
Wait, I'm trying to check the collision for all of them, but through the use of the array. I just tried using View.WhatDotColour to check if the points turn blue or not but it does not seem to work either. Here's what I changed.
|
Author: | landfarm [ Sat Dec 19, 2009 2:12 pm ] | ||
Post subject: | RE:Collision Problem in Array | ||
Ok, I put the collision check for the platforms inside the for loop like this. The problem is that the player will sometimes drop through the platforms. What can I do to fix this? And I'm sorry from jumping from problem to problem.
|
Author: | Tony [ Sat Dec 19, 2009 2:28 pm ] |
Post subject: | RE:Collision Problem in Array |
I like how you posted just the relevant part of the code ![]() But... why is that inside a for-loop? And, for bonus points (read as: "required question"), why was the array-based collision outside of for-loop originally? |
Author: | TheGuardian001 [ Sat Dec 19, 2009 2:30 pm ] |
Post subject: | Re: Collision Problem in Array |
My assumption would be that your character is simply moving too fast. When you change the characters position, it doesn't hit every point in between where it was and where it will be. This means if it moves fast enough, your character will pass right by the platform without ever appearing to hit it. you will either have to limit the characters downward speed, or find a way to check farther below the player if they get above a certain speed. |
Author: | landfarm [ Sat Dec 19, 2009 2:55 pm ] |
Post subject: | RE:Collision Problem in Array |
@ Tony, I just thought if it right now, and it's in the for loop because it doesn't seem to work when it's outside of it. Very strange. Thanks Guardian, I just made the platforms longer so it shouldn't have that problem. |
Author: | Tony [ Sat Dec 19, 2009 4:35 pm ] |
Post subject: | RE:Collision Problem in Array |
But the if-statement doesn't even rely on the value of i. |
Author: | landfarm [ Sun Dec 20, 2009 2:47 pm ] |
Post subject: | RE:Collision Problem in Array |
I'm not sure, but it doesn't work if it's outside the for loop. Doesn't the i represent each platform though? |
Author: | TheGuardian001 [ Sun Dec 20, 2009 3:30 pm ] | ||
Post subject: | Re: Collision Problem in Array | ||
landfarm wrote: I'm not sure, but it doesn't work if it's outside the for loop. Doesn't the i represent each platform though? Yes, i does represent that. But you aren't ever using i in your collision detection, since you're using whatdotcolour. The computer doesn't care which block dy-15 belongs to, it just cares if it's blue. Lets walk through your main loop before you put the collisions inside:
Can you see anything wrong with where you're checking the colours in relation to where you're drawing the colours? |
Author: | landfarm [ Mon Dec 21, 2009 2:59 pm ] |
Post subject: | RE:Collision Problem in Array |
Oh, I see. The check is before the for loop actually draws them. There shouldn't be a problem though if the boxes are thick enough though? And also, out of a question of laziness, is it okay if I just the colour check inside the for loop? |
Author: | TheGuardian001 [ Mon Dec 21, 2009 3:47 pm ] |
Post subject: | Re: Collision Problem in Array |
landfarm wrote: Oh, I see. The check is before the for loop actually draws them. Exactly. landfarm wrote: There shouldn't be a problem though if the boxes are thick enough though? The thickness of the box is irrelevant. if you check before you draw them, there won't be anything to check, regardless of how thick they will be when you actually draw them. landfarm wrote: And also, out of a question of laziness, is it okay if I just the colour check inside the for loop? For the sake of you not getting into bad practices, No, it's not okay. All you need to do is move it outside of the loop, it's really not that much trouble. Something like this might not present much of a problem in this specific program, but what if you had 10 platforms to draw? what if you had 100? whatdotcolour itself is a relatively costly procedure to call, and if you're calling it repeatedly in a for loop, there's a good chance you'll see some performance issues. |
Author: | landfarm [ Tue Dec 22, 2009 9:32 pm ] |
Post subject: | Re: Collision Problem in Array |
TheGuardian001 @ Sat Dec 19, 2009 2:30 pm wrote: My assumption would be that your character is simply moving too fast. When you change the characters position, it doesn't hit every point in between where it was and where it will be. This means if it moves fast enough, your character will pass right by the platform without ever appearing to hit it.
you will either have to limit the characters downward speed, or find a way to check farther below the player if they get above a certain speed. That's why I increased the thickness of the platforms. Thanks for your help though. I'm gonna fix it right now. ![]() |
Author: | landfarm [ Thu Dec 24, 2009 12:31 pm ] | ||
Post subject: | Re: Collision Problem in Array | ||
Um, I just fixed it up now, and I decided to add a power bar for a superjump. I used the formula, percentage * pixel distance of the starting part of the bar to the end. I read that somewhere here, but I can't find it now. Anyway, first of all, the bar is way too high at the beginning, and then goes below the bottom when it depletes. I'm very confused right now. Can anyone shed some light on this? I wasn't sure if I was supposed to make this another topic because it is a different problem, so I just put it in here. Here is the new code. I'm going to copy and paste the whole thing since it's fairly different from the first one.
|
Author: | TheGuardian001 [ Thu Dec 24, 2009 12:51 pm ] | ||
Post subject: | Re: Collision Problem in Array | ||
Lets start with it being too high up. Now, your power bar maxes out at 250. Normally, you'd have to calculate a percentage and draw based on that. But the height of the graphical power bar is also 250. So you actually don't need to do any calculations at all, since they are both the same size. Now, as for it going too low, when you draw the yellow bar, you draw it with this:
you tell the box to draw from a starting height of 100, and to finish at powery with absolutely no relation to the starting height. If you want it to draw a certain amount above the starting height, you'll need to relate the two. |
Author: | landfarm [ Thu Dec 24, 2009 1:08 pm ] |
Post subject: | RE:Collision Problem in Array |
![]() |
Author: | landfarm [ Thu Dec 24, 2009 1:21 pm ] | ||
Post subject: | RE:Collision Problem in Array | ||
Wait, I just realized that my collision checks were still inside one of the for loops, so I moved them out. Unfortunately, now it's no longer working. What happened?
|
Author: | TheGuardian001 [ Thu Dec 24, 2009 1:32 pm ] |
Post subject: | Re: Collision Problem in Array |
I could be wrong, but I believe your collision check is hitting the character. Try drawing the character after the hit checks and see if that fixes anything. |
Author: | landfarm [ Thu Dec 24, 2009 1:46 pm ] |
Post subject: | RE:Collision Problem in Array |
Um, I put it at the very bottom, after everything is drawn, including the player. In fact, the drawing of the player is right above the collision checks. This is strange. I'm going to keep them in the for loops for now, since it works. EDIT: Ohh, nvm, I see what you mean. It works now, but there doesn't seem to be any logic in that. |
Author: | TheGuardian001 [ Thu Dec 24, 2009 2:10 pm ] |
Post subject: | Re: Collision Problem in Array |
landfarm wrote: Um, I put it at the very bottom, after everything is drawn, including the player. Which is exactly the problem. If your character is drawn, and the detection is looking at the area occupied by one of his legs, it's going to be seeing black, not blue or green, since your character is drawn last and will be on top of everything else. |
Author: | landfarm [ Thu Dec 24, 2009 2:14 pm ] |
Post subject: | RE:Collision Problem in Array |
Oh, I see now. That logic stuff is getting to me. Thanks again. |