Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Pygame, how to remove trail from a player when moving, I tried filling screen but still didnt work for me

So I am trying to remove the trail from player while it moves. I tried to do screen.fill, but when I do it, then the whole map disappears. I want to achieve a simple moving ascii letter. – tiles(map1) is supposed to draw the map, however if I put screen.fill before it, then the map will disappear i have no idea why.

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()

>Solution :

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

tile = pygame.draw.rect(screen, (255,255,255), [0,0,10,10])

That returns a pygame.Rect object, so tile is a rect.

Then you use tile in the blit function.

screen.blit(screen,(x*16,y*16),tile)

But from pygame’s documentation, blit takes a pygame.Surface not a rect.

To fix the problem.

Make tile 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))

Draw the tile as follows.

if c == "w":
     screen.blit(tile,(x*16,y*16))

Then clear screen, draw tiles, draw player.

screen.fill((0, 0, 0))
tiles(map1)
screen.blit(player,(p_x,p_y))
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading