Jump to content

  • Log In with Google      Sign In   
  • Create Account

We need your help!

We need 7 developers from Canada and 18 more from Australia to help us complete a research survey.

Support our site by taking a quick sponsored survey and win a chance at a $50 Amazon gift card. Click here to get started!

Pausing Python (or causing a delay)

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 PaladinJohn   Members   -  Reputation: 130


Posted 09 July 2012 - 07:36 PM

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.


#2 PaladinJohn   Members   -  Reputation: 130


Posted 10 July 2012 - 02:14 PM

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.

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.