python - 我一直在 pygame 中开展一个项目,但即使没有出现错误,玩家的移动似乎也不起作用
问题描述
我需要准备好玩家的移动,我已经尝试从其他脚本中获取所需的代码,但即使没有出现错误,它似乎也无法正常工作,并且经过几次检查后代码似乎没问题。我正在使用的库是sys、pygame 和 glob。我正在关注本指南,但也对其进行了更改:https ://pythonprogramming.altervista.org/platform-game-in-detail-part-1/?doing_wp_cron=1603309265.4902870655059814453125
代码:
from pygame.locals import *
import pygame
import sys
import glob
map1 = """wwwwwwwwwwwwwwwwwwwwwwwwwwwww
w w
w w
w w
w w
w
w d
w p
w
w w
w w
w w
w w
w w
w w
wwwwwwwwwwwwwwwwwwwwwwwwwwwww"""
#-----------------------------
door = pygame.image.load("C:/Users/cuerv/Downloads/Door.png")
door_rect = door.get_rect(center=(100, 250))
tile = pygame.image.load("C:/Users/cuerv/Downloads/Wall.png")
tile_rect = tile.get_rect(center=(100, 256))
player = pygame.image.load("C:/Users/cuerv/Downloads/Player.png")
player_rect = player.get_rect(center=(100, 256))
def init_display():
global screen, tile, door, player
screen = pygame.display.set_mode((480, 250))
def tiles(map1):
global tile, door, player
for y, line in enumerate(map1):
#counts lines
for x, c in enumerate(line):
#counts caracters
if c == "w":
#caracter is w
screen.blit(tile, (x * 16.18, y * 15))
if c == "d":
screen.blit(door, (x * 16.2, y * 15))
if c == "p":
screen.blit(player, (x * 16.2, y * 15))
playerx=200
playery=130
map1 = map1.splitlines()
pygame.init()
init_display()
clock = pygame.time.Clock()
while True:
tiles(map1)
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
DISPLAYSURF.blit(sprite, (playerx, playery))
if event.type == KEYDOWN:
if (event.key == K_LEFT):
playerx -= 5
elif (event.key == K_RIGHT):
playerx += 5
elif (event.key == K_UP):
playery -= 5
elif (event.key == K_DOWN):
playery += 5
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
pygame.display.update()
clock.tick(120)
解决方案
只是你必须添加一个缩进块:
while True:
tiles(map1)
for event in pygame.event.get():
if event.type == pygame.QUIT:
sys.exit()
DISPLAYSURF.blit(sprite, (playerx, playery))
if event.type == KEYDOWN:
if (event.key == K_LEFT):
playerx -= 5
elif (event.key == K_RIGHT):
playerx += 5
elif (event.key == K_UP):
playery -= 5
elif (event.key == K_DOWN):
playery += 5
推荐阅读
- java - 为什么 selenium 网络驱动程序在该网站上找不到文本字段?
- c - 将标准输出重定向到文件
- javascript - 没有函数调用 - onclick 不起作用
- python - 没有名为“睡眠”的模块
- c# - 如何使用 linq 多列表条件?
- javascript - 使用 js reduce() 创建键值对并创建一个数组作为值
- c# - 使用 SelectListItem 设置 DropDownList 的选定值
- angular5 - 如何在 ng2-chart 条形图中删除条形顶部的百分比计算
- php - 在 Laravel API 中重用重置密码
- oauth-2.0 - REST API 上的 OAuth 2.0 与第三方提供商