Cocos2d-x3.2 ClippingNode裁减节点(模板遮罩)


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

//GameScene.h

 

#include "cocos2d.h"

 

USING_NS_CC;

 

class GameScene : public cocos2d::Layer

{

public:

    static cocos2d::Scene* createScene();

     

    virtual bool init();

     

    virtual bool onTouchBegan(Touch *touch, Event *unused_event);

     

    CREATE_FUNC(GameScene);

     

private:        //注意不能用auto关键字

    Size size;

    Sprite *sprite;

    Node *node;     //模板节点

    ClippingNode *clippingNode;     //被裁减的节点

};

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

//GameScene.cpp

 

//  Created by Jacedy on 14-8-11.

 

#include "GameScene.h"

 

USING_NS_CC;

 

cocos2d::Scene* GameScene::createScene()

{

    auto scene = Scene::create();   //创建一个场景

    auto layer = GameScene::create();   //创建一个图层

    scene->addChild(layer);

    return scene;

}

 

//初始化当前的图层

bool GameScene::init()

{

    if(!Layer::init())      //初始化父类

        return false;

     

    //获取屏幕大小

    size = Director::getInstance()->getVisibleSize();

    //auto size = Director::getInstance()->getWinSize();

    //加载背景

    auto bg = Sprite::create("OnePiece_1.png");

    bg->setPosition(Vec2(size.width/2, size.height/2));

    this->addChild(bg);

     

    auto target = Sprite::create("target.png");

    target->setPosition(Vec2(size.width/2, size.height/2));

    //target->setScale(2);

     

    node = Node::create();

     

    clippingNode = ClippingNode::create();

    clippingNode->setStencil(node);     //设置模板

    clippingNode->setInverted(true);        //设置底板可见

    clippingNode->setAlphaThreshold(0);         //设置绘制底板的Alpha值为0

    this->addChild(clippingNode);

    clippingNode->addChild(target);

     

    //创建监听事件对象

    auto listener = EventListenerTouchOneByOne::create();

     

    //定义监听事件的回调函数

    listener->onTouchBegan = CC_CALLBACK_2(GameScene::onTouchBegan, this);

     

    //在事件分发器中注册

    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

     

    return true;

}

 

bool GameScene::onTouchBegan(Touch *touch, Event *unused_event)

{

    auto pos = touch->getLocation();

     

    //每次点击屏幕,在点击处添加射击效果图片,该图片也需要被打穿

    auto holeBg = Sprite::create("hole_effect.png");

    holeBg->setPosition(pos);

    clippingNode->addChild(holeBg);

     

    //将弹孔添加到模板上,造成板底裁减洞口形状

    auto hole = Sprite::create("hole_stencil.png");

    hole->setPosition(pos);

    node->addChild(hole);

     

    return false;

}

资源图片:

时间: 2024-10-07 12:55:01

Cocos2d-x3.2 ClippingNode裁减节点(模板遮罩)的相关文章

cocos2d x3 6移植安卓-cocos2d-x3.6移植安卓时出现图片中错误如何解决?

问题描述 cocos2d-x3.6移植安卓时出现图片中错误如何解决? 解决方案 这是安卓的版本问题啊.你NDK设置编译的andorid17..但是androidMainfest.xml里设置的是最少 9,改下.把9改成17看看 解决方案二: 这是安卓的版本问题啊.你NDK设置编译的andorid17..但是androidMainfest.xml里设置的是最少 9,改下.把9改成17看看

cocos2d x3 0bate相关-Cocos2d-x3.0bate版,关于粒子特效

问题描述 Cocos2d-x3.0bate版,关于粒子特效 用粒子编辑器生成个.plist文件,如何在代码中加载,以及控制其开启和关闭,求大神指点

ClippingNode的使用

概述 ClippingNode(裁剪节点)可以用来对节点进行裁剪,可以根据一个模板切割图片的节点,生成任何形状的节点显示. ClippingNode是Node的子类,可以像普通节点一样放入Layer,Scene,Node中. ClippingNode 原理: ClippingNode是利用模板遮罩来完成对Node区域裁剪的技术.如何理解ClippingNode的遮罩?看下图的例子吧. 所谓模板,就是一个形状,透过该形状可看到底板上的图层,如果底板上没有任何内容,则直接看到Layer上的内容,而底

Cocosd2d实例教程(五) Cocos2d添加虚拟摇杆控制器

1.介绍 cocos2d为我们提供了好用的摇杆控制器,主要是对ZJoystick.h和ZJoystick.m的添加,实现了如下图的功能.通过摇杆可以控制图中精灵的移动.(但是还有一个技术性问题亟待解决,就是精灵移动后会有一个重影留在初始位置) 2.摇杆的实现 1) 将资源中的ZJoystick文件夹加到工程中(页面下方提供下载地址), 精灵的添加以及移动前面已经讲了,不知道的同学可以看教程四.工程名字为ControlWalking 2)修改HelloWorldLayer.h文件.加入一些需要的节

Cocosd2d实例教程(三) Cocos2d瓦片地图的导入

上一节讲了如何使用Tiled制作瓦片地图,下面讲一下如何将地图导入游戏中. 第一步:将生成的文件导入resource中,如图,分别为地图和图片集 第二步:在HelloWorldLayer.h中修改代码,有一定基础的人还是比较好理解的. #import <GameKit/GameKit.h> // When you import this file, you import all the cocos2d classes #import "cocos2d.h" // Hello

Cocos2D:塔防游戏制作之旅(三)

整合炮塔资源 为了快速开始,我们为你创建了开始的项目.它包括了一个空白的Cocos2D项目以及大多数你将在教程中使用到的资源. 所以首先下载该 开始项目 并且解压缩到你指定的位置中去. 注意:该项目的艺术资源来有Vicki制作的自免费艺术包中,它基于Oray Studios的其他免费的艺术包.如果你喜欢它们,你可以雇佣Oray Studios中的艺术家们! 开始项目基于Cocos2D 2.1(RC1)的基础模板而创建,他提供你一个可工作的项目:包含一个在屏幕上带有居中标签的HelloWorldL

Windows HPC Server 2008更新计算节点指南

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   Microsoft Update 是用于发布 Windows 和 Microsoft 产品更新(也称为修补程序)的网站.通过 Windows Server Update Services (WSUS),信息技术管理员可以将最新 Microsoft 产品更新部署到运行 Windows 操作系统的计算机.使用 WSUS,管理员可以完全地管理如何将通过 Microso

【Cocos2d-x】开发实战-Cocos中的字符串、标签和中文乱码

本篇博客讲解: 1.Ccocos2d-x中的字符串 2.使用标签 3.中文乱码问题 Ccocos2d-x中的字符串 使用const char和stdstring 使用cocos2d__String 数据类型之间的转换 Win32平台下中文乱码问题 解决方法一 解决方法二 解决方法三 使用标签 LabelTTF LabelAtlas LabelBMFont Cocos2d-x 3x标签类Label 标签中文乱码问题 源代码下载地址 Ccocos2d-x中的字符串 使用const char*和std

DedeCMS专题功能使用详细教程

中介交易 SEO诊断 淘宝客 云主机 技术大厅 一个网站通常会在不同时期推出一些针对性的专题内容,专题的功能 其实就是将站点的内容根据特定的需求进行一次检索,将这些不同形式的内容进行一次整合,这个我们可以看看一些大的门户网站,例如新浪.搜狐,他们有自己的专题频道.一个专题可以包含几个不同栏目的内容或者包含不同内容模型如:文章.图片.音频.视频等,不同的专题需要有自己符合当时环境的页面风格,比如在元旦.新年就需要红色主题的专题模板,在春天.夏天就需要绿色主题的专题模板等.一个好的专题容易让网站会员