【问题标题】:creating particles by image masking通过图像遮罩创建粒子
【发布时间】:2011-02-11 23:57:44
【问题描述】:

我正在尝试使用 CGContextClipToMask() 函数创建不同颜色的粒子。出于某种原因,我的第一个粒子似乎通过其更新完全显示和动画,但根本没有其他粒子显示。这是一段sn-p代码:

while(i < mNextParticleIndex)
    {
        Particle* p = &mParticles[i];

        CGRect drawRect = CGRectMake(
            p->mPos.x,
            p->mPos.y,
            p->mSize,
            p->mSize);

        // try image masking
        CGContextClipToMask(context, drawRect, [mImage CGImage]);
        CGContextSetBlendMode(context, kCGBlendModeNormal);
        CGContextSetFillColor(context, CGColorGetComponents([UIColor 
            colorWithRed:p->mColor.r green:p->mColor.g blue:p->mColor.b alpha:p->mColor.a].CGColor));
        CGContextFillRect(context, drawRect);

当我注释掉 ClipToMask 调用时,我看到我所有的各种填充矩形动画(即一堆以粒子效果方式填充的正方形。但是,通过调用,我只看到第一个。有什么明显的我吗?我失踪了?

【问题讨论】:

    标签: ios image quartz-graphics masking particles


    【解决方案1】:

    根据 Quartz 文档: "剪裁区域是图形状态的一部分,要将剪裁区域恢复到之前的状态,可以在剪裁前保存图形状态,在剪裁完成后恢复图形状态。"

    因此,我在 while 循环中围绕我的代码插入了保存和恢复调用:

        CGContextSaveGState(context);
        CGContextClipToMask(context, drawRect, [mImage CGImage]);
        CGContextSetBlendMode(context, kCGBlendModeNormal);
        CGContextSetFillColor(context, CGColorGetComponents([UIColor 
            colorWithRed:p->mColor.r green:p->mColor.g blue:p->mColor.b alpha:p->mColor.a].CGColor));
        CGContextFillRect(context, drawRect);
        CGContextRestoreGState(context);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-07
      • 2014-05-23
      • 2022-10-23
      • 2018-05-29
      • 2016-06-09
      • 2016-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多