
锚点(Anchor) 是节点的另一个重要属性,它决定了节点以自身约束框中的哪一个点作为整个节点的位置。我们选中节点后看到变换工具出现的位置就是节点的锚点位置。
1锚点由 anchorX 和 anchorY 两个值表示,它们是通过节点尺寸计算锚点位置的乘数因子,范围都是 0 ~ 1 之间。(05, 05) 表示锚点位于节点长度乘 05 和宽度乘 05 的地方,即节点的中心。
2锚点属性设为 (0, 0) 时,锚点位于节点本地坐标系的初始原点位置,也就是节点约束框的左下角。
3锚点属性设为 (1, 1) 时,锚点位于节点本地坐标系的右上角。
同理,锚点在其他位置是,直接在该位置画坐标系即可知道节点A下节点B的位置。
4如果改变节点锚点时,会以原来锚点原点为标准。
以上就是对creator锚点的分析,不知道各位看懂了木有。。。
CocosCreatorDrawing
Cocos Creator完成的一个画板
GitHub - Juefeiye/CocosCreatorDrawing: CocosCreator画板 喜欢就star吧!!!
画板最终实现效果
在cocos论坛里面很多关于画板橡皮擦的问题,特别是有背景的橡皮擦问题,都没有什么好的解决方案。
找了很多资料和自己的摸索之后,最后有了这么一个带有完整功能的画板,下面来一步步看怎么实现的吧。
这里使用的是RenderTexture来解决
首先创建好renderTexture,加入到node中来,因为renderTexture是cc的组件,所以我们只能用_sgnode来添加
接着我们在touch事件中去实现绘画功能,这里我使用的是drawNode方式,官方提供的Graphics还未找到橡皮擦方法。
这个时候基本的绘画功能就实现了
这个是本次的重点。这个橡皮擦也是搞得我头破血流的。
其实如果没有背景,直接改成背景色线条就可以当橡皮擦用了,主要是需求要在有背景的情况下可以擦除,那么来探索下吧!
资料翻了不少,只看到H5有canvas的一些接口可以用,可是cocos怎么用到这些接口呢,对应的一些属性怎么取到呢。
不经意间我发现了canvas里面的getContext()和一个globalCompositeOperation属性,这个属性好像是解决h5橡皮擦的关键,那么我在cocos里面能找到这个属性是不是就可以解决橡皮擦问题了。
首先,h5里面是用canvas来绘画的,cocos creator这里用的是renderTexture,那么这2者会不会有什么关联呢。果不其然,我在renderTexture下找到了这2个关键的属性
有了这2个属性之后,我们就可以开始干活了!这里的实现详细可以看 HTML 5 canvas globalCompositeOperation 属性
这里要注意canvas坐标系和cocos的坐标系不一样
到这里就解决了有背景的橡皮擦问题了,我们直接使用最底层的canvas。橡皮擦效果
其实画板里面还有贴纸功能,还带用动效的贴纸,这个功能如果有需要的话再详细解读
GitHub - Juefeiye/CocosCreatorDrawing: CocosCreator画板 喜欢就star吧!!!
CocosCreator2X 左右滑动判断前言
有一个左右滑动屏幕,切换页面得需求,随手记录一下
代码
const {
ccclass,
property
} = cc_decorator;
@ccclass
export default class TestPanel extends ccComponent {
/
鼠标按下位置
@private
@type {ccVec2}
@memberof TestPanel
/
private clickPos: ccVec2;
start() {
thisnodeon(ccNodeEventTypeTOUCH_START, thisClickDown, this);
thisnodeon(ccNodeEventTypeTOUCH_END, thisClickUp, this);
}
ClickDown(event: ccEventEventMouse) {
thisclickPos = eventgetLocation();
}
ClickUp(event: ccEventEventMouse) {
if (thisclickPos == null) {
return;
}
//比较开始坐标和结束坐标
// consolelog("起始位置:"+thisclickPos);
// consolelog("结束位置:"+eventgetLocation());
// let distance = thisclickPossub(eventgetLocation())mag();
let distance = Mathabs(eventgetLocation()x - thisclickPosx);
consolelog("滑动距离distance:" + distance);
if (thisclickPosx < eventgetLocation()x) {
if (distance > 250) {
consolelog("从左往右滑动" + thiscenterParentpositionx);
}
} else if (thisclickPosx > eventgetLocation()x) {
if (distance > 250) {
consolelog("从右往左滑动" + thiscenterParentpositionx);
}
} else {
//原地不动
}
}
onDestroy(){
thisnodeoff(ccNodeEventTypeTOUCH_START, thisClickDown, this);
thisnodeoff(ccNodeEventTypeTOUCH_END, thisClickUp, this);
在cocos三维坐标中,要确定圆,需要知道法线和半径。首先,根据法线的方向,可以确定圆的轴向,即圆心所在的直线。然后,根据半径,可以确定圆心到圆上任意一点的距离,从而确定圆的大小。最后,根据圆心所在的直线和圆的大小,可以确定圆的位置,从而完成圆的确定。
上一篇文章写了星星生成的逻辑,详情请看 Cocos Creator开发游戏消灭星星——星星生成
星星消除是发生在用户点击之后,所以需要处理用户触摸 *** 作。在上一篇制作星星预制时有提及,在脚本组件 starCtrjs 的start函数里监听触摸。
消除星星是消除上下左右相连的星星,所以需要根据用户点击的星星找到其他相连的星星。在Utils中增加方法needRemoveList:
现在来完成触摸处理逻辑:
通过用户点击的星星坐标找到与其相连的星星们,然后发射delete_stars事件,通知地图消除星星。关于监听和发射时间参考官方文档 监听和发射事件 。
在matrixCtrjs的onLoad方法中添加事件监听
先添加几个属性来记录消除数据
在回调函数中处理消除逻辑
上一篇 说过,动画和特效主要放在节点 ActionRoot 中处理。如图,combo特效就在combNode节点中播放。
asset、atlasAsset分别存储骨骼动画资源,combName中存储骨骼动画的名字,和资源数组一一对应,_anim是dragonBones组件。
playComb即是播放特效的方法。
combCtr是脚本组件matrixCtr中的属性,即是场景中ActionRoot节点的脚本组件。
将需要消除的星星对应的坐标清空(赋值-1)
按规则星星是一个一个消除的,所以bomb会递归调用,直到所有星星都消除。在消除星星的同时,有分数计算和动画逻辑。
星星的移除是在方法 bombStar 中处理的,在创建星星的时候使用了对象池,所以移除时把它重新放入对象池。
在移除星星的同时,伴随有星星爆炸的特效。 starParticle 是一个预制,层级很简单,在一个空节点中,添加Particle System组件和脚本组件particleCtr。
Particle System组件设置自动移除,在属性检查器中勾选 Auto Remove On Finish 选项。
我们知道一次消除星星方块越多,得分越高。
分数动画有几种:
动画在actionCtrjs中处理:
因为分数也会被频繁的创建和移除,所以也使用了对象池,分数的预制制作后面介绍。
与单个方块的分数动画一样,消除总得分动画:
层级结构很简单,都是空节点下加一个Label节点。父节点上都有一个脚本组件partScore、totalScore。
脚本也很简单,setScore方法给Label赋值。
与单个分数不同的,总得分的Label动画使用Creator的Animation编辑器制作。所以,预制中需要在节点label中添加Animation组件,在这里我们在添加一个脚本组件totalScoreLabel,这个脚本主要处理Animation动画的事件回调方法。
制作游戏时,我们最常用的格式是png,因为png可以有透明的背景,这样在游戏显示是,透明的部分不会显示,只显示我们要的那部分。但是,透明的部分依然是的一部分,当你制作了一个非矩形的按钮,会有相当多的透明部分点击有效,那么如何做到点击透明部分无效呢?这就是本片文章要讲的:获取图像像素值。当然不仅仅在制作非矩形按钮时有用,在游戏中的很多涉及处理功能的地方也大有用途。
废话不多说,直接贴源码(Cocos2d-x 3x版本):
HelloWorldSceneh文件
HelloWorldScenecpp文件:
在GetRGBA函数中,调用了OpenGL的接口glReadPixels,它用于读取一些像素。当前可以简单理解为“把已经绘制好的像素(它可能已经被保存到显卡的显存中)读取到内存”。
glReadPixels函数总共有七个参数。前四个参数可以得到一个矩形,该矩形所包括的像素都会被读取出来。(第一、二个参数表示了矩形的左下角横、纵坐标,坐标以窗口最左下角为零,最右上角为最大值;第三、四个参数表示了矩形的宽度和高度)
第五个参数表示读取的内容,例如:GL_RGB就会依次读取像素的红、绿、蓝三种数据,GL_RGBA则会依次读取像素的红、绿、蓝、alpha四种数据,GL_RED则只读取像素的红色数据(类似的还有GL_GREEN,GL_BLUE,以及GL_ALPHA)。如果采用的不是RGBA颜色模式,而是采用颜色索引模式,则也可以使用GL_COLOR_INDEX来读取像素的颜色索引。目前仅需要知道这些,但实际上还可以读取其它内容,例如深度缓冲区的深度数据等。
第六个参数表示读取的内容保存到内存时所使用的格式,例如:GL_UNSIGNED_BYTE会把各种数据保存为GLubyte,GL_FLOAT会把各种数据保存为GLfloat等。
第七个参数表示一个指针,像素数据被读取后,将被保存到这个指针所表示的地址。注意,需要保证该地址有足够的可以使用的空间,以容纳读取的像素数据。例如一幅大小为256256的图象,如果读取其RGB数据,且每一数据被保存为GLubyte,总大小就是:2562563 = 196608字节,即192千字节。如果是读取RGBA数据,则总大小就是2562564 = 262144字节,即256千字节。
注意:glReadPixels实际上是从缓冲区中读取数据,如果使用了双缓冲区,则默认是从正在显示的缓冲(即前缓冲)中读取,而绘制工作是默认绘制到后缓冲区的。因此,如果需要读取已经绘制好的像素,往往需要先交换前后缓冲。
以上就是关于cocos creator锚点分析全部的内容,包括:cocos creator锚点分析、Cocos Creator 实现画板和橡皮擦(有背景)、cocos昵称左右滚动等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)