Pygame中使用blit时避免覆盖Surface的无效清除问题
解决Pygame中仅清除指定Surface内容的问题
问题分析
你需要在将path_surface绘制到movement_surface前清空它,但之前的方法会覆盖movement_surface所有内容,尝试用clear_surface重置path_surface却无效。
解决方案
无需额外创建clear_surface,直接对path_surface填充全透明颜色即可清空其内容,代码修改如下:
def undraw_movement(self): # 用全透明RGBA颜色清空path_surface self.path_surface.fill((0, 0, 0, 0)) # 将清空后的path_surface绘制到movement_surface,覆盖之前的路径痕迹 self.movement_surface.blit(self.path_surface, (0, 0))
原代码无效原因
你创建的clear_surface填充了全透明色((0,0,0,0)),将其blit到path_surface时不会改变任何像素——透明像素与原像素混合后结果不变。同时设置alpha再取消的操作完全多余,对全透明表面没有实际作用。
补充说明
如果path_surface是带SRCALPHA标记创建的(支持透明的表面),fill((0,0,0,0))会直接将所有像素重置为全透明,完全清空表面内容。之后再绘制到movement_surface,只会覆盖path_surface对应的区域,不会影响movement_surface上的其他内容。
内容的提问来源于stack exchange,提问作者Jacob Simerly
相关产品推荐
相关产品推荐

