CoE Software Lab II 240-203, Semester 2, 2018-2019 4. Sprites.

Slides:



Advertisements
Similar presentations
Games in Python – the easy way
Advertisements

Sprites A sprite is a 2D image or animation that is integrated into a larger scene. Originally, sprites were created by special hardware that would super-impose.
Week 9 Writing Games with Pygame Special thanks to Scott Shawcroft, Ryan Tucker, and Paul Beck for their work on these slides. Except where otherwise noted,
Week 10 Writing Games with Pygame Special thanks to Scott Shawcroft, Ryan Tucker, and Paul Beck for their work on these slides. Except where otherwise.
2 What is pyGame? A set of Python modules to make it easier to write games. –home page: –documentation:
Pygame Dick Steflik.
Escape A sticky man adventure using TKINTER python module By: Channing Burgess.
Guide to Programming with Python
Unit 9 pyGame Special thanks to Roy McElmurry, John Kurkowski, Scott Shawcroft, Ryan Tucker, Paul Beck for their work. Except where otherwise noted, this.
Week 10 Writing Games with Pygame, continued Special thanks to Scott Shawcroft, Ryan Tucker, and Paul Beck for their work on these slides. Except where.
Introduction to TouchDevelop
1 Computer Science of Graphics and Games MONT 105S, Spring 2009 Session 23 Game Graphics II.
Meet Pygame Noah Kantrowitz June 8, The Basics Cross-platform Based on SDL (don’t quote me on that) Handle input (keyboard, mouse) and output (graphics,
Addison Wesley is an imprint of © 2010 Pearson Addison-Wesley. All rights reserved. Chapter 7 The Game Loop and Animation Starting Out with Games & Graphics.
11 Adding Tomato Targets Session Session Overview  We now have a game which lets a player bounce a piece of cheese on a bread bat  Now we have.
Tkinter Canvas.
Video Games Writing Games with Pygame Special thanks to Scott Shawcroft, Ryan Tucker, and Paul Beck for their work on these slides. Except where otherwise.
Physics + Vectors References: xyz. Variable frame rates (review) Two options for handling it: – Option1: Cap frame rates When moving / rotating express.
PyGame - Unit 1 PyGame Unit – – Introduction to PyGame.
1 Computer Science of Graphics and Games MONT 105S, Spring 2009 Session 22 Game Graphics.
PyGame - Unit 4 PyGame Unit – Object Oriented Programming OOP.
Sprite sets. project of the week: bubble popper o objects appear from the bottom and slide up o player needs to avoid objects to earn points (objects.
Graphics in Python On entry: Run Python 2.78 from N: drive/computing and ICT VLE: Computing home page - check your feedback Success criteria: ●Understands.
Intro to Pygame Lecture 05. What is Pygame? It is a set of Python modules designed for writing games. It makes writing games possible for beginners. import.
11. Skier Let’s Learn Saengthong School, June – August 2016 Teacher: Aj. Andrew Davison, CoE, PSU Hat Yai Campus
3. Drawing Let’s Learn Saengthong School, June – August 2016 Teacher: Aj. Andrew Davison, CoE, PSU Hat Yai Campus
9. Media (sound effects, music, video) Let’s Learn Saengthong School, June – August 2016 Teacher: Aj. Andrew Davison, CoE, PSU Hat Yai Campus
Game Maker Tutorials Introduction Clickball IntroductionClickball Where is it? Shooting Where is it?Shooting.
5. Animation Let’s Learn Saengthong School, June – August 2016 Teacher: Aj. Andrew Davison, CoE, PSU Hat Yai Campus
13. More Games Let’s Learn Saengthong School, June – August 2016 Teacher: Aj. Andrew Davison, CoE, PSU Hat Yai Campus
13. Sprites. Outline 1.Game Things in Pygame (again) 2.The Pygame sprite Module 3.The Sprite Class 4.Groups of Sprites 5.Types of Collision Detection.
Building a rocks and spaceship game with Pygame Zero
Sprites (Images) and Sounds
2D Collision Detection For CSE 3902 By: Matt Boggus.
Sound and more Animations
MOM! Phineas and Ferb are … Aims:
Pixels, Colors and Shapes
15. Media (sound effects, music, video)
Catapult 2016.
Animations.
PYGAME.
Let’s Learn 2. Installing Pygame
8. Installing Pygame
Week 8 Classes and Objects
Keyboard Input.
9. Drawing.
Background Shapes & Collision Resolution (Top-down and Side-scrolling)
Intro & Point-to-Box, Circle-to-Circle, Point-to-Circle
Collision Detection Box-to-Box.
10. User Input.
11. Animation Let's Learn Python and Pygame

9. Drawing Let's Learn Python and Pygame
Catapult 2014 Session 10.
Let’s Learn 10. Invaders Saengthong School, June – August 2016
13. Sprites Let's Learn Python and Pygame
8. Starting Pygame Let's Learn Python and Pygame
10. User Input Let's Learn Python and Pygame
14. Pong.
16. Invaders.
Let’s Learn 7. Sprites Saengthong School, June – August 2016
Collision Detection Platforms.
14. Pong Let's Learn Python and Pygame
Lecture 7: Introduction to Processing
Let’s begin our game!.
11. Animation.
L L Line CSE 420 Computer Games Lecture #6 Game Foundations.
CoE Software Lab II , Semester 2, Pong.
CoE Software Lab II 1. Pygame Intro , Semester 2,
Chapter 7 The Game Loop and Animation
Presentation transcript:

CoE Software Lab II 240-203, Semester 2, 2018-2019 4. Sprites

1. The Pygame sprite Module http://www.pygame.org/docs/ref/sprite.html a Sprite class for creating Sprite objects we will create game sprites by inheriting Sprite a Group class for grouping sprites together lots of collision detection functions

2. The Sprite Class Every sprite object contains an image and a rectangle (which contains its (x,y) position, width and height). Sprite includes many functions for adding the sprite to groups. Sprite object image (x,y) h rect w other optional data a sprite is moved by changing the (x,y) value in rect

3. My BallSprite Class BallSprite object (x,y) h w xStep and yStep image class BallSprite(pygame.sprite.Sprite): def __init__(self, fnm): super().__init__() self.image = pygame.image.load(fnm).convert_alpha() self.rect = self.image.get_rect() self.rect.center = [scrWidth/2, scrHeight/2] # start position of the ball # in center of window self.xStep, self.yStep = self.randomSteps() # step size and direction along each axis def randomSteps(self): # create a random +/- STEP pair x = STEP if random.random() > 0.5: x = -x y = STEP y = -y return [x,y] (x,y) h rect w xStep yStep xStep and yStep will be used to move the sprite scrWidth, scrHeight, STEP are globals – see later

horizWalls, vertWalls are globals – see later def update(self): if pygame.sprite.spritecollideany(self, horizWalls): # change y-step direction at top and bottom sides self.yStep = -self.yStep if pygame.sprite.spritecollideany(self, vertWalls): # change x-step direction at left and right sides self.xStep = -self.xStep self.rect.x += self.xStep # move the ball horizontally self.rect.y += self.yStep # and vertically

4. My BlockSprite Class The image is a black rectangle. BlockSprite object 4. My BlockSprite Class image (x,y) height rect class BlockSprite(pygame.sprite.Sprite): def __init__(self, x, y, width, height): super().__init__() self.image = pygame.Surface((width, height)) self.image.fill(BLACK) self.rect = self.image.get_rect() self.rect.topleft = (x, y) width

5. Groups of Sprites Sprite objects can be grouped together inside a Group object: # create wall sprites top = BlockSprite(0, 0, scrWidth, WALL_SIZE) bottom = BlockSprite(0, scrHeight-WALL_SIZE, scrWidth, WALL_SIZE) left = BlockSprite(0, 0, WALL_SIZE, scrHeight) right = BlockSprite(scrWidth-WALL_SIZE, 0, WALL_SIZE, scrHeight) horizWalls = pygame.sprite.Group(top, bottom) vertWalls = pygame.sprite.Group(left, right) The sprites in a group can be tested, updated and drawn using functions: vertWalls.draw(screen) # draws both sprites (left, right)

Different ways of Grouping The sprite module contains a few different ways to group sprites beachBounce.py will use Group and OrderedUpdates Group groups sprites in no order OrderedUpdates groups sprites in order

6. Types of Collision Detection Using rectangles often too big, but fast to test Using circles how big should the circles be? Using the images' non-transparent pixels slow but most accurate

All three approaches are in the sprite module: pygame.sprite.collide_rect(sprite1, sprite2) uses self.rect data in the Sprite objects pygame.sprite.collide_circle(sprite1, sprite2) requires self.radius data in the Sprite objects pygame.sprite.collide_mask(sprite1, sprite2) requires self.mask data in the Sprite objects a mask is a black and white version of the sprite that shows its outline image mask

Collision Detection with Groups spritecollideany(sprite, group) Returns True if sprite has collided with any sprite in the group spritecollide(sprite, group, kill) Returns a list of all sprites in group that collide with sprite If kill is True, a collision causes sprite to be deleted groupcollide(group1, group2, kill1, kill2) Returns list of all sprites in group1 that collide with group2

See BallSprite.update() def update(self): if pygame.sprite.spritecollideany(self, horizWalls): # change y-step direction at top and bottom sides self.yStep = -self.yStep if pygame.sprite.spritecollideany(self, vertWalls): # change x-step direction at left and right sides self.xStep = -self.xStep self.rect.x += self.xStep # move ball horizontally self.rect.y += self.yStep # and vertically

7. beachSprites.py The same bouncing ball example as before, but coded using sprites. note the black "walls" around the sides of the window

Code BLACK = ( 0, 0, 0) WHITE = ( 255, 255, 255) WALL_SIZE = 10 STEP = 10 class BlockSprite(pygame.sprite.Sprite): # see slide 9 class BallSprite(pygame.sprite.Sprite): # see slides 7 - 8

# ---------- main ------------- pygame.init() screen = pygame.display.set_mode([640,480]) screen.fill(WHITE) pygame.display.set_caption("Bouncing Beachball") scrWidth, scrHeight = screen.get_size() # create wall sprites top = BlockSprite(0, 0, scrWidth, WALL_SIZE) bottom = BlockSprite(0, scrHeight-WALL_SIZE, scrWidth, WALL_SIZE) left = BlockSprite(0, 0, WALL_SIZE, scrHeight) right = BlockSprite(scrWidth-WALL_SIZE, 0, WALL_SIZE, scrHeight) horizWalls = pygame.sprite.Group(top, bottom) vertWalls = pygame.sprite.Group(left, right) ball = BallSprite('smallBall.png') # sprites = pygame.sprite.Group(top, bottom, left, right, ball) sprites = pygame.sprite.OrderedUpdates(top, bottom, left, right, ball) clock = pygame.time.Clock()

running = True while running: clock running = True while running: clock.tick(30) # handle events for event in pygame.event.get(): if event.type == QUIT: running = False # update game state ball.update() # redraw screen.fill(WHITE) sprites.draw(screen) # draws all 5 sprites pygame.display.update() pygame.quit() Here is the benefit of using Sprite and Group – the game loop becomes very simple.