[英]I tried to make a player move in pygame but it didn't work and it's giving me this error:
[英]Pygame, how to remove trail from a player when moving, I tried filling screen but still didnt work for me
所以我试图在玩家移动时从玩家身上移除踪迹。 我试图做screen.fill,但是当我这样做时,整个map就消失了。 我想实现一个简单的移动ASCII字母。 - 瓷砖(map1)应该绘制map,但是如果我把screen.fill放在它之前,那么map会消失我不知道为什么。
import pygame
from pygame import key
from pygame.draw import rect
from pygame.locals import *
pygame.init()
fpsClock = pygame.time.Clock()
resmulti=3
spritesize=16*resmulti
resolution=(256*resmulti,224*resmulti)
screen = pygame.display.set_mode((resolution[0], resolution[1]))
pygame.display.set_caption("test")
player_character = "@"
player_color = (255, 0, 0)
player_size = 20
current_position = [0, 1]
player = pygame.font.Font(None, player_size).render(player_character,False, player_color)
tile = pygame.draw.rect(screen, (255,255,255), [0,0,10,10])
map1 = """
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
w w
w wwwww w ww w
w w w
w w w
w www www w
w w w w w
w w w w w
w w wwwww www w
w w
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
"""
map1 = map1.splitlines()
gameRunning = True
background = pygame.image.load("bg.png")
def tiles(map1):
global tile
for y,line in enumerate(map1):
for x,c in enumerate(line):
if c == "w":
screen.blit(screen,(x*16,y*16),tile)
p_x = 20
p_y = 90
while gameRunning:
for event in pygame.event.get():
if event.type == pygame.QUIT:
gameRunning = False
break
keys = pygame.key.get_pressed()
if keys[K_DOWN]:
p_y += 2
elif keys[K_UP]:
p_y = p_y - 2
elif keys[K_LEFT]:
p_x = p_x - 2
elif keys[K_RIGHT]:
p_x += 2
tiles(map1)
screen.blit(player,(p_x,p_y))
fpsClock.tick(60)
pygame.display.update()
tile = pygame.draw.rect(screen, (255,255,255), [0,0,10,10])
这将返回一个 pygame.Rect object,所以 tile 是一个矩形。
然后在 blit function 中使用 tile。
screen.blit(screen,(x*16,y*16),tile)
但是从 pygame 的文档来看, blit 需要一个 pygame.Surface 不是一个矩形。
解决问题。
使瓷砖成为 pygame.Surface。
#tile = pygame.draw.rect(screen, (255,255,255), [0,0,10,10])
tile = pygame.Surface((10, 10)).convert()
tile.fill((255, 255, 255))
绘制瓷砖如下。
if c == "w":
screen.blit(tile,(x*16,y*16))
然后清屏,画瓷砖,画玩家。
screen.fill((0, 0, 0))
tiles(map1)
screen.blit(player,(p_x,p_y))
最简单的就是简单地更换
screen.blit(screen, (x * 16, y * 16), tile)
和
pygame.draw.rect(screen, (255, 255, 255), (x * 16, y * 16, 10, 10))
您遇到的问题是您正在对screen
的一个区域进行blit
,这与您之前涂成白色的区域相同( tile = pygame.draw.rect(screen, (255,255,255), [0,0,10,10])
)。 问题是,例如,如果您使用fill
来用某种颜色填充screen
,它也会填充您拥有的绘制的正方形,并且它不再是白色而是填充的颜色,并且因为您的图块随后会以相同的颜色创建颜色,它们将与整个screen
的颜色相同。 因此,您可以创建一个新表面(或使用图像),也可以只使用draw
function,如我所展示的。
这允许在while
循环开始时使用blit
或fill
来用背景颜色填充屏幕。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.