• cocos2dx 以子弹飞行为例解说拖尾效果类CCMotionStreak


    在游戏开发中,有时会须要在某个游戏对象上的运动轨迹上实现渐隐效果。比方子弹的运动轨迹,假设不借助引擎的帮助,这样的效果则须要通过大量的图片来实现。而Cocos2D-x的拖动渐隐效果类CCMotionStreak就帮助我们实现这个效果。以下是子弹飞行火焰拖尾的效果实现。。

    1. #include "HelloWorldScene.h"  
    2. #include "SimpleAudioEngine.h"  
    3.   
    4. using namespace cocos2d;  
    5. using namespace CocosDenshion;  
    6.   
    7. CCScene* HelloWorld::scene()  
    8. {  
    9.     CCScene *scene = CCScene::create();  
    10.     HelloWorld *layer = HelloWorld::create();  
    11.     scene->addChild(layer);  
    12.     return scene;  
    13. }  
    14. bool HelloWorld::init()  
    15. {  
    16.     if ( !CCLayer::init() )  
    17.     {  
    18.         return false;  
    19.     }  
    20.     size = CCDirector::sharedDirector()->getWinSize();  
    21.       
    22.     CCLayerColor* background = CCLayerColor::create(ccc4(255, 200, 255, 255), size.width, size.height);  
    23.     this->addChild(background);  
    24.       
    25.     //存储子弹节点  
    26.     bulltArr = CCArray::create();  
    27.     CC_SAFE_RETAIN(bulltArr);  
    28.     //存储 CCMotionStreak  
    29.     streakArr = CCArray::create();  
    30.     CC_SAFE_RETAIN(streakArr);  
    31.       
    32.     scheduleUpdate();  
    33.       
    34.     return true;  
    35. }  
    36.   
    37. void HelloWorld::update(float delta)  
    38. {  
    39.     for (int i = 0; i < bulltArr->count(); i++) {  
    40.         CCSprite* bullt = (CCSprite*)bulltArr->objectAtIndex(i);  
    41.         bullt->setPositionY(bullt->getPositionY()+2);  
    42.           
    43.         CCMotionStreak* streak = (CCMotionStreak*)streakArr->objectAtIndex(i);  
    44.         //每次调用setPosition函数又一次设置对象位置时,“影子”将被创建而且慢慢渐隐  注:对于CCMotionStreak对象不可用getPosition()等方法。。  
    45.         streak->setPosition(bullt->getPosition());  
    46.     }  
    47.       
    48.     for (int i = 0; i < bulltArr->count(); i++) {  
    49.         CCSprite* bullt = (CCSprite*)bulltArr->objectAtIndex(i);  
    50.         //删除超出屏幕节点  
    51.         if (bullt->getPositionY() >= size.height+bullt->getContentSize().height) {  
    52.             this->removeChild(bullt);  
    53.             bulltArr->removeObject(bullt);  
    54.               
    55.             CCSprite* streak = (CCSprite*)streakArr->objectAtIndex(i);  
    56.             this->removeChild(streak);  
    57.             streakArr->removeObject(streak);  
    58.               
    59.             break;  
    60.         }  
    61.     }  
    62. }  
    63.   
    64. //拖尾效果类CCMotionStreak  
    65. //创建 子弹节点 和 CCMotionStreak对象  
    66. void HelloWorld::createBullt(CCPoint startPoint)  
    67. {  
    68.     CCSprite* bullt = CCSprite::create("bullet3.png");  
    69.     bullt->setPosition(startPoint);  
    70.     this->addChild(bullt,2);  
    71.     bulltArr->addObject(bullt);  
    72.       
    73.     //第一个參数是间隐的时间,第二个參数是间隐片断的大小,第三个參数是贴图的宽高,第四个參数是颜色值RGB,第五个參数是贴图的路径或者贴图对象  
    74.     CCMotionStreak* streak = CCMotionStreak::create(0.8, 10, 10, ccRED, "bullet3.png");  
    75.     streak->setPosition(startPoint);  
    76.     this->addChild(streak,1);  
    77.     streakArr->addObject(streak);  
    78. }  
    79.   
    80. bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)  
    81. {  
    82.     createBullt(pTouch->getLocation());  
    83.     return true;  
    84. }  
    85.   
    86. void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent){}  
    87. void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){}  
    88. void HelloWorld::onEnter()  
    89. {  
    90.     CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false);  
    91.     CCLayer::onEnter();  
    92. }  
    93. void HelloWorld::onExit()  
    94. {  
    95.     CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);  
    96.     CCLayer::onExit();  
    97. }  
    98.   
    99. HelloWorld::~HelloWorld()  
    100. {  
    101.     CC_SAFE_RELEASE(bulltArr);  
    102.     CC_SAFE_RELEASE(streakArr);  
    103. }  


    很多其它0
  • 相关阅读:
    设置VS2017背景图片
    NuGet的简单使用
    C#6.0,C#7.0新特性
    openFileDialog的Filter属性设置
    C# 获取当前路径7种方法
    正则表达式总结
    IDEA设置switch/case代码块自动补齐
    CentOS7使用yum安装RabbitMQ
    vue react 路由history模式刷新404问题解决方案
    @Component, @Repository, @Service的区别
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/3875951.html
Copyright © 2020-2023  润新知