well, how do you expect us to understand it? you want us to explain variables while we have no idea of what type they are...
also: saying - the code is right - just to be followed by // this I understand but it's not right...
either it's right, or it's not, it can't be both. can you be more complete and clear about what it is you're asking and providing?
stultuske
Industrious Poster
4,370 posts since Jan 2007
Reputation Points: 1,318
Solved Threads: 610
Skill Endorsements: 23
It is not about the code, it is about the concept. OK, I'm going to try to explain it graphically...
/*
1.if(playerX + playerW >= x && playerX <= x + width) {
2. if(playerY+playerH >= y && playerY <= y+height) {
3. if (playerX <= x) //player on left {
4. System.out.println(playerX +"--"+x);
5. p.setX(x - width);
6. }
7. else if(playerX >= x) { //player on right
8. p.setX(x + width);
9. }
10. }
11.}
I'm going to talk about X only
pX = playerX
pW = playerW
pX pX+pW
+---------+
| playerX |
+---------+
If it is collide...
pX pX+pW
+---------+
| x+----|---+ x+enemy_width
+----|----+---|
+--------+
So if (pX<=x), the enemey is on the right hand side.
If you use if (playerX+playerW <= x), it does not guarantee the result.
Show below is the case when playerX+playerW>x, but it is still collide
on the same side.
pX pX+pW
+-----------+
| x+---+ |
+----|---|--+
+---+
pX pX+pW
+---------+
x+---|----+ |
| +----|----+
+--------+
and if (pX>x), the enemy is on the left hand side
*/
When you deal with collision, you must compare the same reference point. In this case, you are using top-left position. You must not use different position to compare (top-right from player and top-left from enemy).
Hope this help.
Taywin
Posting Maven
2,633 posts since Apr 2010
Reputation Points: 275
Solved Threads: 375
Skill Endorsements: 17