homeworkhelp111

spritesheet.py

Feb 8th, 2022 (edited)
28
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.27 KB | None | 0 0
  1. # CodeSkulptor runs Python programs in your browser.
  2. # Click the upper left button to run this simple demo.
  3.  
  4. # CodeSkulptor is tested to run in recent versions of
  5. # Chrome, Firefox, Safari, and Edge.
  6.  
  7. import simplegui
  8.  
  9. SHEET_URL = "http://www.cs.rhul.ac.uk/courses/CS1830/sprites/runnerSheet.png"
  10. SHEET_WIDTH = 1440
  11. SHEET_HEIGHT = 1480
  12. SHEET_COLUMNS = 6
  13. SHEET_ROWS = 5
  14.  
  15. class Spritesheet:
  16.     def __init__(self, imgurl, width, height, columns, rows):
  17.  
  18.         self.img = simplegui.load_image(imgurl)
  19.  
  20.         self.width = width
  21.         self.height = height
  22.         self.columns = columns
  23.         self.rows = rows
  24.  
  25.         self.frame_width = width / columns
  26.         self.frame_height = height / rows
  27.         self.frame_centre_x = self.frame_width / 2
  28.         self.frame_centre_y = self.frame_height / 2
  29.  
  30.         self.frame_index = [0, 0]
  31.         self.clock = Clock(0)
  32.         print(self.rows)
  33.         print(self.columns)
  34.        
  35.     def draw(self, canvas):
  36.         source_centre = (
  37.             self.frame_width * self.frame_index[1] + self.frame_centre_x,
  38.             self.frame_height * self.frame_index[0] + self.frame_centre_y
  39.         )
  40.         source_size = (self.frame_width, self.frame_height)
  41.         dest_centre = (300, 150)
  42.         dest_size = (100, 100)
  43.  
  44.         canvas.draw_image(
  45.             self.img,
  46.             source_centre, source_size,
  47.             dest_centre, dest_size
  48.         )
  49.         self.clock.tick()
  50.        
  51.         if(self.clock.transition(10)):
  52.             self.next()
  53.  
  54.     def next(self):
  55.        
  56.         if(self.frame_index[1] + 1 >= self.columns):
  57.             self.frame_index[0] = (self.frame_index[0] + 1)%self.rows
  58.    
  59.         self.frame_index[1] = (self.frame_index[1]+1)%self.columns
  60.  
  61. class Clock:
  62.    
  63.     def __init__(self, time):
  64.         self.time = time
  65.        
  66.     def tick(self):
  67.         self.time = self.time + 1
  68.      
  69.     def transition(self, frame_duration):
  70.         if(self.time==frame_duration):
  71.             self.time = 0
  72.             return True
  73.         else:
  74.             return False
  75.        
  76. sheet = Spritesheet(
  77.     SHEET_URL,
  78.     SHEET_WIDTH, SHEET_HEIGHT,
  79.     SHEET_COLUMNS, SHEET_ROWS
  80. )
  81.  
  82. frame = simplegui.create_frame("Sprite", 600, 300)
  83. frame.set_draw_handler(sheet.draw)
  84.  
  85. frame.start()
Add Comment
Please, Sign In to add comment