Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/AnimatedSprite.py
diff options
context:
space:
mode:
Diffstat (limited to 'AnimatedSprite.py')
-rw-r--r--AnimatedSprite.py274
1 files changed, 18 insertions, 256 deletions
diff --git a/AnimatedSprite.py b/AnimatedSprite.py
index 084f03f..0eaab83 100644
--- a/AnimatedSprite.py
+++ b/AnimatedSprite.py
@@ -1,18 +1,13 @@
import pygame
-import os
-import random
-
-LEFT = 1
-RIGHT = 2
-UP = 3
-DOWN =4
+#import os
+#import random
class AnimatedSprite(pygame.sprite.Sprite):
"""
AnimatedSprite is a custom Sprite class for animated objects
images: list with sprite images
- sprites: list with image# for every frame
+ frames: list with image# for every frame
next_frames: list with next frame from current one
dxs: list with dx for current frame
dys: list with dy for current frame
@@ -21,19 +16,17 @@ class AnimatedSprite(pygame.sprite.Sprite):
fps: fps
"""
- def __init__(self, images, sprites, next_frames,
+ def __init__(self, images, frames, next_frames,
dxs, dys, xini, yini, fps = 10):
pygame.sprite.Sprite.__init__(self)
self._images = images
- # Track the time we started, and the time between updates.
- # Then we can figure out when we have to switch the image.
self._start = pygame.time.get_ticks()
self._delay = 1000 / fps
self._last_update = 0
self._frame = 0
- self._sprites = sprites
+ self._frames = frames
self._next_frames = next_frames
self._dxs = dxs
self._dys = dys
@@ -41,266 +34,35 @@ class AnimatedSprite(pygame.sprite.Sprite):
self.y = yini
self.move = 0
- self.image = self._images[self._sprites[self._frame]]
-
- # Call update to set our first image.
- self.update(pygame.time.get_ticks())
+ self.image = self._images[self._frames[self._frame]]
- def update(self, t):
- # Note that this doesn't work if it's been more that self._delay
- # time between calls to update(); we only update the image once
- # then, but it really should be updated twice.
+# self.update(pygame.time.get_ticks())
-# print t
+ def update(self, t, grid):
# if t - self._last_update > self._delay:
-# if self._frame >= 2: #len(self._images):
-# self._frame = 0
- print self._frame
- self.image = self._images[self._sprites[self._frame]]
-# self.x += self._dxs[self._frame]
-# if move == RIGHT:
-# self.x += 5
-# elif move == LEFT:
-# self.x -= 5
-# self.y += self._dys[self._frame]
+# print("Can't reach fps.")
+
+ self.do_move(grid)
+ self.image = self._images[self._frames[self._frame]]
self._last_update = t
def render(self, screen):
-# self.update(pygame.time.get_ticks())
screen.blit(self.image, (self.x, self.y))
# pygame.draw.rect(screen,(0,0,0),(self.x+15, self.y+38, 38, 38),1)
- def domove(self, grilla):
- if self.move == RIGHT:
- if self.x+62<1200:
- if grilla[(self.y+78)/50][(self.x+62)/50] == 0 and \
- grilla[(self.y+40)/50][(self.x+62)/50] == 0:
- self.x += 8
- self._frame = self._next_frames[self._frame]
- else:
- self.x += 8 - (self.x+62)%50 -1
- else:
- self.x = 1146
- elif self.move == LEFT:
- if self.x+8 > 0:
- if grilla[(self.y+78)/50][(self.x+8)/50] == 0 and \
- grilla[(self.y+40)/50][(self.x+8)/50] == 0:
- self.x -= 8
- self._frame = self._next_frames[self._frame]
- else:
- self.x += -8 + 50 - (self.x+8)%50 +1
- else:
- self.x = -16
- elif self.move == UP:
- if self.y+16 > 0:
- if grilla[(self.y+34)/50][(self.x+16)/50] == 0 and \
- grilla[(self.y+34)/50][(self.x+54)/50] == 0:
- self.y -= 6
- self._frame = self._next_frames[self._frame]
- else:
- self.y += -6 + 50 - (self.y+34)%50 +1
- else:
- self.y = -22
- elif self.move == DOWN:
- if self.y+84 < 900:
- if grilla[(self.y+84)/50][(self.x+16)/50] == 0 and \
- grilla[(self.y+84)/50][(self.x+54)/50] == 0:
- self.y += 6
- self._frame = self._next_frames[self._frame]
- else:
- self.y += 6 - (self.y+84)%50 -1
- else:
- self.y = 900-78
-
- def ai(self, grilla):
- if self.move == RIGHT:
- if self.x+62<1200:
- if grilla[(self.y+78)/50][(self.x+62)/50] == 0 and \
- grilla[(self.y+40)/50][(self.x+62)/50] == 0:
- self.x += 8
- self._frame = self._next_frames[self._frame]
- else:
- self.x += 8 - (self.x+62)%50 -1
- self.move = random.randint(1,4)
- self.startupFrame()
- else:
- self.x = 1146
- self.move = random.randint(1,4)
- self.startupFrame()
- elif self.move == LEFT:
- if self.x+8 > 0:
- if grilla[(self.y+78)/50][(self.x+8)/50] == 0 and \
- grilla[(self.y+40)/50][(self.x+8)/50] == 0:
- self.x -= 8
- self._frame = self._next_frames[self._frame]
- else:
- self.x += -8 + 50 - (self.x+8)%50 +1
- self.move = random.randint(1,4)
- self.startupFrame()
- else:
- self.x = -16
- self.move = random.randint(1,4)
- self.startupFrame()
- elif self.move == UP:
- if self.y+16 > 0:
- if grilla[(self.y+34)/50][(self.x+16)/50] == 0 and \
- grilla[(self.y+34)/50][(self.x+54)/50] == 0:
- self.y -= 6
- self._frame = self._next_frames[self._frame]
- else:
- self.y += -6 + 50 - (self.y+34)%50 +1
- self.move = random.randint(1,4)
- self.startupFrame()
- else:
- self.y = -22
- self.move = random.randint(1,4)
- self.startupFrame()
- elif self.move == DOWN:
- if self.y+84 < 900:
- if grilla[(self.y+84)/50][(self.x+16)/50] == 0 and \
- grilla[(self.y+84)/50][(self.x+54)/50] == 0:
- self.y += 6
- self._frame = self._next_frames[self._frame]
- else:
- self.y += 6 - (self.y+84)%50 -1
- self.move = random.randint(1,4)
- self.startupFrame()
- else:
- self.y = 900-78
- self.move = random.randint(1,4)
- self.startupFrame()
+ def do_move(self, grid):
+ pass
-
- def updateFrame(self, fr):
+ def update_frame(self, fr):
self._frame = fr
- def startupFrame(self):
- if self.move == UP:
- self._frame = 0
- elif self.move == DOWN:
- self._frame = 8
- elif self.move == LEFT:
- self._frame = 16
- elif self.move == RIGHT:
- self._frame = 24
-
-
- def updateMove(self,move):
+ def update_move(self,move):
self.move = move
-
-def dibujar_grilla(grilla,screen):
- for yi in range(18):
- for xi in range(24):
- if grilla[yi][xi] == 1:
- pygame.draw.rect(screen,(100,100,100),(xi*50,yi*50,50,50),2)
-
-
-
if __name__ == "__main__":
- pygame.display.init()
- screen = pygame.display.set_mode((1200,900))
- clock = pygame.time.Clock()
-
- images = []
- master_image = pygame.image.load(os.path.join('images', 'xoxi-ninios-sprite-01.png')).convert_alpha()
- master_width, master_height = master_image.get_size()
- w = int(master_width/4)
- h = int(master_height/4)
- for i in xrange(4):
- images.append(master_image.subsurface((i*w,0,w,h)))
- for i in xrange(4):
- images.append(master_image.subsurface((i*w,h,w,h)))
- for i in xrange(4):
- images.append(master_image.subsurface((i*w,2*h,w,h)))
- for i in xrange(4):
- images.append(master_image.subsurface((i*w,3*h,w,h)))
-
- bg_image = pygame.image.load(os.path.join('images', 'derechos-plaza-fondo.jpg')).convert_alpha()
-
- sps = [0, 1, 0, 2, 0, 1, 0, 3, 4, 5, 4, 6, 4, 5, 4, 7, 8, 9, 8, 10,
- 8, 9, 8, 11, 15, 13, 15, 14, 15, 13, 15, 12]
- nf = [1, 2, 3, 4, 5, 6, 7, 0, 9, 10, 11, 12, 13, 14, 15, 8, 17, 18, 19,
- 20, 21, 22, 23, 16, 25, 26, 27, 28, 29, 30, 31, 24]
- dxs = [5, 5, 5, 5, 5, -5, -5, -5, -5, -5]
- dys = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
-
- sp = AnimatedSprite(images, sps, nf, dxs, dys, 50, 400, 10)
- sp2 = AnimatedSprite(images, sps, nf, dxs, dys, 50, 400, 10)
-
- grilla = [[0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1],
- [0,0,1,1,1,1,1,1,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0],
- [0,0,1,1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,1,1,0,0,0,0],
- [0,0,1,1,1,1,1,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1],
- [0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,1,1],
- [0,0,0,0,0,0,0,0,0,0,1,0,0,1,1,0,0,1,1,1,0,0,1,1],
- [1,1,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1],
- [0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,0,0,1,1,1,0,0,1,1],
- [0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
- [0,0,1,1,1,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0],
- [0,0,1,0,0,0,0,1,1,1,1,0,0,1,1,1,1,0,0,1,1,0,0,0],
- [0,0,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0],
- [0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,1,1,1,0,0],
- [0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,1,1,1,1,1],
- [1,1,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,1,1,1,1],
- [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1],
- [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1],
- [1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1]]
-
-
- playing = True
-
- sp.updateMove(0)
- sp2.updateMove(random.randint(1,4))
-
- while playing:
- for event in pygame.event.get():
- if event.type == pygame.QUIT:
- playing = False
- elif event.type == pygame.MOUSEBUTTONDOWN:
- pass
- elif event.type == pygame.KEYDOWN:
- if event.key == pygame.K_UP:
- sp.updateMove(UP)
- sp.updateFrame(0)
- if event.key == pygame.K_DOWN:
- sp.updateMove(DOWN)
- sp.updateFrame(8)
- if event.key == pygame.K_LEFT:
- sp.updateMove(LEFT)
- sp.updateFrame(16)
- if event.key == pygame.K_RIGHT:
- sp.updateMove(RIGHT)
- sp.updateFrame(24)
- elif event.type == pygame.KEYUP:
- if event.key == pygame.K_UP:
- sp.updateMove(0)
- sp.updateFrame(0)
- if event.key == pygame.K_DOWN:
- sp.updateMove(0)
- sp.updateFrame(8)
- if event.key == pygame.K_LEFT:
- sp.updateMove(0)
- sp.updateFrame(16)
- if event.key == pygame.K_RIGHT:
- sp.updateMove(0)
- sp.updateFrame(24)
-
- sp.domove(grilla)
- sp2.ai(grilla)
-
- screen.blit(bg_image, (0, 0))
-
-# dibujar_grilla(grilla,screen)
-
- time_passed = clock.tick(20)
- sp.update(time_passed)
- sp2.update(time_passed)
- sp.render(screen)
- sp2.render(screen)
-
- pygame.display.flip()
+ print("You can't run this file.")
+ print("You have to import AnimatedSprite from another Python file.")