菜鸟教程小白 发表于 2022-12-12 19:29:57

ios - 我可以在 CCAnimation 中使用 blendFunc 吗?


                                            <p><p>最近我需要通过在 <code>CCSprite</code> 中使用 <code>blendFunc</code> 来改善我的应用程序的视觉效果。但我不知道如何在 <code>CCAnimation</code> 中使用它。这是我的实现:</p>

<pre><code>CCSprite * test=;
test.position=CGPointMake(100, 200);
test.scale=3;
test.blendFunc=(ccBlendFunc){GL_SRC_ALPHA, GL_ONE};//it&#39;s not working
;

self.textureArray=[init];

for(int x=0;x&lt;=18;x++){      
    rect:CGRectMake(0, 0, 91, 61)]];      
}

CCAnimation * animation=;

];
</code></pre>

<p>但是<code>blendFuc</code>不适用于这种情况,只有<code>CCSprite</code>可以设置<code>blendFunc</code>。如果我需要动画中的所有帧都具有 blendFunc 的效果,我该怎么办?</p>

<p>顺便说一句,我尝试使用计时器手动为帧设置动画:</p>

<pre><code>self.skllTimer=;

-(void)animating:(NSTimer *)t{

    CCSprite * tesx=;//f is a increasing value   
    CCSprite * ok =;
    ok.blendFunc=(ccBlendFunc){GL_SRC_ALPHA, GL_ONE};
    ;
    ;

}
</code></pre>

<p>我通过这种方式得到了我想要的,但是效率不高,我认为必须有更好的方法来做到这一点。</p>

<p>谢谢。</p>

<p><strong>更新</strong></p>

<p>我发现这是由于</p>

<pre><code>-(void) updateBlendFunc
{
    NSAssert( ! _batchNode, @&#34;CCSprite: updateBlendFunc doesn&#39;t work when the sprite is rendered using a CCSpriteBatchNode&#34;);

    // it is possible to have an untextured sprite
    if( !_texture || ! ) {
      _blendFunc.src = GL_SRC_ALPHA;
      _blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA;
      ;
    } else {
      _blendFunc.src = CC_BLEND_SRC;//here
      _blendFunc.dst = CC_BLEND_DST;//and here
      ;
    }


}
</code></pre>

<p>每次CCSprite更新它的displayFrame,这个函数都会改变它自己的_blendFunc。我不知道为什么会这样,但是在我删除以下两行之后:</p>

<pre><code>//_blendFunc.src = CC_BLEND_SRC;//here
//_blendFunc.dst = CC_BLEND_DST;//and here
</code></pre>

<p>问题解决了。我可以这样修复cocos2d吗?我希望我的更改不会引起错误。
请有人告诉我一个确切的答案。非常感谢。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您的第一个代码片段将不起作用,因为您创建的 Sprite 没有任何纹理,如果没有关联的纹理,CCSprite 不会更新 blendFunc。你应该做的是这个。</p>

<blockquote>
<pre><code>// add sprite frames to the sprite frame cache
CCSprite *sprite = ];
sprite.blendFunc = newBlendFunc;
;
</code></pre>
</blockquote>

<p>由于动画帧使用相同的纹理,并且我们在将纹理与其关联后在 Sprite 上设置所需的纹理,一旦动画运行,它将被正确设置和更新。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 我可以在 CCAnimation 中使用 blendFunc 吗?,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/22009687/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/22009687/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 我可以在 CCAnimation 中使用 blendFunc 吗?