[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] pygame slow on linux (ubuntu)



I dont have a website for the game, the main module is attached below.
As for the frame rate, I have no real management, as I thought that it
was not really necessary. Should I have some sort of frame rate
control?




On 6/12/06, Rene Dudfield <renesd@xxxxxxxxx> wrote:
Do you have a link to your game?

How do you manage the frame rate?


On 6/13/06, talon spotter <talonspotter@xxxxxxxxx> wrote: > Hey everybody, > > I am writing a space invaders style game, and it works well on > windows. When I tried the game > under ubuntu linux(dapper), it was noticeably slow. After some > googling, I found this: > http://www.libsdl.org/pipermail/sdl/2006-May/074254.html > > I dont have access to any other distro of linux right now to check if > it is just a problem under ubuntu. I wasnt really able to see any > speed increase in pygame after opening up firefox, but i just casually > checked it and have not been able to do further tests as of yet. > > Has anybody heard of this? Does anybody have any ideas? > > Thanks, s. >

import pygame
from pygame.locals import *
from enemyship import EnemyShip
from playership import PlayerShip
import time
import sys
from bullet import Bullet
import win_newlevel



def play(bigidea):
    pygame.quit()
    pygame.init()

    boxes = pygame.sprite.Group()  # using the sprite group

    global game_height
    game_height = 400
    global game_width
    game_width = 400

    if bigidea == None:
        sys.exit()

    #level = "level"
    num = bigidea[5]
    #print num
    #end = ".map.txt"

    color = [[255,0,0],[0,255,0],[0,50,205]]
    #location = [[10,15],[50,15],[90,15]]
    location = bigidea[0]
    #print bigidea[0]
    #print bigidea
    length = len(location)
    #times_to_kill = 5
    times_to_kill = bigidea[2]
    for x in range(length):
	boxes.add(EnemyShip(location[x],times_to_kill)) # in sprite use .add()

    player = pygame.sprite.Group()
    player.add(PlayerShip([255,0,0], bigidea[1],3))

    global screen

    screen = pygame.display.set_mode([game_width,game_height])
    movingright = ""
    movingleft = ""
    movingup = ""
    movingdown = ""
    global enemybullets
    enemybullets = pygame.sprite.Group() #sprite group
    
    bullets = pygame.sprite.Group() #sprite group

    #player_bullet_speed = [0,-1] #speed of bullet
    #power = 1 #power of bullet?



    while 1:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            elif event.type == KEYDOWN:
                if event.key == K_RIGHT:
                    movingright = True
                elif event.key == K_LEFT:
                    movingleft = True
                elif event.key == K_UP:
                    movingup = True
                elif event.key == K_DOWN:
                    movingdown = True
                elif event.key == K_SPACE:
                    for players in player.sprites():
                        bullets.add(Bullet(color[0],players.get_pos(), 1))
                    bullets.update(game_height, game_width)
                    print "guns fired"
                    
            elif event.type == KEYUP:
                if event.key == K_RIGHT:
                    movingright = False
                elif event.key == K_LEFT:
                    movingleft = False
                elif event.key == K_UP:
                    movingup = False
                elif event.key == K_DOWN:
                    movingdown = False

            #elif event.type == KEYDOWN and event.key == K_ESCAPE:
                #print "guns fired!"

        if movingright == True:
            for players in player.sprites():
                players.move_right()
            
        if movingleft == True:
            for players in player.sprites():
                players.move_left()
        if movingup == True:
            for players in player.sprites():
                players.move_up()
        if movingdown == True:
            for players in player.sprites():
                players.move_down()
            
	screen.fill ([0,0,0]) #fill screen with black so screen is completely refreshed
	
	
	
	#salt = 30 #determines speed of enemy ship
	#pixels = 15 #the number of pixels in each direction

        salt = bigidea[3] #determines speed of enemy ship
        #print salt
	pixels = bigidea[4]
	#print pixels
	
	boxes.update(salt,pixels)  #update method of the sprite group

	bullets.update(game_height, game_width) #update bullets
        for bullet in bullets.sprites():
            screen.blit(bullet.image, bullet.rect) #show bullet

        enemybullets.update(game_height, game_width) #update enemy bullets
        for enebullets in enemybullets.sprites():
            screen.blit(enebullets.image, enebullets.rect) #show bullet

        
	for b in boxes.sprites():
		#b.update(salt, pixels) #salt determines speed
		#for salt (determine by difficulty/level number)
		#salt -slowest is 45 to 50, fastest possible is 1
		#pixels is the amount of pixels to move in each direction
		#pixels can be changed according to the difficulty level
		screen.blit(b.image, b.rect) #show the image!

                #collision detection follows
		#if pygame.sprite.spritecollideany(b, bullets):
                #    b.hit()
                #    print "hit"
                
		
        #bullet and enemy collision detection
        for hits in pygame.sprite.groupcollide(boxes,bullets,0,1).keys():
            hits.hit() # somehow, the hits.keys() gives the sprite object
            #print "enemy killed!"
            #print hits
        for hit_player in pygame.sprite.groupcollide(player, enemybullets, 0,1).keys():
            hit_player.hit()
          
        #check if any enemies are left
        if boxes.sprites() == []:
            print "All enemies killed!"
            win_newlevel.win_newlevel(num)
            #print num
            #print num
            #pygame.quit()
            #sys.exit()

        if player.sprites() == []:
            print "You died!!"
            pygame.quit()
            sys.exit()
            #win_newlevel.win_newlevel(num)
        
	player.update(game_height*0.60,game_height,0,game_width)
	#screen.blit(player.image, player.rect)
	for players in player.sprites():
            screen.blit(players.image, players.rect)
	
	pygame.display.update()
        time.sleep(0.01) #delay loop

if __name__ == "__main__":
    play()