本文整理汇总了Python中ball.Ball.resetUpdateDelay方法的典型用法代码示例。如果您正苦于以下问题:Python Ball.resetUpdateDelay方法的具体用法?Python Ball.resetUpdateDelay怎么用?Python Ball.resetUpdateDelay使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ball.Ball
的用法示例。
在下文中一共展示了Ball.resetUpdateDelay方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: GameStateImpl
# 需要导入模块: from ball import Ball [as 别名]
# 或者: from ball.Ball import resetUpdateDelay [as 别名]
#.........这里部分代码省略.........
# Test collisions
for geom in row._collGeoms:
if geom:
# NOTE: We need to test for collision with a gap first, then check for the row, because the ball can possibly be in contact with both the row and gap at the same time. That way, the test will indicate when the ball is in contact with the gap but not the row at the same time.
if geom.isColliding(self.ball._collGeoms[0], self.cell_size):
if geom._type == Row.COLLISION_TYPE_GAP:
#print "\t\tDEBUG gap collision! ball geom={} row geom={}".format(row._collGeoms[0], geom)
if self.ball.getGameState() != BallGameState.FREEFALL:
self.ball.changeGameState(BallGameState.FREEFALL)
#print "Changing ball game state to FREEFALL"
if self.ball._lastRowScored != i:
self.ball._lastRowScored = i
self.vital_stats.scoredFlag = True # This flag could also be handled as a message from the ball or row or whatever, to the game logic (in a better designed game), to trigger the game logic's score handler
self._eventQueue.Enqueue( { 'topic': 'PlaySfx'
, 'payload': { 'action': 'call_function'
, 'function_name': 'playSfx'
, 'params': 'nameId="gap"'
}
}
)
elif geom._type == Row.COLLISION_TYPE_ROW:
#print "\t\tDEBUG row collision! ball geom={} row geom={}".format(row._collGeoms[0], geom)
# Compute the collision normal (from the center of one AABB to the center of the other. Note: this is what a true contract resolution system should be doing)
# Multiply by 0.5 to force Python to convert the numbers from int to float
ballCenter = [ self.ball._position[0] + self.ball._size[0] * 0.5, self.ball._position[1] + self.ball._size[1] * 0.5 ]
geomCenter = [ geom._position[0] + geom._size[0] * 0.5, geom._position[1] + geom._size[1] * 0.5 ]
# This is a straight-up vector subtraction. No vector class needed :-) We're taking madd shortcuts
contactNormal = [ ballCenter[0] - geomCenter[0], ballCenter[1] - geomCenter[1] ]
# At this point, we know we're colliding already, so we can calculate the penetration depths along each AABB axis
penDepth = [ self.ball._collGeoms[0]._maxPt[0] - geom._minPt[0], self.ball._collGeoms[0]._maxPt[1] - geom._minPt[1] ]
correctionVector = [0, 0]
if abs(penDepth[0]) < abs(penDepth[1]):
correctionVector[0] = -penDepth[0] / self.cell_size[0]
else:
correctionVector[1] = -penDepth[1] / self.cell_size[1]
self.ball.setPosition( self.ball._position[0] + correctionVector[0], self.ball._position[1] + correctionVector[1] )
self.ball._computeCollisionGeometry(self.cell_size) # TODO: the ball should recompute its geometry on a setPosition() call. Perhaps a fn override is needed (right now, setPosition is part of base class)
self.ball.resetUpdateDelay()
# Note: The following draw statements will be invisible unless you also disable screen filling in the draw() fn. But then, the screen won't clear, and you'll have a trail
#pygame.draw.circle(screen, (128,0,0), (int(ballCenter[0] * cell_size[0]), int(ballCenter[1] * cell_size[1])), 16, 2)
#pygame.draw.circle(screen, (128,0,128), (int(geomCenter[0] * cell_size[0]), int(geomCenter[1] * cell_size[1])), 16, 2)
# Change gamestate of ball
if self.ball.getGameState() != BallGameState.ON_ROW and self.ball._lastRowTouched != i:
self.ball.changeGameState(BallGameState.ON_ROW)
self.ball._lastRowTouched = i
#print "Changing ball game state to ON_ROW"
rowCollisionFound = True
break # break out of for loop if we have a collision
if rowCollisionFound:
# If we found a collision against any row, we can stop testing for any collisions, because we're done. Reset the flag and _exit all for loops_
rowCollisionFound = False
break
#print # blank line
def updateScore(self):
# If ball state is FREEFALL at this point, then we can register a score
if self.vital_stats.scoredFlag:
self.vital_stats.score += self.vital_stats.GAP_SCORE # GAP_SCORE can increase as the difficulty level increases
self.vital_stats.scoredFlag = False
#print "Jyeaw! Score={}".format(self.vital_stats.score)
self.mm.setMessage("+{}".format(self.vital_stats.GAP_SCORE), [ self.ball._position[0], self.ball._position[1] - self.ball._size[1] ] )
def displayMessages(self):
self.mm.draw(self.game_viewport, self.cell_size)
def displayGameStats(self):
# Janky hardcoding here... Just trying to meet the game submission deadline
self.displayMsgScore.changeText("Score: {}".format(self.vital_stats.score))
textSurfaceScore = self.displayMsgScore.getTextSurface(self.mm._font)
self.surface_bg.blit(textSurfaceScore, (self.displayMsgScore._position[0] * self.cell_size[0], self.displayMsgScore._position[1] * self.cell_size[1] ))
self.displayMsgTries.changeText("Tries: {}".format(self.vital_stats.tries))
textSurfaceTries = self.displayMsgTries.getTextSurface(self.mm._font)
self.surface_bg.blit(textSurfaceTries, (self.displayMsgTries._position[0] * self.cell_size[0], self.displayMsgTries._position[1] * self.cell_size[1] ))
self.displayMsgLevel.changeText("Level: {}".format(self.vital_stats.level))
textSurfaceLevel = self.displayMsgLevel.getTextSurface(self.mm._font)
self.surface_bg.blit(textSurfaceLevel, (self.displayMsgLevel._position[0] * self.cell_size[0], self.displayMsgLevel._position[1] * self.cell_size[1] ))
if self.vital_stats._gameState == "Crushed":
textSurfaceCrushed = self.displayMsgCrushed.getTextSurface(self.mm._font)
self.surface_bg.blit(textSurfaceCrushed, (self.displayMsgCrushed._position[0] * self.cell_size[0], self.displayMsgCrushed._position[1] * self.cell_size[1] ))
if self.vital_stats._gameState == "GameOver":
textSurfaceGameOver = self.displayMsgGameOver.getTextSurface(self.mm._font)
self.surface_bg.blit(textSurfaceGameOver, (self.displayMsgGameOver._position[0] * self.cell_size[0], self.displayMsgGameOver._position[1] * self.cell_size[1] ))