Pygame,如何在移动时移除玩家的踪迹,我试过填充屏幕但仍然对我不起作用
Pygame, how to remove trail from a player when moving, I tried filling screen but still didnt work for me
所以我试图在播放器移动时删除它的踪迹。我尝试做 screen.fill,但是当我这样做时,整个地图都消失了。我想实现一个简单的移动ascii字母。 - tiles(map1) 应该绘制地图,但是如果我把 screen.fill 放在它前面,那么地图就会消失,我不知道为什么。
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])
那个returns一个pygame.Rect对象,所以tile是一个rect。
那你在blit函数中使用tile。
screen.blit(screen,(x*16,y*16),tile)
但是从 pygame 的文档来看,blit 需要 pygame.Surface 而不是矩形。
解决问题。
制作瓷砖 a 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))
您遇到的问题是您 blit
正在 screen
的一个区域,与您之前涂成白色的区域 (tile = pygame.draw.rect(screen, (255,255,255), [0,0,10,10])
) 相同。问题是,例如,如果您使用 fill
来填充 screen
一些颜色,它也会填充您绘制的正方形,并且它不再是白色而是填充颜色,并且由于您然后将以相同的颜色创建图块,它们将与整个 screen
的颜色相同。所以你可以创建一个新的表面(或使用图像)或者只使用 draw
函数,正如我所展示的那样。
这允许在 while
循环开始时使用 blit
或 fill
来用背景色填充屏幕。
所以我试图在播放器移动时删除它的踪迹。我尝试做 screen.fill,但是当我这样做时,整个地图都消失了。我想实现一个简单的移动ascii字母。 - tiles(map1) 应该绘制地图,但是如果我把 screen.fill 放在它前面,那么地图就会消失,我不知道为什么。
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])
那个returns一个pygame.Rect对象,所以tile是一个rect。
那你在blit函数中使用tile。
screen.blit(screen,(x*16,y*16),tile)
但是从 pygame 的文档来看,blit 需要 pygame.Surface 而不是矩形。
解决问题。
制作瓷砖 a 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))
您遇到的问题是您 blit
正在 screen
的一个区域,与您之前涂成白色的区域 (tile = pygame.draw.rect(screen, (255,255,255), [0,0,10,10])
) 相同。问题是,例如,如果您使用 fill
来填充 screen
一些颜色,它也会填充您绘制的正方形,并且它不再是白色而是填充颜色,并且由于您然后将以相同的颜色创建图块,它们将与整个 screen
的颜色相同。所以你可以创建一个新的表面(或使用图像)或者只使用 draw
函数,正如我所展示的那样。
这允许在 while
循环开始时使用 blit
或 fill
来用背景色填充屏幕。