先下个效果图:


这个是从网上下载的例子,用来学习的。。。

用到的类有上面这些:接下来我就把它用的好的地方给记录下来。

1.HelloWorld类:

先预加载资源。

void HelloWorld::PreloadMusicAndPicture()
{
//png加入全局cache中 plist存储了
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("ui/shoot_background.plist");
SpriteFrameCache::getInstance()->addSpriteFramesWithFile("ui/shoot.plist");
// 音效
CocosDenshion::SimpleAudioEngine::getInstance()->preloadBackgroundMusic("sound/background-music1.mp3");

auto copyRight = Sprite::createWithSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("shoot_copyright.png"));

播放动画:

// Animation是由许多精灵帧组成,可以设置间隔时间,持续时间等,它实际上是包含着一组数据
Animation* animation=Animation::create();
animation->setDelayPerUnit(0.2f); // 间隔时间
animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading1.png"));
animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading2.png"));
animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading3.png"));
animation->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName("game_loading4.png"));

// 通过帧数据创建帧动作(创建序列帧动画)
Animate* animate=Animate::create(animation);
Repeat* repeat=Repeat::create(animate,3); // 重复一个动作的次数
CallFuncN* repeatdone=CallFuncN::create(CC_CALLBACK_1(HelloWorld::loadingDone,this)); // 创建回调函数 CC_CALLBACK_1 代表一个参数
Sequence* sequence=Sequence::create(repeat,repeatdone,NULL);// 让多个动作按照前后顺序逐一执行 repeatdone 放在 repeat前的话,就不会播放执行3次序列帧的动画
loading->runAction(sequence); // 执行上述动画

回调:注意它这里带了个Node参数,这样可以方便的获得对象。

void HelloWorld::loadingDone( Node* pNode )
{
auto scene = GameLayer::createScene();
TransitionCrossFade *pAnimateScene = TransitionCrossFade::create(1,scene);
Director::getInstance()->replaceScene(pAnimateScene);
}

// 背景无限滚动:
auto backgroundA = Sprite::create("ui/shoot_background/background.png");
backgroundA->setTag(e_BackgroundA);
backgroundA->setAnchorPoint(Point::ZERO);
backgroundA->setPosition(Point::ZERO);
this->addChild(backgroundA);

auto backgroundB = Sprite::create("ui/shoot_background/background.png");
backgroundB->setTag(e_BackgroundB);
backgroundB->setAnchorPoint(Point::ZERO);
backgroundB->setPosition(Point::ZERO);
this->addChild(backgroundB);

// 每帧都调用的函数
this->schedule(schedule_selector(GameLayer::backgroundMove));

void GameLayer::backgroundMove(float dt)
{
Sprite *pBackgroundA = (Sprite*)this->getChildByTag(EnBackground::e_BackgroundA);
Sprite *pBackgroundB = (Sprite*)this->getChildByTag(EnBackground::e_BackgroundB);

pBackgroundA->setPositionY(pBackgroundA->getPositionY() - 2);
pBackgroundB->setPositionY(pBackgroundA->getPositionY() + pBackgroundA->getContentSize().height);
if (0 == pBackgroundB->getPositionY())
{
pBackgroundA->setPositionY(0);
}
}

4.创建精灵,并且触摸移动不出屏幕。

auto sprite = Sprite::create("ui/shoot/hero1.png");
sprite->setPosition(Point(winSize.width/2,sprite->getContentSize().height/2));
sprite->setTag(AIRPLANE);
this->addChild(sprite);

// 我机触摸
auto listener = EventListenerTouchOneByOne::create();
listener->setSwallowtouches(true);

listener->onTouchBegan = [](Touch* touch,Event *event){
auto target = static_cast<Sprite*>(event->getCurrentTarget());

Point locationInNode = target->convertToNodeSpace(touch->getLocation());
Size s = target->getContentSize();
Rect rect = Rect(0,s.width,s.height);

if (rect.containsPoint(locationInNode))
{
return true;
}
else
{
return false;
}
};

listener->onTouchMoved =[](Touch* touch,Event *event){
auto target = static_cast<Sprite*>(event->getCurrentTarget());
target->setPosition(target->getPosition() + touch->getDelta());
};
listener->onTouchEnded = [=](Touch* touch,Event* event){
};

//将触摸监听添加到eventdispacher中去
_eventdispatcher->addEventListenerWithSceneGraPHPriority(listener,sprite);

// 每帧都调用的函数
this->schedule(schedule_selector(PlaneLayer::checkBorder));

return true;
}

void PlaneLayer::checkBorder( float dt )
{
//进行边界判断,不可超出屏幕 Point location = this->getChildByTag(AIRPLANE)->getPosition(); Size winSize=Director::sharedDirector()->getWinSize(); // 获取opengl视图窗口大小 Size planesize=this->getChildByTag(AIRPLANE)->getContentSize(); // 返回的就是这个矩形的大小,只是是逻辑尺寸,而不是像素的 if (location.x<planesize.width/2) { location.x=planesize.width/2; } if (location.x>winSize.width-planesize.width/2) { location.x=winSize.width-planesize.width/2; } if (location.y<planesize.height/2) { location.y=planesize.height/2; } if (location.y>winSize.height-planesize.height/2) { location.y=winSize.height-planesize.height/2; } this->getChildByTag(AIRPLANE)->setPosition(location); }

cocos3.2学习微信打飞机的更多相关文章

  1. CSS中实现动画效果-附案例

    这篇文章主要介绍了 CSS中实现动画效果并附上案例代码及实现效果,就是CSS动画样式处理,动画声明需要使用@keyframes name,后面的name是人为定义的动画名称,下面我们来看看文章的具体实现内容吧,需要的小伙伴可以参考一下

  2. ios – 围绕其中心点旋转UIImageView?

    我在UIImageView中有一个透明的png,我想围绕它的中心点旋转.代码应该非常简单:图像以正确的速度/时间和直角旋转,但其位置会发生偏移.这是一个正在发生的事情的例子:灰色方块只是为了在屏幕上显示位置.透明的png是另一个图.白色虚线显示UIImageView的中心.图像的左侧显示图像的原始位置,右侧显示使用上述代码旋转后的图像.黑色和白色圆圈位于图像文件的中心.有什么东西我不见了吗?

  3. ios – 将UIView的框架和角半径合在一起

    码:此代码是UIView的扩展.解决方法我像这样调整我的圈子视图:

  4. ios – 如何在Cocos2D 3.x中为CCSprite制作动画?

    你知道如何在新的Cocos2Dv3.x中动画CCSprite吗?许多类都被改变了,旧的方法似乎不起作用.任何的想法?谢谢.额外信息解决方法这是它的工作原理:

  5. ios – didUpdateLocations从未调用过

    我正在尝试获取用户的位置.为此,我在info.plist中设置了以下属性:我还在viewDidLoad方法中添加了以下代码以及下面的函数.问题是locationManager(manager,didUpdate…

  6. ios – 重命名并重写为Swift后对象解码崩溃

    由于我们已经重命名了(Bestemming–>Place)类并将其从Objective-c重写为Swift,因此一些用户会遇到崩溃.我们正在尝试使用NSCoding原则从NSUserDefaults加载对象.碰撞:班级:从NSUserDefaults阅读:崩溃日志说它在第0行崩溃,这是注释所以我认为它在init方法中崩溃,我认为它与一个null为空但不能为null的对象有关.我尝试过的:>尝试在S

  7. 适用于iOS的Google Maps SDK不断增加内存使用量

    我已经构建了一个在地图上显示标记的简单应用程序,我从服务器的JSON文件加载其x,y,标记是可点击的,所以一旦你在任何标记上它将你带到另一个UIViewController(我们将它命名为BViewController).我已经监视了内存使用情况,所以每次我从BViewController返回到MapViewController(里面的地图)时,它只是内存使用量的两倍我尝试将其设置为nill或从s

  8. ios5 – UIPageViewController转换速度/持续时间?

    有没有办法改变页面卷曲过渡的默认持续时间?这是快速的方式然后我希望它会是?谢谢沙尼解决方法Hy,这是使用默认转换来卷曲页面和指定卷曲速度的方法.祝你工作顺利.

  9. ios – 未提示在应用程序中启用位置服务

    更新:这不是重复.我已经在info.plist中添加了所需的密钥,如我原始问题中所述,问题仍然存在.我已经尝试了各种组合的所有三个键.在任何人感到不安之前,我已阅读了许多AppleDev论坛帖子和堆栈溢出帖子,无法弄清楚为什么我的应用程序拒绝提示用户允许使用时授权.我已将以下密钥添加到我的Info.plist文件中,并附带一个String值:然后我写了(在Swift和Obj-C中)应该提示用户的代

  10. ios – 在UIViewController显示为3DTouch预览时检测UITouches

    是否有可能从UIViewController检测触摸并获取触摸的位置,UIViewController当前用作3DTouch的previewingContext视图控制器?

随机推荐

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

返回
顶部