• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >游戏开发 > 请教,ClippingNode遮罩在windows下运行正确,手机上没有遮挡效果

请教,ClippingNode遮罩在windows下运行正确,手机上没有遮挡效果

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-05

佚名通过本文主要向大家介绍了clippingnode,cc.clippingnode,cocos clippingnode,遮罩,遮罩动画等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题: 请教,ClippingNode遮罩在windows下运行正确,手机上没有遮挡效果
描述:

本帖最后由 cocos_01 于 2016-03-04 21:24:29 编辑

源代码如下,使用cocos3.2版本。哪位大神知道原因说下,多谢。。总的效果是一个圆球,水涨上升。采用圆缺逐渐减少遮住圆上半部分来达到效果。有两个动画里面一个是水面动画,一个是水下动画。水下动画覆盖整个圆。水面以上部分用自画圆缺遮住

if (fPercent >= 0)
{
Widget* pWidget = GetRootWidget();
Widget* pWidgetPetProg = Helper::seekWidgetByName(pWidget,"Image_PetProgress");
ui::ImageView* pLayoutPetProg = dynamic_cast<ui::ImageView*>(pWidgetPetProg);
if (NULL != pLayoutPetProg)
{
Vec2 ptCentre = pWidgetPetProg->getPosition();
float fRadio = 31;
float fHeight = fRadio * 2.0f * (1.0-fPercent);
if (NULL != m_pPetEnergyStencil)
{
m_pPetEnergyStencil->removeFromParent();
m_pPetEnergyStencil = NULL;
}
m_pPetEnergyStencil = ClippingNode::create();
if (NULL == m_pPetEnergyStencil)
{
ASSERT_DEBUG;
return;
}
m_pPetEnergyStencil->setInverted(true);
m_pPetEnergyStencil->setAlphaThreshold(0.05f);
addChild(m_pPetEnergyStencil,98);
spSkeletonData* pSkillSkeletonData = GetBattleScene()->getPreloadSkeletonByFilename(PET_ENERGY_FILE);
if (NULL == pSkillSkeletonData)
{
ASSERT_DEBUG;
return;
}
SkeletonAnimation* pPetEnergyCtrlBottom = SkeletonAnimation::createWithData(pSkillSkeletonData);
if (NULL == pPetEnergyCtrlBottom)
{
ASSERT_DEBUG;
return;
}
pPetEnergyCtrlBottom->setPosition(ptCentre);
m_pPetEnergyStencil->addChild(pPetEnergyCtrlBottom);
pPetEnergyCtrlBottom->setAnimation(0, PET_ENERGY_ANI_BOTTOM, true);
CircleSegment* pPetEnergyStencilSharp = CircleSegment::create();
if (NULL == pPetEnergyStencilSharp)
{
ASSERT_DEBUG;
return;
}
pPetEnergyStencilSharp->drawCircleSegment(ptCentre, fRadio, fHeight, 100, 1, Color4F(1,0,0,1), Color4F(1,0,0,1), CircleSegment::CSD_TOP);
m_pPetEnergyStencil->setStencil(pPetEnergyStencilSharp);
Vec2 ptCtrlTop = Vec2(ptCentre.x, ptCentre.y - fRadio + fRadio*2.0f  * fPercent);
if (fPercent > 0.5)
fPercent = 1.0f - fPercent;
if (fPercent > 0)
{
if (NULL != m_pPetEnergyCtrlTop)
{
m_pPetEnergyCtrlTop->removeFromParent();
m_pPetEnergyCtrlTop = NULL;
}
m_pPetEnergyCtrlTop = SkeletonAnimation::createWithData(pSkillSkeletonData);
if (NULL == m_pPetEnergyCtrlTop)
{
ASSERT_DEBUG;
return;
}
addChild(m_pPetEnergyCtrlTop, 99);
m_pPetEnergyCtrlTop->setPosition(ptCtrlTop);
float fTopWidth = sqrt(pow(fRadio, 2.0f) - pow(fHeight-fRadio, 2.0f));
float fScale = fTopWidth/fRadio;
m_pPetEnergyCtrlTop->setScale(fScale);
m_pPetEnergyCtrlTop->setAnimation(0, PET_ENERGY_ANI_TOP, true);
}
}
}
else
{
ASSERT_DEBUG;
}
 
ClippingNode*                m_pPetEnergyStencil;
SkeletonAnimation*            m_pPetEnergyCtrlTop;
SkeletonAnimation*            m_pPetEnergyFullEffect;  
/** 画圆缺
@ ptCentre: 圆心
@ fRadio:半径
@ fCircleSegmentHeight: 圆缺高度
@ nSegmentCout:片段个数
@ fBorderWidth: 边框粗细
@ clrBorder: 边框颜色
@ clrFill: 圆缺填充色
@ csdDirection:圆缺起始位置点
*/
void CircleSegment::drawCircleSegment(Vec2 ptCentre, float fRadio, float fCircleSegmentHeight, int nSegmentCout, float fBorderWidth, Color4F clrBorder, Color4F clrFill, CSDirection csdDirection)
{
if (fRadio <= 0 || fCircleSegmentHeight > 2.0f*fRadio || nSegmentCout < 1)
{
ASSERT_DEBUG;
return;
}
float fPiece = fCircleSegmentHeight/(float)nSegmentCout;
Vec2* ptPoints = new Vec2[2*nSegmentCout+1];
Vec2* ptPointsPopy = ptPoints;
int j = 0;
for (int i = nSegmentCout; i > 0; i--)
{
float fDistanceX = sqrt(pow(fRadio, 2.0f) - pow(fRadio - fPiece*i, 2.0f));
if (CSD_BOTTOM == csdDirection)
{
ptPoints[j] = Vec2(ptCentre.x - fDistanceX, ptCentre.y - fRadio + fPiece*i);
ptPoints[2*nSegmentCout-j] = Vec2(ptCentre.x + fDistanceX, ptCentre.y - fRadio + fPiece*i);
}
else if (CSD_TOP == csdDirection)
{
ptPoints[j] = Vec2(ptCentre.x - fDistanceX, ptCentre.y + fRadio - fPiece*i);
ptPoints[2*nSegmentCout-j] = Vec2(ptCentre.x + fDistanceX, ptCentre.y + fRadio - fPiece*i);
}
j++;
}
if (CSD_BOTTOM == csdDirection)
{
ptPoints[nSegmentCout] = Vec2(ptCentre.x, ptCentre.y - fRadio);
}
else if (CSD_TOP == csdDirection)
{
ptPoints[nSegmentCout] = Vec2(ptCentre.x, ptCentre.y + fRadio);
}
// drawPolygon(ptPointsPopy, 2*nSegmentCout+1, clrFill, fBorderWidth, clrBorder);
drawSolidPoly(ptPointsPopy, 2*nSegmentCout+1, clrFill);
CC_SAFE_DELETE_ARRAY(ptPoints);
}


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 请教,ClippingNode遮罩在windows下运行正确,手机上没有遮挡效果

相关文章

  • 2017-06-05 shader编程使用的语言
  • 2017-06-05 Cocos2d-xwin7+vs2010配置图文详解
  • 2017-06-05 关于shader贴图叠加的一个疑问~~大神~救我~
  • 2017-06-05 新手问题,请高手相助!
  • 2017-06-05 跪求visualc++经典游戏程序设计PDF
  • 2022-04-30Unity 3D Panel控件
  • 2017-06-05 本人想写网络游戏登录器,来个大神指点。
  • 2017-06-05 关于手游更新的一些想法
  • 2022-04-30Unity 3D贴图
  • 2022-04-30Unity 3D游戏发布

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Unity 3D菜单栏及快捷键详解
    • coco2dx的问题。急解答。谢谢
    • iosUIkit中怎么添加cocos2dx的场景实现功能
    • 我做了一个canvas游戏,当把地图摄像机放大地图物体时,fps很卡,动画不流畅,怎么破
    • js跑酷游戏代码碰撞检测逻辑错误,球在没到wall里就弹出信息,代码里已表明地点
    • Unity 3D Toggle控件
    • Unity 3D物理管理器(Physics Manager)
    • Unity 3D Input Field控件
    • Unity 3D Button控件
    • 求助安卓手游存档问题!

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有