1. 程式人生 > >cocos2d-x 新手引導(矩形,圓形的強制引導)

cocos2d-x 新手引導(矩形,圓形的強制引導)

#ifndef __CLIPPING_NODE_MANAGER_H__
#define __CLIPPING_NODE_MANAGER_H__

#include "cocos2d.h"
/*
強制引導管理者

建立強制引導:
auto cnm = ClippingNodeManager::create();
cnm->forcedRect(矩形範圍); 或 cnm->forcedRound(原點,半徑);
this->addChild(cnm);

取消強制引導:
this->removeChild(cnm);
*/

//強制區域型別
enum FORCED_TYPE
{
    FORCED_RECT,
    FORCED_ROUND
};

class ClippingNodeManager : public cocos2d::Layer
{
public:
    ClippingNodeManager();
    ~ClippingNodeManager();
    CREATE_FUNC(ClippingNodeManager);
    //設定矩形強制區域
    void forcedRect(cocos2d::Rect rect);
    //設定圓形強制區域
    void forcedRound(cocos2d::Vec2 pos, float radius);
private:
    //記錄強制區域型別
    int type;
    //記錄矩形區域
    cocos2d::Rect forced;
    //記錄圓形原點
    cocos2d::Vec2 pos;
    //記錄圓形半徑
    float radius;
    cocos2d::ClippingNode *clipper;
    cocos2d::EventListenerTouchOneByOne *listener;
    virtual bool init();
    virtual bool onTouchBegan(cocos2d::Touch *touch, cocos2d::Event *unused_event);
};


#endif // !__CLIPPING_NODE_MANAGER_H__#include "GlobalInclude.h"
#include "ClippingNodeManager.h"

USING_NS_CC;

ClippingNodeManager::ClippingNodeManager()
{}

ClippingNodeManager::~ClippingNodeManager()
{}

bool ClippingNodeManager::init()
{
    if(!Layer::init())
    {
        return false;
    }                           
    
    clipper = ClippingNode::create(); //建立一個ClippingNode物件
    clipper->setInverted(true); //設定底板可見,顯示剩餘部分
    clipper->setAlphaThreshold(1.0f);//設定繪製底板的Alpha值為0
    this->addChild(clipper, 1);

    auto layerBg = LayerColor::create(Color4B(0, 0, 0, 150));//添加了一個背景層
    clipper->addChild(layerBg);

    listener = EventListenerTouchOneByOne::create();//建立一個觸控監聽(單點觸控)  
    listener->onTouchBegan = CC_CALLBACK_2(ClippingNodeManager::onTouchBegan, this);//指定觸控的回撥函式  
    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);//將listener和layer繫結,放入事件委託中
                                                 
    return true;
}

bool ClippingNodeManager::onTouchBegan(Touch *touch, Event *event)
{
    auto point = Director::getInstance()->convertToGL(touch->getLocationInView());//獲得當前觸控的座標
    bool isInForced = false;
    
    switch(type)
    {
        case FORCED_RECT:

            if(forced.containsPoint(point))//如果觸點處於rect中  
            {
                listener->setSwallowTouches(false);
            }
            else
            {
                listener->setSwallowTouches(true);
            }

            break;

        case FORCED_ROUND:

            float length = point.getDistance(pos);
            if(length <= radius)
            {
                listener->setSwallowTouches(false);
            }
            else
            {
                listener->setSwallowTouches(true);
            }

            break;
        
    }
    return true;
}

void ClippingNodeManager::forcedRect(Rect rect)
{
    type = FORCED_RECT;
    forced = rect;
    const ccColor4F color = {1, 0, 0, 0};

    Vec2 verts[4];
    verts[0] = rect.origin;
    verts[1] = Vec2(rect.origin.x, rect.origin.y + rect.size.height);
    verts[2] = Vec2(rect.origin.x + rect.size.width, rect.origin.y + rect.size.height);
    verts[3] = Vec2(rect.origin.x + rect.size.width, rect.origin.y);

    auto drawNode = DrawNode::create();
    drawNode->drawPolygon(verts, 4, color, 1, color);
    
    clipper->setStencil(drawNode);//設定裁剪模板
}

void ClippingNodeManager::forcedRound(cocos2d::Vec2 pos, float radius)
{
    type = FORCED_ROUND;
    this->pos = pos;
    this->radius = radius;
    const ccColor4F color = {1, 0, 0, 0};

    auto drawNode = DrawNode::create();
    drawNode->drawDot(pos, radius, color);

    clipper->setStencil(drawNode);//設定裁剪模板
}

相關推薦

cocos2d-x 新手引導(矩形圓形強制引導)

#ifndef __CLIPPING_NODE_MANAGER_H__ #define __CLIPPING_NODE_MANAGER_H__ #include "cocos2d.h" /* 強制引導管理者 建立強制引導: auto cnm = ClippingNodeManager::create();

cocos2d-x 新手引導

總結了下,新手引導的要點有以下幾個: 畫面的變化.觸控和按鈕響應.邏輯處理及程式碼組織. 下面我們就詳細講述這幾個要點: 一.畫面的變化. 對個這個不同的遊戲的做法不盡相同,歸結起來大概有這麼幾種: 1.畫面整體變暗 這個比較簡

cocos2d-x開發遊戲時使用Texture packer來合併圖片

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

【原創】pygame學習筆記(1)----基本的線矩形圓形弧形繪製

PYgame的內容 (1)這個module很有意思 (2)書本至少來源於《Python遊戲程式設計入門》 (3)官方權威說明:https://www.pygame.org/docs/   下面的嘗試把各種圖形在一個程式裡繪製 注意點: (1)特別注意,比如引

3 用python進行OpenCV實戰之畫圖(直線矩形圓形

前言 在上一節我們通過使用NumPy的陣列分割成功的在我們的影象上畫了一個綠色的方塊,但是如果我們想畫一個單一的線條或者圓圈該怎麼辦呢?NumPy沒有提供相關的功能,但是OpenCV提供了相關的函式,在本節就將為大家介紹三個基本的OpenCV畫圖方法:

Cocos2d-x,Android,IOS,遊戲HTML5開發/交流/學習/資源 沈大海

上一節談到啟動了節點,通過cleos工具可以獲取區塊鏈狀態 以上命令返回了以下內容: server_version:版本 chain_id:網路編號,以上圖片的網路編號是主網,但在未連線主網之前一定不是acaxxxxx開頭的 head_block_num:頭區塊編

cocos2d-x接受鍵盤事件左右鍵

首先在AppDelegate.cpp加入以下程式碼,一定要在AppDelegate::applicationDidFinishLaunching()上,宣告用的。 #if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32) HelloW

cocos2d-x新手學習之Helloworld(第三篇)[版本:cocos2d-x-3.1.1]

1.建立新專案 開啟CMD,輸入命令: cocos new Helloworld -p com.hello -l cpp -d E:\WorkSpace\cocos2d-x\l2\ 開始建立新專案,如圖: 建立完後,提示成功,如圖:   專案檔案目錄如下:  

雙系統引導失敗windows的引導修復方法

在使用windows時,因為主分割槽裝有linux所以採用的grub引導,但在這如果在其他無系統的分割槽安裝windows,因為windows預設的引導方式與linux不同,則會破會linux原有的grub引導方式,造成無法開機,要進行引導修復。 因為手頭有windowsP

Android引導蒙層安卓新手引導引導圖層支援橢圓圓形矩形多種形狀一行程式碼快速搞定

package com.laxian.guideview; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.Gravity; import android.view.

cocos2d-x 判斷圓形是否與矩形發生物理碰撞

檯球遊戲做到的,直接給出程式碼function help.twoDistance(X1,Y1,X2,Y2) return math.pow((math.pow((X1 - X2), 2) + math.pow((Y1 - Y2), 2)), 0.5) end fun

cocos2d-x 3.X 製作新手引導的按下事件

在新手引導的過程中,我們往往會強制使用者執行指定區域的操作。那麼一般的操作我們是在原有的介面上增加一個遮罩層,指定區域內可以向下傳遞touch事件。而其他區域則吸收掉點選事件。在cocos2d-x 3.x中的簡單實現方式如下。 1.首先我們建立一個主要介面,裡面有一些選單按

cocos2d-x CCSrollView 源代碼可循環的SrollView代碼

更改 cocos2d ring event moved esp rem namespace 正在 項目須要。寫一個類似於iPhone上面時鐘選擇的可拉動式循環選擇列表,通過集成CCScrollView並更改部分代碼。實現了該功能。 假設想充分了解代碼,請先閱讀源碼

quick-cocos2d-x教程1:在window上創建第一個項目文件夾並制作helloworld

項目 編碼 rip pla 命令模式 utf-8 cape tps quick 說明:此教程是針對cocos2dx 2.0系列的,3.0的版本號,如今還沒有公布出來。 1)首先從github.com把這個項目下載到本地。然後裝到d盤的根文件夾,並設置文件夾路徑為d:\

linux下開發解決cocos2d-x中編譯出現的一個小問題, undefined reference to symbol &#39;pthread_create@@GLIBC_2.2.5&#39;

water span x86 code bject data- ace 技術分享 inux 解決cocos2d-x中編譯出現的一個小問題 對於cocos2d-x 2.×中編譯中,若頭文件裏引入了#include "cocos-ext.h",在進行C++編譯的時候會遇到例

C++調用JS可變參模板實現方便調用(cocos2d-x)

err temp oid eva template sse pac cocos2d-x class #include "scripting/js-bindings/manual/ScriptingCore.h" #include <sstream> #in

cocos2d-x 源代碼分析 : EventDispatcher、EventListener、Event 源代碼分析 (新觸摸機制新的NotificationCenter機制)

get cti state 2.7 return 3.1 成了 available been 源代碼版本號來自3.x,轉載請註明 cocos2d-x 源代碼分析總文件夾 http://blog.csdn.net/u011225840/article/detail

cocos2d-x重復動作

col rep png pan pre scaleto sprite span cal Sprite * sprite11 = Sprite::create("4.png"); sprite11->setPosition(visibleSize /

為回饋廣大學員智捷課堂買關老師Cocos2d-x課程送Cocos2d-x圖書

htm IT .com 圖書 item 教程 com 視頻教程 ofo 為回饋廣大學員,智捷課堂買關老師Cocos2d-x課程送Cocos2d-x圖書 一、凡購買如下課程送一本圖書: 1、 Cocos2d-x入門與提高視頻教程__Part 22、 Cocos2d-x數據持

Cocos2d-x使用過程中遇到的錯誤(VS下開發移植到Android釋出)(更新ing)

環境:windows7, VS2010, cocos2d-1.0.1-x-0.12.0, cygwin, eclipse, android sdk4.0.3, ndk r7b 在vs上開發,然後移植到android上. 20120718 CCArray的foreach操作: c