Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Cocos2d开发iPhone游戏:如何在实体被击中时产生冷光效果?_Iphone_Ios_Animation_Cocos2d Iphone_Particles - Fatal编程技术网

使用Cocos2d开发iPhone游戏:如何在实体被击中时产生冷光效果?

使用Cocos2d开发iPhone游戏:如何在实体被击中时产生冷光效果?,iphone,ios,animation,cocos2d-iphone,particles,Iphone,Ios,Animation,Cocos2d Iphone,Particles,考虑到帖子(例如或),我仍然无法得到我想要的 我正在制作一款射击游戏,我想在敌人被击中时点亮他们(以及玩家) 如果我运行以下命令,我的雪碧不会变白。这是正确的方向吗 -(void) gothitAnimation { ccColor3B originalColor = self.color; id delay = [CCDelayTime actionWithDuration:0.4f]; [self runAction:[CCSequence actions: [CCTintTo action

考虑到帖子(例如或),我仍然无法得到我想要的

我正在制作一款射击游戏,我想在敌人被击中时点亮他们(以及玩家)

如果我运行以下命令,我的雪碧不会变白。这是正确的方向吗

-(void) gothitAnimation
{
ccColor3B originalColor = self.color;
id delay = [CCDelayTime actionWithDuration:0.4f];
[self runAction:[CCSequence actions: [CCTintTo actionWithDuration:0.01f red:255 green:240 blue:240], delay, [CCTintTo actionWithDuration:0.01f red:originalColor.r green:originalColor.g blue:originalColor.b] ,  nil]];
}
我试过只运行CCTintTo action,它只适用于不同于白色的颜色

我找到了Arodius的游戏演示,在我看来,玩家飞船在被击中或处于较低能量水平时,会多次设置为不可见和可见。敌人被击中时也会得到一个轻的效果


你知道这是如何实现的吗?开发人员是否使用CCT来执行操作或其他操作?我知道他在爆炸中使用了ParticleEffects。

精灵的默认色调是白色。因此,您不能使用着色将雪碧着色为白色或使雪碧看起来更亮

通过每隔一段时间打开和关闭visible属性,可以实现闪烁。一种方法是使用CCBlink动作


最好的办法是使用粒子效果。只有在使用cocos2d 2.0并为此特定效果编写片段着色器时,才能实现真正的照明效果。

精灵的默认着色颜色为白色。因此,您不能使用着色将雪碧着色为白色或使雪碧看起来更亮

通过每隔一段时间打开和关闭visible属性,可以实现闪烁。一种方法是使用CCBlink动作


最好的办法是使用粒子效果。只有使用cocos2d 2.0并为此特定效果编写片段着色器,才能实现真正的照明效果。

我最近也需要这样做,不想处理像素着色器。我想我可以搞乱纹理是如何融入场景的,从而从中获得某种白色闪光

因此,我通过反复将sprite的目标glBlend函数从GL_ONE_减去SRC_ALPHA更改为GL_ONE,然后再更改回来,找到了一个合理的灯光闪烁效果

以下是我的切换方法:

-(void)toggleBlendFlash {
    if (sprite_) {
        ccBlendFunc blendFunc = sprite_.blendFunc;
        if (blendFunc.dst == GL_ONE_MINUS_SRC_ALPHA) {
            blendFunc.dst = GL_ONE; //flash white
        } else {
            blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA; //default
        }
        sprite_.blendFunc = blendFunc;
    }
}
以下是我的闪烁顺序:

CCSequence *sequence =
        [CCSequence actions:
         [CCCallFunc actionWithTarget:targetEnemy selector:@selector(toggleBlendFlash)],
         [CCDelayTime actionWithDuration:0.3],
         [CCCallFunc actionWithTarget:targetEnemy selector:@selector(toggleBlendFlash)],
         [CCDelayTime actionWithDuration:0.2], nil ];
它可能不适合你的情况,但试试看


编辑1:此外,请查看这些链接以获取更多信息/资源:

编辑2:


当然,我刚刚意识到,如果您的精灵在不同的CCTexture2D对象之间设置动画(例如,您每帧有一个文件),那么它会为每帧重置blendFunc,这意味着您必须为CCSprite或CCAnimate创建一个类别或子类,以重新应用自定义blendFunc。。。因此,我想解决这个问题的速度并不像我原来想的那么快。

我最近也需要这样做,不想处理像素着色器。我想我可以搞乱纹理是如何融入场景的,从而从中获得某种白色闪光

因此,我通过反复将sprite的目标glBlend函数从GL_ONE_减去SRC_ALPHA更改为GL_ONE,然后再更改回来,找到了一个合理的灯光闪烁效果

以下是我的切换方法:

-(void)toggleBlendFlash {
    if (sprite_) {
        ccBlendFunc blendFunc = sprite_.blendFunc;
        if (blendFunc.dst == GL_ONE_MINUS_SRC_ALPHA) {
            blendFunc.dst = GL_ONE; //flash white
        } else {
            blendFunc.dst = GL_ONE_MINUS_SRC_ALPHA; //default
        }
        sprite_.blendFunc = blendFunc;
    }
}
以下是我的闪烁顺序:

CCSequence *sequence =
        [CCSequence actions:
         [CCCallFunc actionWithTarget:targetEnemy selector:@selector(toggleBlendFlash)],
         [CCDelayTime actionWithDuration:0.3],
         [CCCallFunc actionWithTarget:targetEnemy selector:@selector(toggleBlendFlash)],
         [CCDelayTime actionWithDuration:0.2], nil ];
它可能不适合你的情况,但试试看


编辑1:此外,请查看这些链接以获取更多信息/资源:

编辑2:


当然,我刚刚意识到,如果您的精灵在不同的CCTexture2D对象之间设置动画(例如,您每帧有一个文件),那么它会为每帧重置blendFunc,这意味着您必须为CCSprite或CCAnimate创建一个类别或子类,以重新应用自定义blendFunc。。。因此,我想这并不像我最初认为的那样快速解决问题。

很酷,谢谢Steffen!谢天谢地,我开始使用2.0:)酷,谢谢Steffen!谢天谢地,我开始使用2.0时,我将对此进行研究:)