diff options
author | slm <jtmengel@gmail.com> | 2010-07-20 20:29:13 (GMT) |
---|---|---|
committer | slm <jtmengel@gmail.com> | 2010-07-20 20:29:13 (GMT) |
commit | 2df5376c9fcf9954affa2d0cb2db7a91a4ffbb81 (patch) | |
tree | 7b710dddf8bf0cbb5305465b10b8bd3d03175227 | |
parent | 8055c1f3479c83d3e1c6642651755fb346d75cd1 (diff) |
Made additions to GameEngine.py to expect draw.dirtyList[] objects to be returned and appended to a master __dirtyList in GameEngine, which will then pygame.display.update(__dirtyList) which should improve framerates with numerous static images on screen at the same time.
-rw-r--r-- | MAFH2/BattleEngine.py | 29 | ||||
-rw-r--r-- | MAFH2/Dungeon.py | 2 | ||||
-rw-r--r-- | MAFH2/Enemy.py | 6 | ||||
-rwxr-xr-x | MAFH2/drawableobject/DrawableObject.py | 11 | ||||
-rwxr-xr-x | MAFH2/drawableobject/DynamicDrawableObject.py | 4 | ||||
-rw-r--r-- | MAFH2/fortuneengine/GameEngine.py | 9 |
6 files changed, 38 insertions, 23 deletions
diff --git a/MAFH2/BattleEngine.py b/MAFH2/BattleEngine.py index 8a0da13..98e9b0a 100644 --- a/MAFH2/BattleEngine.py +++ b/MAFH2/BattleEngine.py @@ -2,9 +2,10 @@ from fortuneengine.GameEngineElement import GameEngineElement from Enemy import get_enemy from BattleMenu import BattleMenuHolder from MagicMenu import MagicMenuHolder -from AnimatedSprite import Spritesheet +from drawableobject.Spritesheet import Spritesheet from Items import get_item -from drawableobject import DrawableObject, DynamicDrawableObject, Spritesheet +from drawableobject.DrawableObject import DrawableObject +from drawableobject.DynamicDrawableObject import DynamicDrawableObject import pygame from constants import CHAR_PATH, HUD_PATH @@ -14,6 +15,7 @@ import random PLAYER_WAIT = 1 PLAYER_MULT = 2 +_dirtyList=[] class BattleEngine(GameEngineElement): def __init__(self, dgn): @@ -372,24 +374,31 @@ class BattleEngine(GameEngineElement): # \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ # def draw(self,screen,time_delta): + _dirtyList=[] x=250 y=150 i = 1 - + tick_time = pygame.time.get_ticks() # Draw Enemy and Item Selection for enemy in self.enemy_list: - if enemy.alive: - if self.active_target == i: - screen.blit(self.__images['arrow_select'], (x+(i*200),y-25)) - enemy.sprite.update( tick_time ) - screen.blit(enemy.sprite.image, (x+(i*200),y)) - i = i+1 + if enemy.alive and self.active_target == i: +# screen.blit(self.__images['arrow_select'], (x+(i*200),y-25)) #1 orig + _dirtyList.append(self.__images['arrow_select'].get_rect().move((x+(i*200),y-25))) #1 new + enemy.sprite.updateAnim( tick_time ) #2 orig +# screen.blit(enemy.sprite.image, (x+(i*200),y) ) #3 orig + _dirtyList.append(enemy.sprite.image.get_rect().move( (x+(i*200),y) )) #3 new + i = i+1 # Draw Hud profile = self.game_engine.get_object('profile') # Player Health health = 10 - profile.hero.healthLevel() - screen.blit(self.__images['hp'][health], (25,25)) +# screen.blit(self.__images['hp'][health], (25,25)) #4 orig + _dirtyList.append( self.__images['hp'][health].get_rect().move((25,25)) ) #4 new + enemy.sprite.updateAnim( tick_time ) #2 new + #what the hell does ^^ do?? +# pygame.display.update(_dirtyList) #5 new + return _dirtyList diff --git a/MAFH2/Dungeon.py b/MAFH2/Dungeon.py index 620ad96..a246f5c 100644 --- a/MAFH2/Dungeon.py +++ b/MAFH2/Dungeon.py @@ -295,7 +295,7 @@ class Dungeon(GameEngineElement): # Draw Items img_list = [] - for i in range( dir, (dir + 4) ):p + for i in range( dir, (dir + 4) ): #imod for room rotation imod = i % 4 diff --git a/MAFH2/Enemy.py b/MAFH2/Enemy.py index 21c3950..8250800 100644 --- a/MAFH2/Enemy.py +++ b/MAFH2/Enemy.py @@ -1,10 +1,12 @@ from gettext import gettext as _ from constants import CHAR_PATH +#from drawableobject.DrawableObject import DrawableObject +from drawableobject.DynamicDrawableObject import DynamicDrawableObject class InvalidEnemyException(Exception): pass import pygame from Actor import Actor -from AnimatedSprite import Spritesheet, AnimatedSprite +from drawableobject.Spritesheet import Spritesheet ENEMY = { '1':{'name':_('Wizard Adept'),'img':"anim_test.gif",'hp':20,'att':2,'weak':'special', 'sprite':(3,2, 156,166)}, #concept_wizard.gif , (1,1, 181,365) '2':{'name':_('Goblin'),'img':"dog~.gif",'hp':40,'att':3,'weak':'fire','sprite':(2,1, 58/2,39)}, #concept_goblin.gif , (1,1, 217,317) @@ -30,7 +32,7 @@ class Enemy(Actor): self.inv_Ar = [] self.attacks_Ar = [] col,row,width,height = ENEMY[id]['sprite'] - self.sprite=AnimatedSprite(Spritesheet(CHAR_PATH + ENEMY[id]['img']).img_extract(col,row,width,height)) + self.sprite = DynamicDrawableObject( Spritesheet(CHAR_PATH + ENEMY[id]['img'] ).img_extract(col,row,width,height) , "") self.place=0 self.alive = True diff --git a/MAFH2/drawableobject/DrawableObject.py b/MAFH2/drawableobject/DrawableObject.py index d3f0f0f..d4054af 100755 --- a/MAFH2/drawableobject/DrawableObject.py +++ b/MAFH2/drawableobject/DrawableObject.py @@ -2,7 +2,7 @@ import pygame class DrawableObject(pygame.sprite.Sprite):
- def __init__(self,images,textfileName,fps = 10, x = 0, y = 0, xVelocity = 0, yVelocity = 0):
+ def __init__(self,images,textfileName,fps = 2, x = 0, y = 0, xVelocity = 0, yVelocity = 0):
pygame.sprite.Sprite.__init__(self)
cnt = 0
@@ -11,9 +11,10 @@ class DrawableObject(pygame.sprite.Sprite): self._images = []
self._origImages = []
while cnt < len(images):
- self._images.append(images[cnt][0].convert())
- self._origImages.append(images[cnt][0].convert())
+ self._images.append(images[cnt].convert())
+ self._origImages.append(images[cnt].convert())
cnt += 1
+ self.image = self._images[0] self._start = pygame.time.get_ticks()
self._delay = 1000 / fps
self._last_update = 0
@@ -132,14 +133,14 @@ class DrawableObject(pygame.sprite.Sprite): def calcColorKey(self):
- myColorKey = images[0][0].get_at((0,0))
+ myColorKey = images[0].get_at((0,0))
setColorKey(myColorKey)
def setColorKey(self, aColor):
cnt = 0
while cnt < len(self._images):
- self._images[cnt][0].set_colorkey(aColor)
+ self._images[cnt].set_colorkey(aColor)
cnt += 1
def update(self, t):
diff --git a/MAFH2/drawableobject/DynamicDrawableObject.py b/MAFH2/drawableobject/DynamicDrawableObject.py index 3b3722d..aaf518b 100755 --- a/MAFH2/drawableobject/DynamicDrawableObject.py +++ b/MAFH2/drawableobject/DynamicDrawableObject.py @@ -3,7 +3,7 @@ from DrawableObject import DrawableObject class DynamicDrawableObject(DrawableObject, pygame.sprite.Sprite):
- def __init__(self,images,textfileName,fps = 10, x = 0, y = 0, xVelocity = 0, yVelocity = 0):
+ def __init__(self,images,textfileName,fps = 2, x = 0, y = 0, xVelocity = 0, yVelocity = 0):
DrawableObject.__init__(self, images, textfileName, fps, x, y, xVelocity, yVelocity)
@@ -11,7 +11,7 @@ class DynamicDrawableObject(DrawableObject, pygame.sprite.Sprite): self._images.extend(images)
- def update(self, t):
+ def updateAnim(self, t):
timePassed = t + self._last_update
if timePassed > self._delay:
diff --git a/MAFH2/fortuneengine/GameEngine.py b/MAFH2/fortuneengine/GameEngine.py index 2e373db..25ce0c3 100644 --- a/MAFH2/fortuneengine/GameEngine.py +++ b/MAFH2/fortuneengine/GameEngine.py @@ -62,6 +62,7 @@ class GameEngine(object): self.__event_cb = [] self.__draw_lst = [] self.__object_hold = {} + self.__dirtyList=[] # Game Timers self.__active_event_timers = [] @@ -200,9 +201,10 @@ class GameEngine(object): pygame.display.flip() else: + __dirtyList=[] for fnc in self.__draw_lst: start = time() - fnc(screen, tick_time) + __dirtyList.append(fnc(screen, tick_time)) self.__draw_time[str(fnc)] += time() - start self.__draw_calls[str(fnc)] += 1 @@ -210,9 +212,10 @@ class GameEngine(object): if self.__showfps: text = self.__font.render('FPS: %d' % self.clock.get_fps(), False, (255, 255, 255), (159, 182, 205)) - screen.blit(text, (0, 0)) +# screen.blit(text, (0, 0)) + __dirtyList.append(text.get_rect()) - pygame.display.flip() + pygame.display.update(__dirtyList) def _event_loop(self): """ |