1. 程式人生 > >COCOS2dx 3.5 實現帶白色邊框圓形頭像功能

COCOS2dx 3.5 實現帶白色邊框圓形頭像功能

cocos下實現圓形頭像最初始考慮的是ClippingNode,但是無論實心圓形蒙層使用DrawNode還是圖片都會遮罩出很嚴重的鋸齒

於是取個巧,使用實體圓蒙層後,在上層再蓋一個無鋸齒的圓環,做出來最終的效果,自我感覺還可以

把工具類取出來儲存:

標頭檔案UserIconSprite.h:

#ifndef __Ci__UserIconSprite__
#define __Ci__UserIconSprite__

#include <stdio.h>
#include <cocos2d.h>

USING_NS_CC;

class UserIconSprite:public Sprite
{
public:
CREATE_FUNC(UserIconSprite);
bool init();

void changeIcon(std::string path);

void setSpriteFrameName(std::string path);  //通過圖片路徑設定頭像

void setSprite(Sprite* img);//新增Sprite為頭像



private:


Sprite* getImgFromPath(std::string path,std::string defautImg = "[email protected]");  //傳入圖片的絕對路徑
Sprite* userImg;
Sprite* mark;
ClippingNode* clip;


};

#endif /* defined(__Ci__UserIconSprite__) */

具體實現UserIconSprite.cpp:

#include "UserIconSprite.h"

#include "SceneManager.h"

boolUserIconSprite

::init()

{

if(!Sprite::init()){

returnfalse;

    }

clip =ClippingNode::create();

clip->setAnchorPoint(Vec2::ANCHOR_MIDDLE);

clip->setInverted(false);

clip->setAlphaThreshold(0.0f);

mark =Sprite::create("[email protected]");   //一個圓形圖片當蒙層,也可以使用DrawNode

mark->setPosition(0,0);

clip

->setStencil(mark);

this->addChild(clip);

this->setAnchorPoint(Vec2::ANCHOR_MIDDLE);

auto circle =Sprite::create("[email protected]");//一個大小類似的圓環圖片

this->addChild(circle,zOrder_LAYER);

    circle->setPosition(0,0);

returntrue;

}

voidUserIconSprite::changeIcon(string path)

{

clip->removeAllChildrenWithCleanup(true);

setSpriteFrameName(path);

}

voidUserIconSprite::setSpriteFrameName(string path)

{

userImg =getImgFromPath(path);

setSprite(userImg);

}

voidUserIconSprite::setSprite(Sprite* img)

{

userImg = img;

userImg->setPosition(0,0);

clip->addChild(userImg,zOrder_LAYER);

}

SpriteUserIconSprite::getImgFromPath(std::string path,std::string defautImg)

{

Sprite* mImg;

if(FileUtils::getInstance()->isFileExist(path))     //若圖片不存在則使用預設頭像

    {

auto mUerImg =newImage();

        mUerImg->initWithImageFile(path);

auto texture =newTexture2D();

        texture->initWithImage(mUerImg);

        mUerImg->release();

        mImg = Sprite::createWithTexture(texture);

    }else{

        mImg = Sprite::create(defautImg);

    }

return mImg;

}


用法:

  UserIconSprite* userSprite =UserIconSprite::create();

userSprite->setSprite(Sprite::createWithSpriteFrameName("[email protected]"));

  this->addChild(userSprite ,0);

相關推薦

COCOS2dx 3.5 實現白色邊框圓形頭像功能

cocos下實現圓形頭像最初始考慮的是ClippingNode,但是無論實心圓形蒙層使用DrawNode還是圖片都會遮罩出很嚴重的鋸齒 於是取個巧,使用實體圓蒙層後,在上層再蓋一個無鋸齒的圓環,做出來最終的效果,自我感覺還可以 把工具類取出來儲存: 標頭檔案Use

Android實現圓形Imageview,白色邊框

最近做了個圓形Imageview,外面有白色邊框 有需要的同學可以看看,效果如下 附上實現程式碼 RoundImageView: public class RoundImageView

cocos2dx中ClippingNode實現邊框圓形頭像

有個小需求,需要實現一個圓形的頭像。要ui設計直接給圓形的png當然可以,但這種解決方式總是不優雅。然後就在網上查了半天,最終找到了使用ClippingNode來實現的方法。 關於ClippingNo

Glide載入圓形圖片並且白色邊框(絕對實用)

1、建立一個類 /** * 載入圓形頭像帶白色邊框 */ public class GlideCircleWithBorder extends BitmapTransformation { private Paint mBorderPaint; priv

Glide載入圓形圖片白色邊框

1.匯入Glide依賴 compile 'com.github.bumptech.glide:glide:4.0.0-RC1' 2.建立一個類 繼承BitmapTransformation /**  * 載入圓形頭像帶白色邊框  */ public class Glid

add(2)(3) //5 實現

某訂餐平臺公司 面試的一道題目: 實現 add(2,3)  // 5         add(2)(3) //5 function add(a, b) { if (arguments.len

自定義view實現圓形頭像功能

       個人中心是每一個app都有的模組,在個人中心中,我們常常可以看到一個圓形有邊框(無邊框)的頭像。作為一個常見的功能,今天我們把它實現一下。 1. 需求分析        這個主要分為兩部分:一個頭像邊框,一個是圓形頭像顯示,我們主要是考慮採用自定義View來

localstorage實現過期時間的快取功能

  前言 一般可以使用cookie,localstorage,sessionStorage來實現瀏覽器端的資料快取,減少對伺服器的請求。 1.cookie資料存放在本地硬碟中,只要在過期時間之前,都是有效的,即使重啟瀏覽器。但是會在每次HTTP請求中新增到請求頭中,如果資料過多,會造成效能問題

用這個庫 3 分鐘實現讓你滿意的表格功能:Bootstrap-Table

本文作者:HelloGitHub-kalifun 這是 HelloGitHub 推出的《講解開源專案》系列,今天給大家推薦一個基於 Bootstrap 和 jQuery 的表格外掛:Bootstrap-Table 一、介紹 從專案名稱就可以知道,這是一款 Bootstrap 的表格外掛。表格的展示的形式所

css點滴35種方式實現圓環

比較 顏色 置頂 寬度 頁面效果 身高 ima 內部 水平 使用css實現圓環,最簡單的方式就是使用嵌套標簽,設置border-radius就可以實現,但是這個是最簡單的方式,這篇文章我們介紹5種方式實現圓環。 1.兩個標簽嵌套 html代碼: <di

鏈表的數組實現中,令鏈表和自由表變得緊湊《算法導論》10.3-5

bject and elements 多少 lse tex com spa 使用 有一個雙向鏈表L,存儲於長度為m的數組。假設m個元素中有n個元素在鏈表L中,m-n個元素由自由表F管理。現在實現方法CompacifyList,它的功能是讓鏈表L中元素緊湊地占據數組的前n個

Linux環境C語言斐波拉切數列(1,1,2,3,5,8,13,.........)實現

fib %d lse printf 黃金 oda n-2 desktop tdi 斐波那契數列(Fibonacci sequence),又稱黃金分割數列、因數學家列昂納多·斐波那契(Leonardoda Fibonacci)以兔子繁殖為例子而引入,故又稱為“兔子

【進階3-5期】深度解析 new 原理及模擬實現

本週的主題是this全面解析,本計劃一共28期,每期重點攻克一個面試重難點,如果你還不瞭解本進階計劃,文末點選檢視全部文章。 如果覺得本系列不錯,歡迎點贊、評論、轉發,您的支援就是我堅持的最大動力。 介紹下定義 new 運算子建立一個使用者定義的物件型別的例項或具有建構函式的內建物件的例項。

3.5.2 迴圈佇列——佇列的順序表示和實現

佇列也有兩種表示形式,順序和鏈式。 與順序棧相類似,在佇列的順序儲存結構中,除了用一組地址連續的儲存單元依次存放從佇列頭到佇列尾的元素之外,尚需附設兩個整形變數front和rear分別指示佇列頭元素及佇列尾元素的位置(後面分別稱為頭指標和尾指標)。佇列的順序儲存結構表示如下 //

js實現斐波那契數列 0 1 1 2 3 5 8 13 21 34 。。。

斐波那契數列就是著名的兔子生兔子問題,後面一個數等於前兩個數的和 //max大於等於2的整數 function fib(max) {      var t,a=0,b=1,arr = [0,1];      while (a

1.實現strcpy 2.實現strcat 3.實現strstr 4.實現strchr 5.實現strcmp 6.實現memcpy 7.實現memmove

    在前面介紹了字串的一個大概,真正的掌握需要大量程式碼的磨練。下面介紹幾個字串常用的幾個函式,這些函式都是在<string.h>裡面,這裡是介紹原理,進行模擬還原,也就是自己寫這個函式,實現原有功能。可能有一些語言表達不好的地方,或者有些地方的語言生硬,難以

【進階3-5期】深度解析 new 原理及模擬實現(轉)

這是我在公眾號(高階前端進階)看到的文章,現在做筆記 https://github.com/yygmind/blog/issues/24 new 運算子建立一個使用者定義的物件型別的例項或具有建構函式的內建物件的例項。 ——(來自於MDN) 舉個例子: function Car(color) {

1.實現strcpy 2.實現strcat 3.實現strstr 4.實現strchr 5.實現strcmp 6.實現memcpy 7.實現memmove

1.模擬實現strcpy函式拷貝字串 #include<stdio.h> #include<assert.h> char* my_strcpy(char* dest,const char *src) { char* ret = dest

3.5 用兩個棧實現佇列

用兩個棧實現佇列 用兩個棧來實現一個佇列,完成佇列的Push和Pop操作。 佇列中的元素為int型別。 class Queue { public: void push(int node) { stack1.push(node); } int pop() { if (s

第三單元 3.5 for實現斐波那契相鄰比之和

#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int i=1,f1