其实整个消灭星星开发也差不多了,为了使游戏好看些,不如为游戏添加一些特效

1.星星消除

有没有人发现,如果仅仅用简单的removeFromParentAndCleanUp方法来消除星星,会一下子消失,如果我们想一颗颗星星挨个地消失,不妨可以采用一下方法

在StarMatrix的update函数里面加入一个参数delta,这与cocos2dx的update函数的一样表示上一帧到这一帧的间隔时间,当间隔时间达到一定时间后,消除星星。

void StarMatrix::updateStar(float delta){
	
	for(int i = 0;i < ROW_NUM;i++){
		for(int j = 0;j< COL_NUM;j++){
			if(stars[i][j]!=nullptr){
				stars[i][j]->updatePosition();
			}
		}
	}
	if(needClear){
		clearSumTime += delta;
		if(clearSumTime > ONE_CLEAR_TIME){
			clearMatrixOneByOne();
			clearSumTime = 0;
		}
	}
	
}

needClear是一个flag,当游戏判断不能再继续后(看上一节),这个flag变为true,开始消除剩下的星星

clearSumTime是一个累加器

ONE_CLEAR_TIME就是每颗星星消除的时间


2.连击加分信息

一般消除一次星星都会有连击信息和加多少分的信息。我是采用一个固定在GameLayer的Label,通过设置其内容以及是否可见(visible)来实现


3.连击combo效果


当达到5连击,7连击,10连击或以上的时候,会弹出一个combo效果。


其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。

源码

ComboEffect.h

#ifndef _COMBO_EFFECT_H_
#define _COMBO_EFFECT_H_
#include "cocos2d.h"
using namespace cocos2d;

void showComboEffect(int size,Node* node);
#endif

ComboEffect.cpp

#include "ComboEffect.h"
void showComboEffect(int size,Node* node){
	if(size<5)
		return;
	Size visibleSize = Director::getInstance()->getVisibleSize();
	Sprite* comboSprite;
	if(size>=10){
		comboSprite = Sprite::create("combo_3.png");
	}else if(size>=7){
		comboSprite = Sprite::create("combo_2.png");
	}else{
		comboSprite = Sprite::create("combo_1.png");
	}

	comboSprite->setPosition(Point(visibleSize.width/2,visibleSize.height/2));
	node->addChild(comboSprite);

	Blink* blink = Blink::create(1.0f,5);
	CallFunc* remove = CallFunc::create([=](){comboSprite->removeFromParentAndCleanup(true);});
	Sequence* action = Sequence::create(blink,remove,nullptr);
	comboSprite->runAction(action);
}


4.消除星星粒子效果

消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎

对于粒子特效不了解得可以先去cocos2dx中文社区里面找几篇文章看看。这里直接贴出代码。

StarParticle.h

#ifndef _STAR_PARTICLE_H_
#define _STAR_PARTICLE_H_
#include "cocos2d.h"
using namespace cocos2d;
void showStarParticleEffect(int color,Point position,Node* node);
Color4F getColor4F(int color);
#endif

StarParticle.cpp

#include "StarParticle.h"
#include "Star.h"
void showStarParticleEffect(int color,Node* node){
	ParticleExplosion* effect = ParticleExplosion::create();
	effect->setTexture(Director::getInstance()->getTextureCache()->addImage("star.png"));
	effect->setTotalParticles(15);
	effect->setStartColor(getColor4F(color));
	effect->setStartColorVar(Color4F(0,1));
	effect->setEndColor(getColor4F(color));
	effect->setEndColorVar(Color4F(0,1));
	effect->setStartSize(25.0f);
	effect->setGravity(Point(0,-300));
	effect->setLife(1.0f);
	effect->setSpeed(200);
	effect->setSpeedVar(10);
	effect->setPosition(position);
	node->addChild(effect);
}

Color4F getColor4F(int color){
	switch(color){
	case Star::color::PURPLE:
		return Color4F(0.74,0.30,0.99,1);
		//return Color4F(189,78,253,1);
	case Star::color::BLUE:
		return Color4F(84/255.0f,203/255.0f,254/255.0f,1);
	case Star::color::RED:
		return Color4F(253/255.0f,80/255.0f,126/255.0f,1);
	case Star::color::YELLOW:
		return Color4F(253/255.0f,234/255.0f,84/255.0f,1);
	case Star::color::GREEN:
		return Color4F(132/255.0f,226/255.0f,111/255.0f,1);
	}
	return Color4F(1,1,0);
}

只要在每次消除星星后(即removeFromParentAndCleanUp后),调用这个showStarParticleEffect方法,就可以给人一种好像是星星碎成小星星散落的效果。

利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效的更多相关文章

  1. ios – 当pod的新版本可用时,“pod update”是否会覆盖我的代码更改?

    我的更改会被覆盖吗?你能描述为什么是或为什么不?关于如何做到这一点.

  2. ios – 什么是Sprite Kit中的SKSpinLockSync以及如何解决它

    我收到一个带有以下堆栈跟踪的错误报告,我不知道问题是什么.我已经看到这样的建议,这可能是由于在纹理图集中有一个发射器的图像,或者是在添加的同一个运行循环中移除了一个发射器,但我认为这些都不会发生.这是一个零星的问题,我无法再创造它.我只在bug报告中看到它.我很乐意帮忙.编辑:我现在意识到我在几种不同的情况下得到SKSpinLockSync问题,并不总是与发射器有关.我认为,我经常使用发射器看到它

  3. Carthage使用解决部分Swift运行时的问题

    1、首先,简单的利用Carthagehttps://github.com/Carthage/Carthage要求进行简单测试使用,建立一个demo测试2、可能由于xcode版本原因在:类似我执行时出现的错误:Argo.framework是用旧的编译器编译的(估计下载的那个包是用Xcode7编译因此在工程文件目录下需要执行将所有需要的包下载下来(原本执行update操作会直接将运行好的framewo

  4. pod install 与 pod update的区别

    podinstall是安装Podfile中指定版本的第三方库。podupdate是安装最新的版本,如果之前已经安装了,但是有新版本,会更新版本。

  5. android – 如何使用Cursor Adapter刷新listView

    我使用CursorAdapter创建了一个ListView.现在我正在尝试更新ListView并将值刷新到ListView.但我无法弄明白.如何使用Loader或changeCursor()来刷新我的ListView下面是我设置CursorAdapter的代码://SucessFully在这里完成我的按钮onClick我正在将值更新到数据库中//SucessFully完成我的UpdateData方法:CursorDemo类任何帮助都得到赞赏……});解决方法如果CursorDemo扩展了CursorAda

  6. Android通知操作未调用待处理的服务意图

    我试图让我的通知有一个按钮,当点击它应该调用我的服务,这是控制音频播放.这是我的意图通知这是我服务的开始从通知中的操作调用时,永远不会触发日志.但该服务由应用程序中的按钮使用,并且工作正常.按以下命令调用日志.解决方法使用:代替:^^这用于从通知中启动活动.

  7. Android Room持久性库@Update无效

    解决方法我很抱歉发布这个作为答案,但我不允许添加一个简单的评论,所以这是我的想法:您是否尝试过仅使用insertCars()而不是updateCars()?无论如何,看起来你的isCarsEmpty()LiveData回调一直被触发,因为当调用观察者时,数据库再次被改变.我不太确定你想要实现什么.

  8. android – PhotoViewAttacher清除imageView边界和缩放级别

    我正在使用PhotoView库来实现放大的AndroidImageView.缩放效果很好.我在ImageView中设置低质量的图像,然后开始以高质量下载新的图像,这将取代低质量的图像.如果用户放大低质量的图像–高质量的图像将替换现有图像,缩放级别将清除:(加载高质量图像后如何保存缩放级别?

  9. android – 在Appwidget中的一个视图中使用两个pendingIntent

    我有一个小部件类,它在窗口小部件的布局中只有一个视图.当用户点击窗口小部件时,它会更新并启动没有问题的活动.此外,小部件每30分钟更新一次,并在小部件更新后启动活动.我的问题是:如何自动更新窗口小部件才能自动更新?

  10. mybatis 获取更新(update)记录的id之&lt;selectKey&gt;用法说明

    这篇文章主要介绍了mybatis 获取更新(update)记录的id之<selectKey>用法说明,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

随机推荐

  1. 【cocos2d-x 3.x 学习笔记】对象内存管理

    Cocos2d-x的内存管理cocos2d-x中使用的是上面的引用计数来管理内存,但是又增加了一些自己的特色。cocos2d-x中通过Ref类来实现引用计数,所有需要实现内存自动回收的类都应该继承自Ref类。下面是Ref类的定义:在cocos2d-x中创建对象通常有两种方式:这两中方式的差异可以参见我另一篇博文“对象创建方式讨论”。在cocos2d-x中提倡使用第二种方式,为了避免误用第一种方式,一般将构造函数设为protected或private。参考资料:[1]cocos2d-x高级开发教程2.3节[

  2. 利用cocos2dx 3.2开发消灭星星六如何在cocos2dx中显示中文

    由于编码的不同,在cocos2dx中的Label控件中如果放入中文字,往往会出现乱码。为了方便使用,我把这个从文档中获取中文字的方法放在一个头文件里面Chinese.h这里的tex_vec是cocos2dx提供的一个保存文档内容的一个容器。这里给出ChineseWords,xml的格式再看看ChineseWord的实现Chinese.cpp就这样,以后在需要用到中文字的地方,就先include这个头文件然后调用ChineseWord函数,获取一串中文字符串。

  3. 利用cocos2dx 3.2开发消灭星星七关于星星的算法

    在前面,我们已经在GameLayer中利用随机数初始化了一个StarMatrix,如果还不知道怎么创建星星矩阵请回去看看而且我们也讲了整个游戏的触摸事件的派发了。

  4. cocos2dx3.x 新手打包APK注意事项!

    这个在编译的时候就可以发现了比较好弄这只是我遇到的,其他的以后遇到再补充吧。。。以前被这两个问题坑了好久

  5. 利用cocos2dx 3.2开发消灭星星八游戏的结束判断与数据控制

    如果你看完之前的,那么你基本已经拥有一个消灭星星游戏的雏形。开始把剩下的两两互不相连的星星消去。那么如何判断是GameOver还是进入下一关呢。。其实游戏数据贯穿整个游戏,包括星星消除的时候要加到获得分数上,消去剩下两两不相连的星星的时候的加分政策等,因此如果前面没有做这一块的,最好回去搞一搞。

  6. 利用cocos2dx 3.2开发消灭星星九为游戏添加一些特效

    needClear是一个flag,当游戏判断不能再继续后,这个flag变为true,开始消除剩下的星星clearSumTime是一个累加器ONE_CLEAR_TIME就是每颗星星消除的时间2.连击加分信息一般消除一次星星都会有连击信息和加多少分的信息。其实这些combo标签就是一张图片,也是通过控制其属性或者runAction来实现。源码ComboEffect.hComboEffect.cpp4.消除星星粒子效果消除星星时,为了实现星星爆裂散落的效果,使用了cocos2d提供的粒子特效引擎对于粒子特效不了

  7. 02 Cocos2D-x引擎win7环境搭建及创建项目

    官网有搭建的文章,直接转载记录。环境搭建:本文介绍如何搭建Cocos2d-x3.2版本的开发环境。项目创建:一、通过命令创建项目前面搭建好环境后,怎样创建自己的Cocos2d-x项目呢?先来看看Cocos2d-x3.2的目录吧这就是Cocos2d-x3.2的目录。输入cocosnew项目名–p包名–lcpp–d路径回车就创建成功了例如:成功后,找到这个项目打开proj.win32目录下的Hello.slnF5成功了。

  8. 利用cocos2dx 3.2开发消灭星星十为游戏添加音效项目源码分享

    一个游戏,声音也是非常的重要,其实cocos2dx里面的简单音效引擎的使用是非常简单的。我这里只不过是用一个类对所有的音效进行管理罢了。Audio.hAudio.cpp好了,本系列教程到此结束,第一次写教程如有不对请见谅或指教,谢谢大家。最后附上整个项目的源代码点击打开链接

  9. 03 Helloworld

    程序都有一个入口点,在C++就是main函数了,打开main.cpp,代码如下:123456789101112131415161718#include"main.h"#include"AppDelegate.h"#include"cocos2d.h"USING_NS_CC;intAPIENTRY_tWinMain{UNREFERENCED_ParaMETER;UNREFERENCED_ParaMETER;//createtheapplicationinstanceAppDelegateapp;return

  10. MenuItemImage*图标菜单创建注意事项

    学习cocos2dx,看的是cocos2d-x3.x手游开发实例详解,这本书错误一大把,本着探索求知勇于发现错误改正错误的精神,我跟着书上的例子一起调试,当学习到场景切换这个小节的时候,出了个错误,卡了我好几个小时。

返回
顶部