zoukankan      html  css  js  c++  java
  • Cocos2d-x绘制圆角矩形

    /*
    * @brief        画圆角矩形    
    * @param        origin            矩形开始点
    * @param        destination        矩形结束点
    * @param        radius            圆角半径
    * @param        segments        圆角等份数,等份越多,圆角越平滑
    * @param        bFill            是否填充
    * @param        color            填充颜色
    * @attention        
    */
    void DrawPrimitivesTest::ccDrawRoundRect( Point origin, Point destination, float radius, unsigned int segments, bool bFill, Color4F color)
    {
            //算出1/4圆
        
        const float coef    = 0.5f * (float)M_PI / segments;
        Point * vertices    = new Point[segments + 1];
        Point * thisVertices = vertices;
        for(unsigned int i = 0; i <= segments; ++i, ++thisVertices)
        {
            float rads        = (segments - i)*coef;
            thisVertices->x    = (int)(radius * sinf(rads));
            thisVertices->y    = (int)(radius * cosf(rads));
        }
        //
        Point tagCenter;
        float minX    = MIN(origin.x, destination.x);
        float maxX    = MAX(origin.x, destination.x);
        float minY    = MIN(origin.y, destination.y);
        float maxY    = MAX(origin.y, destination.y);
        
        unsigned int dwPolygonPtMax = (segments + 1) * 4;
        Point * pPolygonPtArr = new Point[dwPolygonPtMax];
        Point * thisPolygonPt = pPolygonPtArr;
        int aa = 0;
        //左上角
        tagCenter.x        = minX + radius;
        tagCenter.y        = maxY - radius;
        thisVertices    = vertices;
        for(unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, ++thisVertices)
        {
            thisPolygonPt->x    = tagCenter.x - thisVertices->x;
            thisPolygonPt->y    = tagCenter.y + thisVertices->y;
            ++aa;
        }
        //右上角
        tagCenter.x        = maxX - radius;
        tagCenter.y        = maxY - radius;
        thisVertices    = vertices + segments;
        for(unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, --thisVertices)
        {
            thisPolygonPt->x    = tagCenter.x + thisVertices->x;
            thisPolygonPt->y    = tagCenter.y + thisVertices->y;
            ++aa;
        }
        //右下角
        tagCenter.x        = maxX - radius;
        tagCenter.y        = minY + radius;
        thisVertices    = vertices;
        for(unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, ++thisVertices)
        {
            thisPolygonPt->x    = tagCenter.x + thisVertices->x;
            thisPolygonPt->y    = tagCenter.y - thisVertices->y;
            ++aa;
        }
        //左下角
        tagCenter.x        = minX + radius;
        tagCenter.y        = minY + radius;
        thisVertices    = vertices + segments;
        for(unsigned int i = 0; i <= segments; ++i, ++thisPolygonPt, --thisVertices)
        {
            thisPolygonPt->x    = tagCenter.x - thisVertices->x;
            thisPolygonPt->y    = tagCenter.y - thisVertices->y;
            ++aa;
        }
        
        if(bFill){
            DrawPrimitives::drawSolidPoly(pPolygonPtArr, dwPolygonPtMax, color);
        }else
        {
            DrawPrimitives::setDrawColor4F(color.r, color.g, color.b, color.a);
            DrawPrimitives::drawPoly(pPolygonPtArr, dwPolygonPtMax, true);
        }
        
        CC_SAFE_DELETE_ARRAY(vertices);
        CC_SAFE_DELETE_ARRAY(pPolygonPtArr);
    }        
  • 相关阅读:
    Android开发需要注意的地方
    Android开发 --微信支付开发(转载!)(开发工具:Eclipse)
    Android开发---支付宝功能接口(支付功能)(转载!)
    Android开发--推送
    ASP.NET如何发布更新
    如何用visual studio控件(repeater)绑定数据库(SQL server)信息并显示
    SQL Server 的远程连接(转载)
    设置如何自动备份数据库并删除2周前的自动备份数据
    如何禁止网页内容被复制以及如何解除禁止(转载并更新!)
    条码生成
  • 原文地址:https://www.cnblogs.com/leehongee/p/3639623.html
Copyright © 2011-2022 走看看