Apologies ahead of time if I'm not articulating my issue clearly enough but I'm having trouble pausing the logic of my program for half a second before resuming to allow a very basic explosion like effect.
Here is the block of code as I currently have it:
[source lang="python"]def eliminate(self, occupiedGrid): if len(self.matchedElements) >= 1: for x in range (0, len(self.matchedElements)): if self.matchedElements[x].type == 2: self.remainingBlocks -= 1 occupiedGrid[xToGrid(self.matchedElements[x].x)][yToGrid(self.matchedElements[x].y)].type = 3 self.draw(self.occupiedGrid) pygame.display.update() time.sleep(0.5) for x in range (0, len(self.matchedElements)): occupiedGrid[xToGrid(self.matchedElements[x].x)][yToGrid(self.matchedElements[x].y)] = 0[/source]
Unfortuantely, this isn't working as intended, as the graphics haven't quite caught up when the pause goes into effect, failing to display the explosion graphic (type 3) and instead skipping right past it. Because of the way the program is written, I can't leave this sequence of events to return to the main loop to artificially create a pause, as this is in the middle of data altering logic and all of the data at this point would be half-altered and create an issue. As a small example, this block of code appears in this sequence of events:
[source lang="python"]def clearObjects(self, occupiedGrid): self.matchedElements =  self.checkGrid(self.occupiedGrid) self.eliminate(self.occupiedGrid) self.checkLinked(self.occupiedGrid) self.draw(self.occupiedGrid) if self.remainingBlocks == 0: screen.fill((100, 100, 100)) self.showTextScreen('Cleared!', 'Press Escape to Quit or Any Key to Play Again.', 2) self.delay = True[/source]
For the record, I have tested the program by stopping it completely once the type is changed and it displays the graphic just fine. Without a pause, however, the graphic is not up long enough for the human eye to discern it was there in the first place as the program quickly moves to the part where it clears the graphic and creates an empty space in it's place.
Just wanted to post an update saying that I discovered the issue after getting some sleep. The delay was working just fine, but I had made the mistake of forgetting to call this lovely block of text before the pygame.display.update()
[source lang="python"]self.allSprites.clear (screen, self.background)self.inactiveSprites.clear (screen, self.background)self.allSprites.update()self.inactiveSprites.update()self.allSprites.draw(screen)self.inactiveSprites.draw(screen)[/source]
After giving it it's own function and a minor tweak to the code I got it to work as intended. Thank you to any one that might have been puzzling over this.