def getMove(win,playerX,playerY):
#Define variables.
movePos = 75
moveNeg = -75
running = 1
#Run while loop constantly to update mouse\'s coordinat
In python, integers are immutable - when you assign a new integer value to a variable, you are just making the variable point to a new integer, not changing what the old integer it pointed to's value was.
(An example of a mutable object in python is the list, which you can modify and all variables pointing to that list will notice the change - since the LIST has changed.)
Similarly, when you pass a variable into a method in python and then alter what the variable points to in that method, you do not alter what the variable points to outside of that method because it is a new variable.
To fix this, assigned the returned playerX,playerY to your variables outside the method:
playerX, playerY = getMove(win,playerX,playerY)
As has been mentioned, the solution is that you're not using the returned values to update your playerX, playerY
which can be fixed with the mentioned
playerX, playerY = getMove(win,playerX,playerY)
What I want to address is the logic in your if
statements. The way you've constructed your if
statements will lead to only an X OR Y being updated, not both. For example, if mouseX, mouseY
were both greater than playerX, playerY
repectively, you'd get to the first line of your if
statement and it would be evaluated as True
and update playerX
accordingly, BUT because the first statement has been executed, none of the other elif
statements will execute, leading to you only updating the playerX
variable.
What you want to do is split the if
statement into two separate statements (one for X and one for Y) so that the adjustments of X,Y are independent of each other. Something similar to
if mouseX >= playerX:
playerX = movePos + playerX
running = 0
elif mouseX <= playerX:
playerX = moveNeg + playerX
running = 0
#By having the second if, it allows you to check Y even if X has changed
if mouseY >= playerY:
playerY = movePos + playerY
running = 0
elif mouseY <= playerY:
playerY = moveNeg + playerY
running = 0
You should explicitly reassign these variables when you call getMove():
playerX, playerY = getMove(win, playerX, playerY)
Hope this helps!