def clear(self, surface, bg):
# make heavily used symbols local, avoid python performance hit
split_rects_add = _split_rects_add
spritelist = self._spritelist
spritelist_len = len(spritelist)
changed = self.lostsprites
changed_append = changed.append
for sprite in spritelist:
if not sprite.last_state_changed():
continue
state = sprite.last_state
changed_append(state.rect)
i = sprite.zindex
while i < spritelist_len:
s2 = spritelist[i]
i += 1
if s2.dirty or not s2.visible:
continue
r = state.rect.clip(s2.rect)
if r:
r2 = Rect((r.left - s2.rect.left,
r.top - s2.rect.top),
r.size)
s2.damaged_areas.append((r, r2))
s2.damaged = True
# for in spritelist
changed.sort(_cmp_area)
split_rects = []
for r in changed:
split_rects_add(split_rects, r)
surface_blit = surface.blit
dirty = []
dirty_append = dirty.append
for r in split_rects:
r = surface_blit(bg, r, r)
dirty_append(r)
for s in spritelist:
if s.dirty or s.damaged or not s.visible:
continue
state = s.last_state
r2 = r.clip(state.rect)
if r2:
r3 = Rect(r2.left - s.rect.left, r2.top - s.rect.top,
r2.width, r2.height)
surface_blit(s.image, r2, r3)
# for in spritelist
# for in split_rects
self.lostsprites = dirty
# clear()
评论列表
文章目录