Invisible Pygame Car!?

Josh polopunk209 at hotmail.com
Mon Sep 10 06:57:00 CEST 2001


For some reason, the picture of my car won't show up in my upcoming
driving/shooter game. most of this code is taken from the aliens
example. I used to see the car, and the road fine, but after some
tinkering, I can't see the car anymore. Also, when the car was showing
up, I could only move it a few pixels back and forth, instead of the
width of the screen, any help would be appreciated. Here's the code...


import whrandom, os.path, sys
import pygame, pygame.image
from pygame.locals import *

#image loader
def load_image(file, transparent):
    "loads an image, prepares it for play"
    file = os.path.join('data', file)
    try:
        surface = pygame.image.load(file)
    except pygame.error:
        raise SystemExit, 'Could not load image "%s" %s'%(file,
pygame.get_error())
    if transparent:
        corner = surface.get_at((0, 0))
        surface.set_colorkey(corner, RLEACCEL)
    return surface.convert()

def load_back(file):
    "loads background, prepares it for play"
    file = os.path.join('background', file)
    try:
        surface = pygame.image.load(file)
    except pygame.error:
        raise SystemExit, 'Could not load image "%s" %s'% (file,
pygame.get_error())
    return surface.convert()

#constants
SCREENRECT = Rect(0, 0, 350, 450)
PLAYER_SPEED = 5

#some globals for friendly access
dirtyrects = [] # list of update_rects
next_tick = 0   # used for timing
class Img: pass # container for images
class Bg: pass # container for backgrounds

class Actor:
    "An enhanced sort of sprite class"
    def __init__(self, image):
        self.image = image
        self.rect = image.get_rect()
        
    def update(self):
        "update the sprite state for this frame"
        pass
    
    def draw(self, screen):
        "draws the sprite into the screen"
        r = screen.blit(self.image, self.rect)
        dirtyrects.append(r)
        
    def erase(self, screen, background):
        "gets the sprite off of the screen"
        r = screen.blit(background, self.rect, self.rect)
        dirtyrects.append(r)

class Player(Actor):
    "Cheer for our hero"
    def __init__(self):
        Actor.__init__(self, Img.car)
        self.alive = 1
        self.reloading = 0
        self.rect.centerx = SCREENRECT.centerx
        self.rect.bottom = SCREENRECT.bottom - 5

    def move(self, direction):
        self.rect = self.rect.move(direction*PLAYER_SPEED,
0).clamp(road)

class Road(Actor):
    "The proving grounds"
    def __init__(self):
    Actor.__init__(self, Bg.road)
    self.rect.centerx = SCREENRECT.centerx
        
def main():

    global dirtyrects

    #initiate pygame/display settings
    pygame.init()
    screen = pygame.display.set_mode(SCREENRECT.size, 0)
    pygame.display.set_caption('Cop Chase')
    pygame.mouse.set_visible(0)

    # Load the Resources
    Img.cop = load_image('cop.bmp', 1)
    Img.car = load_image('car.bmp', 1)
    ###Bg.road = load_back('road.bmp')

    #create background
    background = pygame.Surface(screen.get_size())
    background.fill((25,150,25))

    #flip display/show background
    screen.blit(background,(0,0))
    screen.blit(Bg.road, (0,0))
    pygame.display.flip()

    while 1:

        # Initialize Game Actors
        player = Player()

        #quit game
        pygame.event.pump()
        keystate = pygame.key.get_pressed()
        if keystate[K_ESCAPE] or pygame.event.peek(QUIT):
            break

        # Clear screen and update actors
        for actor in [player]:
            actor.erase(screen, background)
            actor.update()

        # Move the player
        direction = keystate[K_RIGHT] - keystate[K_LEFT]
        player.move(direction)

        # Draw everybody
        for actor in [player]:
            actor.draw(screen)

        pygame.display.update(dirtyrects)
        dirtyrects = []

if __name__ == '__main__':
    main()



More information about the Python-list mailing list