我收到錯誤XSHIFT,YSHIFT = Manager.movementKeys(個體經營,XSHIFT,YSHIFT)類型錯誤:「NoneType」對象不是可迭代的,當我運行我的代碼和我無法弄清楚爲什麼。我不應該得到任何回報作爲無,並且我的論據都不是無。我對任何縮進錯誤表示歉意。類型錯誤:「NoneType」對象不是可迭代時調用鍵的功能
import pygame, sys, time, os
from pygame.constants import QUIT, KEYDOWN, K_LEFT, K_RIGHT, K_RETURN,
FULLSCREEN, K_w, K_s, K_a, K_d
global screenWidth, screenHeight
surface = pygame.display.set_mode((0,0),pygame.FULLSCREEN)
width = pygame.display.Info().current_w
height = pygame.display.Info().current_h
screenWidth = width - (width % 25)
screenHeight = height - (height % 25)
class Manager:
def update(self, startTime):
curTime = time.time()
if curTime - float(startTime) >= 1/60:
pygame.display.update()
return time.time()
def render(self, images):
rendered = []
for i in images:
rendered.append(pygame.image.load(i))
return rendered
def draw(self, renderedImages, positions):
for i in range(len(renderedImages)):
surface.blit(renderedImages[i], (positions[0][i],positions[1]
[i]))
def __init__(self):
state = MenuState()
def getLevel(self):
saves = open("save.txt", "r")
level = saves.readline()
saves.close()
return level
def movementKeys(self, vx, vy):
if pygame.key.get_pressed()[K_w]:
xShift, yShift = Manager.movement(self, "w", vx, vy)
return xShift, yShift
elif pygame.key.get_pressed()[K_a]:
xShift, yShift = Manager.movement(self, "a", vx, vy)
return xShift, yShift
elif pygame.key.get_pressed()[K_s]:
xShift, yShift = Manager.movement(self, "s", vx, vy)
return xShift, yShift
elif pygame.key.get_pressed()[K_d]:
xShift, yShift = Manager.movement(self, "d", vx, vy)
return xShift, yShift
def movement(self, pressedKey, vx, vy):
if pressedKey == "w":
dy = -0.01
if vy > -1:
vy += dy
elif pressedKey == "s":
dy = 0.01
if vy < 1:
vy += dy
else:
dy = 0
if pressedKey == "d":
dx = 0.01
if vx > -1:
vx += dx
elif pressedKey == "a":
dx = -0.01
if vx < 1:
vx -= dx
else:
dy = 0
if dy == 0:
if vy > 0:
vy -= dy
elif vy < 0:
vy += dy
if dx == 0:
if vx > 0:
vx -= dy
elif vx < 0:
vx += dy
return vx, vy
class TileMap:
def getLevelMap(self, level):
map = []
levelFile = level + ".txt"
file = open(levelFile, "r")
x = file.readline()
y = file.readline()
for i in range(int(y)):
line = file.readline()
curLine = list(line)
if i != (int(y)-1):
curLine.pop()
map.append(curLine)
file.close()
return map
def drawMap(self, map, tiles, xShift, yShift):
for i in range(len(map)):
for j in range(len(map[0])):
surface.blit(tiles[int(map[i][j])], (j * 25 + xShift,i * 25
+ yShift))
class MenuState:
global surface
if surface.get_flags() & FULLSCREEN:
os.environ["SDL_VIDEO_CENTERED"] = "1"
surface = pygame.display.set_mode((800,600), pygame.NOFRAME)
def focusedButton(self, curButton):
if curButton:
curButton = False
else:
curButton = True
return curButton
def __init__(self):
images = ["MenuBackground.png", "MenuBackgroundOverlay.png",
"MenuButton1.png", "MenuButton1Focused.png", "MenuButton2.png",
"MenuButton2Focused.png","MenuTitle.png"]
renderedImages = Manager.render(self, images)
endTime = time.time()
button1Focused = True
inMenu = True
x = 0
x2 = -2400
while inMenu:
imagesToDraw = [renderedImages[0], renderedImages[1],
renderedImages[1], renderedImages[3], renderedImages[4], renderedImages[6]]
if button1Focused:
imagesToDraw[3] = renderedImages[2]
imagesToDraw[4] = renderedImages[5]
else:
imagesToDraw[3] = renderedImages[3]
imagesToDraw[4] = renderedImages[4]
positions = [[0,x,x2,180,460,50],[0,0,0,350,350,75]]
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == KEYDOWN:
if event.key == K_LEFT or event.key == K_RIGHT:
button1Focused = MenuState.focusedButton(self,
button1Focused)
elif event.key == K_RETURN:
if button1Focused:
state = GameState()
else:
pygame.quit()
sys.exit()
x += 10
x2 += 10
if x >= 800:
x = x2 - 2400
if x2 >= 800:
x2 = x - 2400
Manager.draw(self, imagesToDraw, positions)
endTime = Manager.update(self, endTime)
class GameState:
def __init__(self):
level = Manager.getLevel(self)
levelMap = TileMap.getLevelMap(self, level)
tileImages = ["tile1.png", "tile2.png"]
tileImages = Manager.render(self, tileImages)
surface = pygame.display.set_mode((screenWidth, screenHeight),
pygame.FULLSCREEN)
endTime = time.time()
xShift = 0
yShift = 0
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
xShift, yShift = Manager.movementKeys(self, xShift, yShift)
TileMap.drawMap(self, levelMap, tileImages, xShift, yShift)
endTime = Manager.update(self, endTime)
start = Manager()
我甚至沒有從運動的關鍵得到回報。我正在做一些痕跡,當我調用移動功能時,它似乎會出現錯誤。作爲參考,我在每個功能(移動和移動鍵)的頂部放置了一個打印件,並且只有移動鍵中的打印件出現。 –
嘿,這正是我的帖子所說的。您的'movementKeys'功能只有'if'和'elif'。因此,如果沒有按鈕被按下,函數不返回任何東西,這意味着它返回'None'。查看我更新的答案並提供可能的修復方法但請記住,我沒有真正檢查你的遊戲邏輯。 – enpenax
你說得對,我錯過了那個相當大的東西,但感謝你的幫助 –