cocos2d-x 视差节点 ParallaxNode

参考文章http://cn.cocos2d-x.org/tutorial/show?id=1322

ParallaxNode就是视差节点的意思,当我们面对一个背景画面的时候,如果背景在滚动的时候可以使用这个节点,它的功能就是让子节点拥有不同的移动速率,这样,我们就可以让某一些子节点移动的慢一些,而某些子节点移动的快一些。这样营造出的效果就是远处的景物移动的快,而近处的景物移动的快,给人一种更加真实的感觉。

直接上代码怎样使用ParallaxNode

在.h文件定义

ParallaxNode *parallax;  视差节点类

Sprite* bg1;  背景1

Sprite* bg2; 背景2

void update(float dt); 如要要是背景自动移动就使用计时器,在update里面写移动距离

bool onTouchBegan(Touch* touch, Event* event);

void onTouchMoved(Touch* touch, Event* event);

void onTouchEnded(Touch* touch, Event* event);

.cpp文件里面

首先在init()里面添加

//定义背景1和背景2
//bg1 = Sprite::create("bg.png");
	 bg2 = Sprite::create("city.png");
//视差节点定义添加
	parallax = ParallaxNode::create();
	this->addChild(parallax);
        //定义速度
	Point dustSpeed = Point(1, 0);
	Point bgSpeed = Point(0.5, 0);
    //第一个参数是要添加的节点,
<//         第二个参数是zorder,决定显示的顺序,
//<span style="font-family: Arial, Helvetica, sans-serif;">     第三个参数是速率,这个如何理解,就是如果你的node移动的速度是1,那么节点的速度是相对于这个1的多少,比如Point是(0.5,0)意思就是当我的parallax向左移动1个单位的时候,bg1移动的就是0.5个单位,y方向上没有速度,</span>
<span style="font-family: Arial, Helvetica, sans-serif;">//</span><span style="font-family: Arial, Helvetica, sans-serif;">       最后一个是坐标,注意这个坐标是相对于node节点的坐标,而不是当前的层。运行起来游戏,我们就会看到bg1移动的慢,而sprite移动的快,这样给人的感觉就会比较真实了。(在图片的原先位置上偏移的距离)</span>
	parallax->addChild(bg1,1,dustSpeed,Point(200,300));
	parallax->addChild(bg2,2,bgSpeed  ,Point(0,0));

	//this->scheduleUpdate();如果要想自动移动就使用计时器,如果要是触摸滑动就使用下面的触摸事件
	auto listener = EventListenerTouchOneByOne::create();
       //listener->setSwallowTouches(true);  屏蔽下面的层
       listener->onTouchBegan = CC_CALLBACK_2(Apage::onTouchBegan, this);
       listener->onTouchMoved = CC_CALLBACK_2(Apage::onTouchMoved, this);
       listener->onTouchEnded = CC_CALLBACK_2(Apage::onTouchEnded, this);
       _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);  
void Apage::update(float dt){//背景自动滑动的时候使用计时器实现
	Point backgroundScrollVel = Point(-1000, 0);
	parallax->setPosition(parallax->getPosition()+backgroundScrollVel*dt);

}
//使用触摸滑动的时候实现的视差移动
void Apage::onTouchMoved(Touch *touch, Event *unused_event){
	Point touchLocation = this->convertTouchToNodeSpace(touch);//获取移动后的当前坐标,并从屏幕坐标点转换成opgl坐标点
	Point oldTouchLocation =convertToNodeSpace(touch->getPreviousLocation());//获取移动前的坐标,以及转换
	Point translation = touchLocation - oldTouchLocation;//移动的点的差距

	parallax->setPosition(parallax->getPosition()+translation);//从新定位

}

bool Apage::onTouchBegan(Touch* touch, Event* event)
{

    return true;
}

void Apage::onTouchEnded(Touch* touch, Event* event)
{
}

时间: 2024-07-31 22:17:55

cocos2d-x 视差节点 ParallaxNode的相关文章

cocos2dx[3.4](26)——视差节点ParallaxNode

[唠叨] 当我们移动时,我们会看到离我们越近的物体,会移动的越快,越远的物体,比如远处的山会移动的很慢,而最远处的物体,比如太阳几乎不动,这个现象叫视差. 而在游戏中模仿视差,可以让玩家感觉到游戏中的角色的确是在移动.Cocos提供了 ParallaxNode 视差节点类,可以很容易的建立一个视差层,你可以控制每一层的视差率.位置和层级的高低. [参考] http://www.cocoachina.com/bbs/read.php?tid=213748 (无限视差节点+阴影仿真) http://

ParallaxNode视差节点实现远景近景的不同层次移动

Cocos2d-x有ParallaxNode视差节点,视察顾名思义,就是造成不同的移动速率的效果. 我想大家都玩过刀塔传奇,他的背景有远景和近景之分,而且你滑动屏幕的时候远景和近景是按照不同的速率移动的: 今天我们就来实现这个效果. 关键词:ScrollView , ParallaxNode 要滑动肯定需要ScrollView了,我们一般都会用cocostudio去构建一个ScrollViewd的组件,在cocostudio里面设置好各种我们需要的属性,导入工程里面就可以直接滑动了: cocos

学习视差节点的心得

之前想要实现关于视差的效果,一直都是想自己写代码,今天偶然看见了关于视差节点的文章,觉得很有用必须学习一下! 首先视差节点的类型名称是ParallaxNode,创建方法很简单: this->pn = ParallaxNode::create(); 创建完成之后,需要往里面添加精灵节点,我再这里创建两个精灵节点 auto background = Sprite::create("HelloWorld.png"); background->setAnchorPoint(Vec2

【Cocos游戏实战】功夫小子第六课之游戏主功能场景的分析和实现

本节课的视频教程地址是:第六课在此 如果本教程有帮助到您,希望您能点击进去观看一下,而且现在注册成为极客学院的会员,验证手机号码和邮箱号码会赠送三天的会员时间,手机端首次也可以领取五天的会员时间哦(即使是购买年会员目前也仅仅是年费260),成为极客学院学习会员可以无限制的下载和观看所有的学院网站的视频,谢谢您的支持! 转载请注明出处:http://blog.csdn.net/suool/article/details/46851335 前言 经过前面五节课的学习我们目前还剩的未完成的工作就是游戏

其他的节点类型

其他的节点类型 尊重原创:http://cn.cocos2d-x.org/tutorial/show?id=2497 你正在使用精灵.标签.动作,而你的游戏也取得了一些进展.除了在前面的章节中描述的基本节点类型,Cocos2d-x还提供了更多高级节点类型,以帮助构建特殊功能.或许你想制作一个基于瓦片地图的游戏?抑或是一个2D的side-scroller游戏?再或者,你可能想要在游戏中添加粒子效果?Cocos2d-x提供了节点对象来帮助你实现这些目标! 瓦片地图 瓦片地图是由一个个的瓦片构成的地图

cocos2D(三)---- 第一cocos2d的程序代码分析

在第一讲中已经新建了第一个cocos2d程序,执行效果例如以下: 在这讲中我们来分析下里面的代码,了解cocos2d的工作原理,看看屏幕上的这个"Hello World"是怎样显示出来的. 这是HelloWorld项目的代码结构: 以下,我们開始分析项目中的这些源文件: 从程序的入口点開始 这么多源文件在这里,到底先看哪个呢?有些人可能会先挑内容少的来看,认为这样就能够轻松解决掉一个源文件了.事实上这是不正确的,这样看起来更加是一头雾水,根本搞不清楚每一个源文件之间的联系.正确的做法应

cocos2d相关

vs的一些概念: 解决方案,一个解决方案包含一或多个项目,具体信息可以看vs帮助页上的介绍(里面的插图很形象),链接:https://msdn.microsoft.com/zh-cn/library/b142f8e7.aspx 在解决方案属性页可以查看和设置项目依赖关系.启动项目 附加依赖项,项目中所使用的源文件的路径,新建的cocos项目的默认路径是Classes目录,而在vs IDE中新建项时的默认路径是项目根目录 vs里没有cocos2dx的模板,需要从命令行用 cocos new命令创建

使用cocos2d-js制作游戏新手引导(二)

本文上接前我一篇博文<使用cocos2d-js制作游戏新手引导(一)> 一.定位器的实现 定位器的目的是实现对场景树中的节点精确定位,获取对象实例,从而获取节点在界面中的位置.矩形大小等信息. 定位器:在cocos2d(js)游戏引擎中用于精确描述场景树中的某一节点的字符串,其实现方式借鉴了css(层叠样式表)选择器设计思路,以下我们将实现一个简单的从定位器字符串解析到节点定位的整个过程. 1.定位符规则 在cocos2d中可以通过节点名字.节点tag值来表示一个节点,在js中还可以使用对象的

Cocos2d之Node类详解之节点树(二)

一.声明 本文属于笔者原创,允许读者转载和分享,只要注明文章来源即可. 笔者使用cocos2d框架的cocos2d-x-3.3rc0版本的源代码做分析.这篇文章承接上篇<Cocos2d之Node类详解之节点树(一)>. 二.简介 节点 一个Node对象. 节点树 上篇文章介绍到,Node类有一个成员变量 Vector<Node*> _children,这是一个保存所有子节点的数组,因为Node类采用遍历树的方式获取子节点进行渲染,所以我管这两个东西的结合叫节点树. 三.源码详解 &