cocos cocos2dx 精灵透明度受到攻击时闪白效果怎么实现

Pages: 1/9
主题 : cocos2dx破碎效果
级别: 侠客
可可豆: 631 CB
威望: 620 点
在线时间: 130(时)
发自: Web Page
来源于&&分类
cocos2dx破碎效果&&&
本帖被 abc88798 执行加亮操作()
这两天把以前的破碎效果又重新做了一遍,用了新算法,效果和性能都有了很大改善。效果见截图:BTW: 最近在做一个开源(准备开源)的特效集合,算是工作的一部分。已经搞了一多半了。(: 已开源,效果还不是很多,而且其中一些还不太满意,先看看,我有时间再改进:或)(: 已移植到3.x,见分支:, 2.x分支:
    [ 此帖被wantnon在 22:00重新编辑 ]
本帖最近评分记录: 共1条评分记录
碉堡。求开源求贡献~
细菌英雄2.0:http://t.cn/zHgo6q0
级别: 版主
UID: 206863
发帖: 39275
可可豆: 389037 CB
威望: 389085 点
在线时间: 824(时)
发自: Web Page
不错。厉害。
级别: 新手上路
可可豆: 6 CB
威望: 6 点
在线时间: 65(时)
发自: Web Page
上传算法吧!!
级别: 侠客
UID: 153961
可可豆: 311 CB
威望: 291 点
在线时间: 81(时)
发自: Web Page
支持开源%YY
级别: 新手上路
可可豆: 71 CB
威望: 71 点
在线时间: 246(时)
发自: Web Page
LZ,你咋能这么牛逼哄哄呢
级别: 新手上路
可可豆: 121 CB
威望: 101 点
在线时间: 45(时)
发自: Web Page
牛逼,求开源!
级别: 侠客
可可豆: 631 CB
威望: 620 点
在线时间: 130(时)
发自: Web Page
回 5楼(coco_chinese) 的帖子
会开源的,有很多类似特效一起开源,我正在整理。
细菌英雄2.0:http://t.cn/zHgo6q0
级别: 侠客
UID: 173442
可可豆: 209 CB
威望: 222 点
在线时间: 234(时)
发自: Web Page
这个要关注一下~
我说,这里可以放广告么?可以的话,那我就不放了~个人博客 (括弧,笑)
级别: 侠客
UID: 153389
可可豆: 271 CB
威望: 189 点
在线时间: 233(时)
发自: Web Page
wantnon是大神,有自己的3d引擎
欢迎来访 http://blog.csdn.net/nmjkl001
级别: 新手上路
UID: 286086
可可豆: 50 CB
威望: 39 点
在线时间: 31(时)
发自: Web Page
期待!!!!!!!!!!!!!!!!!!!
Pages: 1/9
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版Pages: 1/2
主题 : 关于游戏主角精灵闪烁的问题
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
关于游戏主角精灵闪烁的问题&&&
[i=s] 本帖最后由 小龙子 于
15:37 编辑
做了个类似于超级玛丽的冒险小游戏,想在主角碰到怪后闪烁几下,就用了CCBlink,这是按时间闪烁的,所以有时候闪烁之后游戏主角消失了显示不出来,估计是刚好闪烁倒空白帧了,请教下大神们,怎样解决这个问题呢??
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
[i=s] 本帖最后由 hackfantasy 于
15:40 编辑 [/i]那改用次数吧,反正效果不会差的……可以计算好一次循环的时间然后乘以次数等于闪烁时间,但感觉不保险。
或者完了后重新绘一次贴图。
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
[quote][size=2][color=#999999]hackfantasy 发表于
15:39[/color] [url=forum.php?mod=redirect&goto=findpost&pid=10382&ptid=5019][img]static/image/common/back.gif[/img][/url][/size]那改用次数吧,反正效果不会差的……可以计算好一次循环的时间然后乘以次数等于闪烁时间,但感觉不保险。 ...[/quote]大哥能讲得详细点儿么,小弟是新手,不是很懂。我的主角精灵是psprite,用这句话pSprite->runAction(CCBlink::CCBlink::actionWithDuration(0.3f, 3));就是0.3秒闪烁3次。你的意思是把0.3改成背景循环一次的时间再乘以3么?
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
[quote][size=2][color=#999999]hackfantasy 发表于
15:39[/color] [url=forum.php?mod=redirect&goto=findpost&pid=10382&ptid=5019][img]static/image/common/back.gif[/img][/url][/size]那改用次数吧,反正效果不会差的……可以计算好一次循环的时间然后乘以次数等于闪烁时间,但感觉不保险。 ...[/quote]大哥能讲得详细点儿么,小弟是新手,不是很懂。我的主角精灵是psprite,用这句话pSprite->runAction(CCBlink::CCBlink::actionWithDuration(0.3f, 3));就是0.3秒闪烁3次。你的意思是把0.3改成背景循环一次的时间再乘以3么?
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
奇怪……按道理这个方法应该不会出现消失的情况,楼主你检测一下随后的代码……估计是有bug了。我单独测试CCBlink没问题。
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
[quote][size=2][color=#999999]hackfantasy 发表于
16:10[/color] [url=forum.php?mod=redirect&goto=findpost&pid=10389&ptid=5019][img]static/image/common/back.gif[/img][/url][/size]奇怪……按道理这个方法应该不会出现消失的情况,楼主你检测一下随后的代码……估计是有bug了。我单独测试C ...[/quote]我看了我的代码,逻辑上是没有问题的啊!我一前辈说我这可能是因为闪烁是按时间闪烁的,所以就可能有时候碰巧闪烁到空白帧,就显示不出来。可是我感觉应该与帧没有很大关系把,我把主角精灵放到最外层了也不可能是背景给挡住了丫,好奇怪。谢谢你的解答,呵呵!
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
如果闪烁是放在刷新线程中的,有可能停止的时候,会看不见,闪烁只是改变精灵的 可视 值,如果要确保闪烁停止后,能看见精灵,就让精灵执行一个动作,强制设置 精灵 的可视 值 为 true,就可以了
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
[quote][size=2][color=#999999]syhuang 发表于
11:09[/color] [url=forum.php?mod=redirect&goto=findpost&pid=10542&ptid=5019][img]static/image/common/back.gif[/img][/url][/size]如果闪烁是放在刷新线程中的,有可能停止的时候,会看不见,闪烁只是改变精灵的 可视 值,如果要确保闪烁停 ...[/quote]呵呵,谢谢你的启发,刚开始我也试了这个方法,用pSprite->setIsVisible(true);但是闪烁是有时间的,只有在闪烁停止后再设置其可视为真,才会有效吧?
可可豆: * CB
威望: * 点
在线时间: (时)
注册时间: *
最后登录: *
发自: Web Page
也不一定的,只要停止闪烁的动作就可以了
Pages: 1/2
关注本帖(如果有新回复会站内信通知您)
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 关注CVP公众号
扫一扫 浏览移动版sponsored links
cocos2dx中精灵的使用
http://www.cnblogs.com/w/archive//2348471.html
精灵是2D游戏中得主角,这次就总结一下cocos2d-x中精灵的使用。
首先,创建一个变量 CCSprite *pS
加载函数分为两组initWithXXXX和spriteWithXXXX,其主要的区别是使用initWithXXXX的手工作业,而spriteWithXXXX是纯自动化作业。在SpriteWithXXXX中,先分配内存,然后加载,最后加入到autorelease中。而前者只有加载的部分,分配内存以及释放都需要靠自己。下边全部以spriteWithXXXX函数说明。
1,从文件中直接加载
从文件中加载很简单,只需要 CCSprite::spriteWithFile(&文件完整名称&); 其中文件名必须是完整路径,用cocos2d-x生成的项目中Resources目录为根目录。若有一个文件目录为..\Resources\chars\a.png 则 文件名部分就应该为&chars/a.png&。值得注意的是,在WINDOWS下,后缀名大写小写无所谓,但是在MAC下,后缀的大小写必须与文件完全一致,否则无法加载。
此函数还有一个重载函数,后边多一个CCRect参数,可以通过此参数设定加载图片中某个矩形区域。
2,间接加载
有些经常被用到或者需要频繁加载移除的一些资源,如果每次都从文件中加载,程序的效率会变得非常低,通常的做法是将这些文件先读到缓存中,然后再从缓存中加载。
CCTexture2D *pTexture = CCTextureCache::sharedTextureCache()-&addImage(pszFilename);
这个函数将一个图片加入缓存并返回一个CCTexture2D的指针。然后就可以
pSprite = CCSprite::spriteWithTexture(pTexture);
如果一个资源已经被加入到了缓存,addImage是不会再加一遍的。程序中我很少会直接用spriteWithTexture这个函数,因为需要保存pTexture的指针。而在spriteWithFile函数中起内部就已经使用了上述过程。
另一种间接加载方法是利用SpriteFrame。SpriteFrame是把一个大的图片划分掉,每一个矩形区域就是一个SpriteFrame。其实如果这个SpriteFrame在大图中的矩形区域已知的话,可以直接使用CCTexture2D的方式,使用CCRect参数。SpriteFrame给我们提供了一种快捷,简便的方式,就是将这个矩形区域信息保存到plist文件中,并通过一个名称作为索引。生成这种大图也有很多工具,我使用过两种工具,一个是&Zwoptex&是一个在线的免费工具,另一个我常用的是&TexturePacker。这是一个收费软件,不过免费版也能满足基本的需要。这两种工具可以生成一个.plist文件和一个图片文件。存放的时候讲这两个关联的文件放在同一个目录下。在需要使用的时候,我们可以将它加载到缓存中:
CCSpriteFrameCache *pCache = CCSpriteFrameCache::sharedSpriteFrameCache();
pCache-&addSpriteFramesWithFile(&XXXX.plist&);
其中plist文件的路径是完整路径。
然后可以用两种方式加载
pSprite = CCSprite::spriteWithSpriteFrame(pCache-&spriteFrameByName(szFrameName));
pSprite = CCSprite::spriteWithSpriteFrameName(szFrameName);
看起来第一个函数比较麻烦,实际上,第二个函数调用的是第一个函数。。。。值得说明的是,这里的szFrameName不需要完整路径,而是文件名索引。
二,常用操作
精灵加载完了就改各种使用了。
锚点就是所有旋转,移动,缩放的参考点。cocos2-x中默认的锚点是中心点。锚点用比例来表示范围为0-1,(0,0)点代表左下点,(1,1)代表右上点。设置的函数为setAnchorPoint(ccp(0.5, 0.5));
setRotation(angle) 其中angle为角度不是弧度。正数为顺时针旋转,负数为逆时针旋转。
setPosition(ccp(xPos, yPos)) xPos和yPos为相对于父节点锚点的位置。
setScale(s);&& // 整体缩放
setScaleX(s); // 原图片坐标X轴缩放
setScaleY(s); // 原图片坐标Y轴缩放
s为比例,s = 1表示原尺寸。
setSkewX(s); // 原图片坐标X轴倾斜
setSkewY(s); // 原图片坐标Y轴倾斜
X轴向右为正,Y轴向上为正。
setOpacity(s);
s范围0-255,0完全透明,255完全不透明。
setIsVisible(bVisible)
bVisible为bool值true代表可见false代表不可见
setFlipX(bFlip);& // 水平翻转
setFlipY(bFlip);& // 竖直翻转
bFlip为true,则图片翻转,false不翻转。注意,翻转是针对原图片的操作,水平翻转相当于在图片编辑软件里水平翻转一样。不根据锚点进行翻转。翻转以后,设置的以前设置的锚点不会随着图片的翻转而改变。比如设置为锚点,则翻转以后,锚点为翻转后的图片的(是不是有点绕?)
最后,初始化完成后,不要忘了使用addChild加入到父节点,否则是不会显示的。
本文原创版权归 博客园 Terry_龙 所有,转载请标明原创作者及出处,以示尊重! 作者:Terry_龙 原文:http://www.cnblogs.com/TerryBlog/archive//2759506.html
记得以前学习XNA游戏开发的时候,操作精灵角色的攻击或者行走动作都是给出特定的几张序列图或者一张长序列图然后通过切 ...
什么是精灵(CCSprite),在官网文档中是这么定义的A cocos2d CCSprite is similar to sprites you find in other game engines. It is a 2D image that can be moved, rotated, scaled, animated, and undergo othe ...
场景(Scenes)场景在cocos2d-x中是CCScene类实现的,是应用程序流中独立的一部分.一个cocos2dx应用程序可以有许多场景,但是在某一时刻,只有一个场景在运行.比如,你有一个游戏,有以下场景:介绍.菜单.关卡1,过渡动画1,关卡2,胜利动画,失败动画,比分.设计者可以把每个场景当成一个独立的应用程序来设计,最后用一些少量的胶水代码,讲这 ...
最近在研究cocos,互联网行业中,手游业最近的表现是非常的火,加上本身对游戏有浓厚兴趣,所以便染指了游戏引擎~ 这次的废话就这么简短吧,因为这次记录的东西本身就很少.
在cocos中,为精灵帧添加缓存可以通过下面的方法 cc.spriteFrameCache.addSpriteFrames(url, texture) 其中,第一个参数是一个 plist ...
Flash中导出可在Cocos2d-x中使用的精灵表 1.打开fla文件,在库中选择要导出精灵表的元件,右键--生成Sprite表 2.选择数据格式为Cocos2D v2 3.导出文件如下: plist文件 导出的文件可在程序里面直接使用,但有个问题,可以看到plist文件中动画帧的key是以&元件名称&+序号(前面补0)组成的,如果这样 ...1450人阅读
cocos2dx(13)
通过新建一个空白的画布 RenderTexture ,然后将精灵绘制在这块画布上,获取到单独的Image,getData到Image里面的数据后,对每个像素增加一定的值,实现高亮效果
1.已经绘制的精灵无法通过这个来进行修改,例如已经addchild显示在屏幕中的精灵
auto star_sprite = static_cast&Sprite* &(rootNode-&getChildByName("star_1"));
Sprite* new_star = Sprite::createWithTexture(star_sprite-&getTexture());
auto blue = Sprite::create("star.png");
auto highlight_star = getHighlightSprite(new_star);
Point p = star_sprite-&getPosition();
rootNode-&removeChildByName("star_1");
rootNode-&addChild(highlight_star);
highlight_star-&setName("star_1");
highlight_star-&setPosition(p);
需要获取后替换掉
2.Director::getInstance()-&getRenderer()-&render();这句很重要,因为在cocos2dx 3.0中,绘制是下一帧才进行绘制的,如果没有这个可能会导致黑屏或者下一帧才出现
cocos2d::Sprite* HelloWorld::getHighlightSprite(Sprite* normalsprite) {
if (!normalsprite) {
return NULL;
//normalsprite = Sprite::create("star.png");
Point p = normalsprite-&getAnchorPoint();
normalsprite-&setAnchorPoint(Vec2(0, 0));
RenderTexture *outTexture = RenderTexture::create(normalsprite-&getContentSize().width, normalsprite-&getContentSize().height, Texture2D::PixelFormat::RGBA8888);
outTexture-&retain();
outTexture-&beginWithClear(0, 0, 0, 0);
normalsprite-&visit();
outTexture-&end();
Director::getInstance()-&getRenderer()-&render();
normalsprite-&setAnchorPoint(p);
Image* image = outTexture-&newImage();
//Image *image = new Image();
//image-&initWithImageFile("blue.jpg");
unsigned char* pdata = image-&getData();
if (!image-&getData()) {
CCLOG("hehe");
CCLOG("%s",pdata);
int index = 0;
for (int i = 0; i & image-&getHeight(); i++) {
for (int j = 0; j & image-&getWidth(); j++) {
int iHightlightPlus = 50;
int nPos = index;
unsigned int iB = pdata[index++];
unsigned int iG = pdata[index++];
unsigned int iR = pdata[index++];
unsigned int iO = pdata[index++];
//CCLOG("iO=%d", iO);
iB = (iB + iHightlightPlus) & 255 ? 255 : (iB + iHightlightPlus);
iG = (iG + iHightlightPlus) & 255 ? 255 : (iG + iHightlightPlus);
iR = (iR + iHightlightPlus) & 255 ? 255 : (iR + iHightlightPlus);
pdata[nPos] = iB;
pdata[nPos + 1] = iG;
pdata[nPos + 2] = iR;
Texture2D* texture2D = new Texture2D;
texture2D-&initWithImage(image);
Sprite* outputSprite = Sprite::createWithTexture(texture2D);
texture2D-&release();
CCLOG("okay!!!!");
return outputS

我要回帖

更多关于 cocos2dx获取精灵坐标 的文章

 

随机推荐