cocos2dx 以子彈飛行為例講解拖尾效果類CCMotionStreak
阿新 • • 發佈:2019-01-28
#include "HelloWorldScene.h" #include "SimpleAudioEngine.h" using namespace cocos2d; using namespace CocosDenshion; CCScene* HelloWorld::scene() { CCScene *scene = CCScene::create(); HelloWorld *layer = HelloWorld::create(); scene->addChild(layer); return scene; } bool HelloWorld::init() { if ( !CCLayer::init() ) { return false; } size = CCDirector::sharedDirector()->getWinSize(); CCLayerColor* background = CCLayerColor::create(ccc4(255, 200, 255, 255), size.width, size.height); this->addChild(background); //儲存子彈節點 bulltArr = CCArray::create(); CC_SAFE_RETAIN(bulltArr); //儲存 CCMotionStreak streakArr = CCArray::create(); CC_SAFE_RETAIN(streakArr); scheduleUpdate(); return true; } void HelloWorld::update(float delta) { for (int i = 0; i < bulltArr->count(); i++) { CCSprite* bullt = (CCSprite*)bulltArr->objectAtIndex(i); bullt->setPositionY(bullt->getPositionY()+2); CCMotionStreak* streak = (CCMotionStreak*)streakArr->objectAtIndex(i); //每次呼叫setPosition函式重新設定物件位置時,“影子”將被建立並且慢慢漸隱 注:對於CCMotionStreak物件不可用getPosition()等方法。。 streak->setPosition(bullt->getPosition()); } for (int i = 0; i < bulltArr->count(); i++) { CCSprite* bullt = (CCSprite*)bulltArr->objectAtIndex(i); //刪除超出螢幕節點 if (bullt->getPositionY() >= size.height+bullt->getContentSize().height) { this->removeChild(bullt); bulltArr->removeObject(bullt); CCSprite* streak = (CCSprite*)streakArr->objectAtIndex(i); this->removeChild(streak); streakArr->removeObject(streak); break; } } } //拖尾效果類CCMotionStreak //建立 子彈節點 和 CCMotionStreak物件 void HelloWorld::createBullt(CCPoint startPoint) { CCSprite* bullt = CCSprite::create("bullet3.png"); bullt->setPosition(startPoint); this->addChild(bullt,2); bulltArr->addObject(bullt); //第一個引數是間隱的時間,第二個引數是間隱片斷的大小,第三個引數是貼圖的寬高,第四個引數是顏色值RGB,第五個引數是貼圖的路徑或者貼圖物件 CCMotionStreak* streak = CCMotionStreak::create(0.8, 10, 10, ccRED, "bullet3.png"); streak->setPosition(startPoint); this->addChild(streak,1); streakArr->addObject(streak); } bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { createBullt(pTouch->getLocation()); return true; } void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent){} void HelloWorld::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent){} void HelloWorld::onEnter() { CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false); CCLayer::onEnter(); } void HelloWorld::onExit() { CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this); CCLayer::onExit(); } HelloWorld::~HelloWorld() { CC_SAFE_RELEASE(bulltArr); CC_SAFE_RELEASE(streakArr); }