0
感謝您的幫助。我是Python新手,使用這個項目來學習Python,現在它使用一個函數在屏幕上繪製圖塊,並且我正在努力讓一個精靈能夠按下按鍵來移動。問題是我的函數keyMoveSprite()看不到我的全局變量x_coordinate和y_coordinate。它們在我的函數中,但是這導致我的精靈不能移動,因爲每次迭代x和y變量都被設置爲0,所以我想他們需要在循環之外。有什麼建議麼?這是我的代碼。我認爲這個問題可能是由於它在遊戲的主循環中反覆調用的函數,但它需要反覆調用以跟蹤輸入。爲什麼我的函數keyMoveSprite()看不到全局變量x_coordinate,y_coordinate?
import pygame,sys
from pygame.locals import *
pygame.init()
#Global Variables
screen_x = 800
screen_y = 480
screen = pygame.display.set_mode((screen_x, screen_y))
x_coordinate = 0
y_coordinate = 0
moveX, moveY = 0, 0
#This function will take the screen coordinates and draw
#a tile to the entire screen. It will draw tiles no matter
#the screen size.
def keyMoveSprite():
sprite = pygame.image.load("character.png").convert_alpha()
for event in pygame.event.get():
if event.type == KEYDOWN:
if event.key == K_LEFT:
moveX = -10
elif event.key == K_RIGHT:
moveX = +10
elif event.key == K_UP:
moveY = -10
elif event.key == K_DOWN:
moveY = +10
if event.type == KEYUP:
if event.key == K_LEFT:
moveX = 0
elif event.key == K_RIGHT:
moveX = 0
elif event.key == K_UP:
moveY = 0
elif event.key == K_DOWN:
moveY = 0
x_coordinate = x_coordinate + moveX
y_coordinate = y_coordinate + moveY
screen.blit(sprite,(x_coordinate, y_coordinate))
pygame.display.update()
print("Character drawn at:", x_coordinate, y_coordinate)
def mapDraw(screen_x, screen_y):
floor = pygame.image.load("floor_tile.png")
wall = pygame.image.load("wall_tile.png")
treasure = pygame.image.load("treasure_chest.png")
# Intialize row for loop
row = 0
mapColumn = 0
mapRow = 0
#Loop between the values 0 to the screen's y variable, in intervals of
#32, and store them in the variable row once per loop.
mapArray = [
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
[1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,1,1,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1],
[1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,1],
[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
]
for row in range(0, screen_y, 32):
column = 0 # Set column to 0 per iteration, this allows reset of the x coordinate
print("Map Row Value:", mapRow)
mapColumn = 0 # Resets mapColumn variable to 0
for column in range(0, screen_x, 32):
if mapArray[mapRow][mapColumn] == 0:
screen.blit(floor, (column, row))
#print(column,row)
pygame.display.update()
#print("Map Column Value:",mapColumn)
print("MapCol",mapColumn,"MapRow",mapRow)
elif mapArray[mapRow][mapColumn] == 1:
screen.blit(wall, (column, row))
pygame.display.update()
mapColumn = mapColumn + 1
mapRow = mapRow + 1
def main():
mapFloor = mapDraw(800,480)
while True:
keyMoveSprite()
main()
這工作,非常感謝。任何你有想法的機會如何讓我的精靈不會在屏幕上「拖動」? – DougLuce
@DougLuce「drag」是什麼意思?另一個問題/答案可能已經存在關於你遇到的這個新問題。也許我可以幫你找到它。 – kevintodisco
完成,新的網站,但我找到了複選框。我的意思是它在每次迭代時都會將圖像粘貼到屏幕上,但是我需要找出一種方法在移動後「移除」每個圖像。 – DougLuce