I am making a game, and so far all has been going well, but when I tried to check if the player collides with a wall, things get weird. The program is supposed to check which way the player is moving and then see if it collided with a wall in that direction, and if so, stop the player from moving that way. It recognizes that the player is traveling in a certain direction, and that it is colliding with a wall in that direction, but it isn’t stopping the player from moving in that direction.
the functions I’m having trouble with are update_movement
, move_self
, and check_collisions
in game_engine.scripts.cust.player
Here is a link to the repl
https://replit.com/@tankerguy1917/gaem#game_engine/scripts/cust/player.py
There are better ways to implement collisions, but your current problem is caused by the structure of the if
statements in update_movement
.
(Note: please use not x
instead of x == False
)
Suppose the player holds key a
down. They will hit a wall on their left.
if self.keys[pygame.K_a]:
if self.collided["left"] == False:
self.movement["left"] = True
self.cur_anim = "left_walk"
else:
self.movement["left"] = False
Notice that self.movement["left"]
is still True
from previous updates. It will only become False
solely on user input, you can see that collisions will never set it to False
(so player keeps moving despite collision).
The fix here is to combine the nested if
statement so that it too will use the else
clause.
if self.keys[pygame.K_a] and not self.collided["left"]:
self.movement["left"] = True
self.cur_anim = "left_walk"
else:
self.movement["left"] = False
(Your implementation of movement and collision is a bit complex and contains many redundant things, it’s easy to mess something up.)
Thanks. That didn’t fix everything, but I think I’ve got it from here
This topic was automatically closed 7 days after the last reply. New replies are no longer allowed.