cocos 四角搓牌效果(shader版本)

游戏搓牌效果是一种很常见的扑克游戏的特效。先上效果图

unity poker effect

 

 

 

 特效动画用shader实现 只需要制作 扑克正面和背面图片就可以轻松实现动画

代码如下:

1 扑克背面shader

  void main () {
    vec4 o = vec4(1, 1, 1, 1);

    #if USE_TEXTURE
      CCTexture(texture, v_uv0, o);
    #endif

    
    bool hidden = false;
    //隐藏右上
    if(type == 1)
    {
      if(v_uv0.x+v_uv0.y < 1.0 - val)
      {
        hidden  = true;
      }
    }
    //隐藏左上
    if(type == 2)
    {
      if((v_uv0.x +v_uv0.y) > 1.0&&(v_uv0.y + val) < v_uv0.x)
      {
        hidden  = true;
      }
      if((v_uv0.x +v_uv0.y) < 1.0&&(v_uv0.y + val) < v_uv0.x)
      {
          hidden  = true;
      }
    }
    //隐藏左下
    if(type == 3)
    {
      if((v_uv0.x +v_uv0.y) < 1.0&&(v_uv0.x + val)< v_uv0.y)
      {
        hidden  = true;
      }
      if((v_uv0.x +v_uv0.y) > 1.0&&(v_uv0.x + val) < v_uv0.y)
      {
          hidden  = true;
      }
    }
    //隐藏右下
    if(type == 4)
    {
      if( v_uv0.x+v_uv0.y > 1.0 + val) 
      {
        hidden  = true;
      }
    }
    

    //剔除隐藏
    if(hidden)
    {
       o.a = 0.0;
    }
    
    o *= v_color;

    ALPHA_TEST(o);



    #if USE_BGRA
      gl_FragColor = o.bgra;
    #else
      gl_FragColor = o.rgba;
    #endif
  }

2.扑克正面shader

  void main () {
    vec4 o = vec4(1, 1, 1, 1);
    vec4 shadow_color = vec4(0.7,0.7,0.7,1.0);
    #if USE_TEXTURE
      CCTexture(texture, v_uv0, o);
    #endif

    
    bool hidden = false;
    bool shadow =  false;
    //显示右下
    if(type == 1)
    {
     if( v_uv0.x+v_uv0.y > 1.0 - val) 
      {
        hidden  = true;
      }
    }
    //显示左下
    if(type == 2)
    {
      if((v_uv0.x +v_uv0.y) > 1.0&&(v_uv0.y + val) > v_uv0.x)
      {
        hidden  = true;
      }
      if((v_uv0.x +v_uv0.y) < 1.0&&(v_uv0.y + val) > v_uv0.x)
      {
        hidden  = true;
      }
    }
    //显示右上
    if(type == 3)
    {
      if((v_uv0.x +v_uv0.y) < 1.0&&(v_uv0.x + val) > v_uv0.y)
      {
        hidden  = true;
      }
      if((v_uv0.x +v_uv0.y) > 1.0&&(v_uv0.x + val) > v_uv0.y)
      {
        hidden  = true;
      }
        
      if((v_uv0.x +v_uv0.y) < 1.0&&(v_uv0.x + val) > v_uv0.y - 0.02)
      {
          shadow = true;
      }
      if((v_uv0.x +v_uv0.y) > 1.0&&(v_uv0.x + val) > v_uv0.y - 0.02)
      {
          shadow  = true;
      }
    }
    //显示左上
    if(type == 4)
    {
      if(v_uv0.x + v_uv0.y < 1.0 + val)
      {
        hidden  = true;
      }
    }
    

    //剔除隐藏像素
    if(hidden)
    {
       o.a = 0.0;
    }
    //增加阴影
    if(shadow)
    {
      // o *= shadow_color;
    }

    ALPHA_TEST(o);



    #if USE_BGRA
      gl_FragColor = o.bgra;
    #else
      gl_FragColor = o.rgba;
    #endif
  }

商城源码地址:扑克搓牌特效 | Cocos Store

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实现效果可以使用Cocos Creator的js shader来完成。首先,我们需要创建一个自定义的shader,将其应用到的渲染组件上。可以通过编辑顶点和片段着色器来实现效果。 首先,定义一个变量来控制的进度。可以通过在脚本中设置一个初始值,然后在每一帧更新该值,以模拟手指滑动效果。 然后,在顶点着色器中,对的每个顶点进行偏移操作。根据的进度值,调整顶点的位置,使之呈现出的形态。可以使用简单的插值方法(如线性插值),计算出每个顶点新的位置。 接下来,在片段着色器中,根据顶点的位置信息,设置每个像素的颜色值。可以使用纹理坐标来采样的纹理图片,根据的进度值,调整采样的坐标,以实现效果。 最后,在每一帧更新的进度值,并将其传递给shader,更新的渲染效果。可以通过设置shader的uniform变量,将进度值传递给shader。 总结起来,使用Cocos Creator的js shader实现效果的步骤如下: 1. 创建自定义的shader,定义的进度变量。 2. 在顶点着色器中根据进度值调整顶点位置。 3. 在片段着色器中根据进度值调整纹理采样坐标。 4. 在每一帧更新进度值,并将其传递给shader。 5. 应用shader的渲染组件上,实现效果。 希望这个简单的解答对你有帮助!如果你还有其他问题,请随时提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

leehong0704

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值