ThePythonGameBook

learn Python. Create Games

User Tools

Site Tools


en:part2:pygame:step008

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
en:part2:pygame:step008 [2010/01/24 14:01]
Horst JENS
— (current)
Line 1: Line 1:
-^ [[:​en:​part2:​step007| ← previous]] ^ [[en:​part2:​start| ↑ Overview]] ^ [[:​en:​part2:​step009| → next ]] ^ 
-====== step 008 - loading images ====== 
-==== discussion ==== 
-=== loading images === 
-Using pre-fabricated images instead of painting all images yourself with the [[http://​www.pygame.org/​docs/​ref/​draw.html|pygame.draw - functions]] comes very handy. This example shows you how to load images into pygame. Note that in this example, the images must be in the same folder as the python program ! In this example, if pygame can not find the images, it will print an error message and use the image-drawing methods from the previous code example. 
- 
- 
- 
-=== catching file not found error ==== 
- 
-This is done using the **try:** **except:** method. 
-<code python> 
-try: 
-   #do something risky that may not work like loading files 
-   #... 
-except: 
-   #do that if an error occurs inside the try block 
-   #... 
-# continue here if no error 
-</​code>​ 
- 
- Also see the official documentation:​ 
-==== documentation ==== 
-  * python 2.x  
-    * http://​docs.python.org/​reference/​compound_stmts.html#​the-try-statement 
-  * python 3.x 
-    * http://​docs.python.org/​3.1/​reference/​compound_stmts.html#​the-try-statement 
- 
-==== additional resources ==== 
-Put those 2 graphic files in the same folder as **part2step008-loading-image.py** to make the program run correctly. If one or both of those files are not found you will see a brown and a blue circle instead: 
-^ filename ^ preview / note  ^ file must be in folder ^ source / license ^ 
-| ::: | left-click to zoom to original size,\\ then right-click to download | ::: | ::: | 
-| babytux.png | {{:​en:​part2:​babytux.png|Babytux graphic file (.png) with transparent border}} | same folder as program | wikimedia commons | 
-| background640x480_a.jpg | {{:​en:​part2:​background640x480_a.jpg?​150|background.jpg file}} \\  | same folder as program | Horst JENS / public domain | 
-| {{:​en:​part2:​part2step008.tar.gz|part2step008}} | all files except the source code\\ in a zipped package | | | 
- 
-<​html><​!--http://​www.spielend-programmieren.at/​pythongamebook/​lib/​exe/​fetch.php?​cache=&​media=en:​part2:​background640x480_a.jpg 
-[[cache=&​media=en:​part2:​background640x480_a.jpg]]--></​html>​ 
-[[this>​../​data/​media/​pdf/​bigpdf.pdf|A big PDF file]] ​ 
- 
-==== source code ==== 
- 
-<code python| part2step008-loading-image.py>​ 
-# -*- coding: utf-8 -*- 
-"""​ 
-part2step008-loading-image.py 
- 
-loading images from harddisk and using convert_alpha() 
-This program try to load 2 image files from the harddisk. Both files must be in the 
-same folder as the program itself. If the image files are not found, images are 
-created by code instead and an error message is printed. 
-Note that convert_alpha() is only necessary when the loaded image had 
-a transparent color. Some .png and .gif files have this, but never .jpg files. 
-"""​ 
-import pygame 
-pygame.init() 
-screen=pygame.display.set_mode((640,​480)) # try out larger values and see what happens ! 
-try: 
-    background = pygame.image.load("​background640x480_a.jpg"​) 
-except: 
-    print("​Error:​ the image background640x480_a.jpg is not in this folder"​) 
-    background = pygame.Surface(screen.get_size()) # create a pygame Surface 
-    background.fill((255,​255,​255)) ​                # fill the background white  
-    pygame.draw.circle(background,​ (50,50,0), (300,250), 200)   # draw circle 
-try: 
-    ball = pygame.image.load("​babytux.png"​) 
-except: 
-    print("​Error:​ the image babytux.png is not in this folder"​) 
-    ball = pygame.Surface((50,​50)) ​    #​create a new black surface ​ 
-    ball.set_colorkey((0,​0,​0)) ​         
-    pygame.draw.circle(ball,​ (0,0,255), (25,25),25) # paint blue circle 
-#finally: 
-background = background.convert() ​ # jpg can not have transparency 
-ball = ball.convert_alpha() ​       # png image has transparent color  
-ballx, bally = 550, 240            # start position of ball surface 
-dx, dy  = 60, 60                   # ball speed in pixel per second ! 
-screen.blit(background,​ (0,​0)) ​    # blit background on screen (overwriting all) 
-screen.blit(ball,​ (ballx, bally)) ​ # blit the ball shape  
-clock = pygame.time.Clock() ​       # create pygame clock object ​ 
-mainloop = True 
-FPS = 60                           # desired max. framerate in frames per second. ​ 
-while mainloop: 
-    milliseconds = clock.tick(FPS) ​ # milliseconds passed since last frame 
-    seconds = milliseconds / 1000.0 # seconds passed since last frame 
-    for event in pygame.event.get():​ 
-        if event.type == pygame.QUIT:​ 
-            mainloop = False # pygame window closed by user 
-        elif event.type == pygame.KEYDOWN:​ 
-            if event.key == pygame.K_ESCAPE:​ 
-                mainloop = False # user pressed ESC 
-    pygame.display.set_caption("​[FPS]:​ %.2f X:%.1f Y:%.1f Speed" 
-    " [pixel/sec] dx:%.2f dy:​%.2f"​ % (clock.get_fps(),​ ballx, bally, dx, dy)) 
-    # only blit the part of the background where the ball was (cleanrect) 
-    dirtyrect = background.subsurface((round(ballx,​0), ​ 
-                round(bally,​0),​ ball.get_width(),​ ball.get_height())) 
-    # comment out the next line for a funny effect ! 
-    screen.blit(dirtyrect,​ (round(ballx,​0),​ round(bally,​0))) ​ 
-    #calculate new center of ball  
-    ballx += dx * seconds # time based movement 
-    bally += dy * seconds 
-    # bounce ball if out of screen 
-    if ballx < 0: 
-        ballx = 0 
-        dx *= -1  
-    elif ballx + ball.get_width() > screen.get_width():​ 
-        ballx = screen.get_width() - ball.get_width() 
-        dx *= -1 
-    if bally < 0: 
-        bally = 0 
-        dy *= -1 
-    elif bally + ball.get_height() > screen.get_height():​ 
-        bally = screen.get_height() - ball.get_height() 
-        dy *= -1 
-    # paint the ball    ​ 
-    screen.blit(ball,​ (round(ballx,​0),​ round(bally,​0))) ​   ​ 
-    pygame.display.flip() ​         # flip the screen 30 times a second ​               # flip the screen 30 (or FPS) times a second 
-</​code>​ 
-^ [[:​en:​part2:​step007| ← previous]] ^ [[en:​part2:​start| ↑ Overview]] ^ [[:​en:​part2:​step009| → next ]] ^ 
  
/var/www/horst/thepythongamebook.com/data/attic/en/part2/pygame/step008.1264338081.txt.gz · Last modified: 2014/01/09 11:07 (external edit)