Advertisement
zeroblitzt

PyGame Physics UPDATED!

Feb 20th, 2013
137
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.95 KB | None | 0 0
  1. #pygame Test by KNovak
  2. import pygame, sys, os, math
  3. from pygame.locals import *
  4. pygame.init()
  5. pygame.key.set_repeat(1)
  6. fullscreen = False;
  7.  
  8. #startup settings
  9. for arg in sys.argv:
  10.     if arg == "-f":
  11.         fullscreen = True
  12.  
  13.  
  14. #Video Display information
  15. vidinfo = pygame.display.Info()
  16.  
  17. if fullscreen == True:
  18.     vidsize = (vidinfo.current_w, vidinfo.current_h)
  19.     window = pygame.display.set_mode(vidsize, pygame.FULLSCREEN)
  20. else:
  21.     vidsize = (640,480)
  22.     window = pygame.display.set_mode(vidsize)
  23. pygame.display.set_caption('KNova Test Window')
  24. screen = pygame.display.get_surface()
  25. background = pygame.Surface((screen.get_width(), screen.get_height()))
  26.  
  27. #colors
  28. WHITE = (255,255,255)
  29. BLUE = (0,0,150)
  30. GREEN = (0,150,0)
  31.  
  32. #text
  33. def drawText (text, color, xloc, yloc, size):
  34.     fontObj = pygame.font.Font('freesansbold.ttf', size)
  35.     textSurface = fontObj.render(text, True, color)
  36.     textRectObj = textSurface.get_rect()
  37.     textRectObj.center = (xloc, yloc)
  38.     return textSurface, textRectObj
  39.  
  40. ####################################################
  41. #Sprite Class for the Ship Image
  42.  
  43. class Ship(pygame.sprite.Sprite):
  44.     image = pygame.image.load("./resources/ship.png")
  45.     image = image.convert()
  46.    
  47.     #initialization function
  48.     def __init__(self, position=(100,100)):
  49.         pygame.sprite.Sprite.__init__(self,self.groups)
  50.         self.pos = position
  51.         self.orig_image = Ship.image
  52.         self.image = self.orig_image
  53.         self.rect = self.image.get_rect()
  54.         self.rect.center = self.pos
  55.         self.angle = 0
  56.         self.vx, self.vy, self.speed = 0, 0, 0
  57.         self.maxvel = 4
  58.         self.moving = 0
  59.        
  60.     #move function
  61.     def move(self, newpos):
  62.         oldx, oldy = self.pos
  63.         dx, dy = newpos
  64.         self.pos = (oldx - dx, oldy - dy)
  65.         self.rect.center = self.pos
  66.  
  67.        
  68.     #update function which will replace both move and rotate
  69.     def update(self):
  70.    
  71.         #handle rotations
  72.         if self.angle >= 360:
  73.             self.angle = 0
  74.         if self.angle <= -360:
  75.             self.angle = 0
  76.         loc = self.rect.center
  77.         self.image = pygame.transform.rotate(self.orig_image, self.angle)
  78.         self.rect = self.image.get_rect()
  79.         self.rect.center = loc
  80.        
  81.         #handle 2D movement
  82.         if self.moving: self.velocity(self.speed)
  83.         self.move((self.vx, self.vy))
  84.  
  85.        
  86.         #boundaries
  87.         if self.pos[0] > vidsize[0]:
  88.             #right
  89.             self.vx = -self.vx
  90.         if self.pos[0] < 0:
  91.             #left
  92.             self.vx = -self.vx
  93.         if self.pos[1] > vidsize[1]:
  94.             #bottom
  95.             self.vy = -self.vy
  96.         if self.pos[1] < 0:
  97.             #top
  98.             self.vy = -self.vy
  99.    
  100.     #update velocity
  101.     def velocity(self, speed):
  102.         self.vx += math.sin(math.radians(self.angle)) * speed
  103.         self.vy += math.cos(math.radians(self.angle)) * speed
  104.        
  105.         magnitude = math.sqrt(self.vx*self.vx + self.vy*self.vy)
  106.         if magnitude > self.maxvel:
  107.             self.vx *= 4/magnitude
  108.             self.vy *= 4/magnitude
  109.         if self.speed >= self.maxvel:
  110.             self.speed = self.maxvel
  111.         if self.speed <= -self.maxvel:
  112.             self.speed = -self.maxvel
  113.        
  114. ####################################################
  115.  
  116. #sprite group update
  117. def spriteUpdate(group, screen, background):
  118.     group.clear(screen, background)
  119.     group.update()
  120.     group.draw(screen)
  121.  
  122.  
  123. #get keyboard events
  124. def pyin(events):
  125.     for event in events:
  126.         if event.type == QUIT:
  127.             sys.exit(0)
  128.         if event.type == KEYDOWN:
  129.             key = pygame.key.get_pressed()
  130.             if (key[pygame.K_ESCAPE]):
  131.                 sys.exit(0)
  132.                
  133.             if (key[K_UP]):
  134.                 newShip.speed += 1
  135.                 newShip.moving = 1
  136.  
  137.             if (key[K_DOWN]):
  138.                 newShip.speed -= 1
  139.                 newShip.moving = 1
  140.  
  141.             if (key[K_LEFT]):
  142.                 newShip.angle += 4
  143.                
  144.             if (key[K_RIGHT]):
  145.                 newShip.angle -= 4
  146.  
  147.         if event.type == KEYUP:
  148.             if event.key == pygame.K_UP:
  149.                 newShip.moving = 0
  150.             if event.key == pygame.K_DOWN:
  151.                 newShip.moving = 0
  152.  
  153.  
  154.        
  155. spriteGroup = pygame.sprite.Group()
  156. Ship.groups = spriteGroup
  157. newShip = Ship()
  158. clock = pygame.time.Clock()
  159.  
  160.  
  161. while True:
  162.     #clock
  163.     clock.tick(60)
  164.    
  165.     #input detection / handling
  166.     pyin(pygame.event.get())
  167.    
  168.     #graphics update
  169.     pygame.display.update()
  170.     spriteUpdate(spriteGroup, screen, background)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement