2013-04-09 63 views
2
def getMove(win,playerX,playerY): 

    #Define variables. 
    movePos = 75 
    moveNeg = -75 
    running = 1 

    #Run while loop constantly to update mouse's coordinates. 
    while(running): 

     mouseCoord = win.getMouse() 
     mouseX = mouseCoord.getX() 
     mouseY = mouseCoord.getY() 
     print "Mouse X = ", mouseX 
     print "Mouse Y = ", mouseY 

     if mouseX >= playerX: 
      playerX = movePos + playerX 
      running = 0 
     elif mouseX <= playerX: 
      playerX = moveNeg + playerX   
      running = 0 
     elif mouseY >= playerY: 
      playerY = movePos + playerY    
      running = 0 
     elif mouseY <= playerY: 
      playerY = moveNeg + playerY    
      running = 0 
    return playerX,playerY 

def main(): 

    #Create game window. 
    win = GraphWin("Python Game", 500, 500) 
    drawBoard(win) 

    #Define variables. 
    playerX = 75 
    playerY = 125 
    keyX = 325 
    keyY = 375 
    running = 1 


    #Create Key and Player objects, draw the key, but don't draw the player yet. 
    key = Text(Point(keyX,keyY),"KEY") 
    key.draw(win) 

    while(running): 
     print "player X = ", playerX 
     print "Player Y = ", playerY 
     drawBoard(win) 
     getMove(win,playerX,playerY) 
     player = Circle(Point(playerX,playerY),22) 
     player.setFill('yellow') 
     player.draw(win) 
main() 

我正在使用圖形庫來創建遊戲。我的玩家和鑰匙被繪製在正確的地方。但是,在調用getMove函數時,我的playerX和playerY不會更新。我在運行遊戲時添加了調試打印語句來查找它們的值,並且它始終是75和125.幫助!我的python函數不會返回或更新值

回答

8

在Python中,整數是不可變的 - 當你給一個變量賦一個新的整數值時,你只是將變量指向一個新的整數,而不是改變它指向的值的舊整數。

(Python中的可變對象的一個​​例子是列表,你可以修改和指向該列表中的所有變量會注意到的變化 - 因爲名單已經改變)

同樣,當你通過一個變量放入python中的方法中,然後改變該方法中變量指向的內容,則不會更改該變量指向該方法之外的內容,因爲它是一個新變量。

爲了解決這個問題,指派返回PlayerX的,playerY的方法以外的變量:

playerX, playerY = getMove(win,playerX,playerY)

1

當你調用getMove(你應該明確地重新分配這些變量):

playerX, playerY = getMove(win, playerX, playerY) 

希望這有助於!

0

正如已經提到的,解決辦法是,你不使用返回值來更新您playerX, playerY可以固定有提到

playerX, playerY = getMove(win,playerX,playerY) 

我想解決的是在你的if語句的邏輯。您構建if語句的方式將導致只更新X OR Y,而不是兩者。例如,如果mouseX, mouseY分別大於playerX, playerY,那麼您會看到if語句的第一行,它將被評估爲True並相應地更新playerX,但因爲第一個語句已被執行,所以其他elif語句將執行,導致您只更新playerX變量。

您想要做的是將if語句拆分爲兩個單獨的語句(一個用於X,一個用於Y),以便X,Y的調整彼此獨立。類似於

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