#include "HelloWorldScene.h" USING_NS_CC; Scene* HelloWorld::createScene() { // 'scene' is an autorelease object auto scene = Scene::create(); // 'layer' is an autorelease object auto layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene; } // on "init" you need to initialize your instance bool HelloWorld::init() { ////////////////////////////// // 1. super init first if ( !Layer::init() ) { return false; } //랜덤 좌표용 srand srand(time(NULL)); smile.clear(); auto listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnded, this); Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); //배경음 재생 SimpleAudioEngine::getInstance()->playBackgroundMusic("oth_5.mp3"); //1초에 한번씩 스케줄링하여 스마일 생성 this->schedule(schedule_selector(HelloWorld::setSmile), 1.0f); return true; } bool HelloWorld::onTouchBegan(Touch* touch, Event* unused_event) { Vec2 pos = touch->getLocation(); for (Sprite* spr : smile) { if (spr->getBoundingBox().containsPoint(pos)) { spr->setTexture("CloseSelected.png"); return true; } } return false; //엉뚱한데 찍은거면 터치무브,엔드 막음 } //클릭이 유효하고, 클릭 종료시 위치가 아이콘 위면 화면에서 삭제 및 벡터에서 제거 void HelloWorld::onTouchEnded(Touch* touch, Event* unused_event) { for (Sprite* spr : smile) { if (spr->getBoundingBox().containsPoint(touch->getLocation())) { CCLOG("remove"); smile.eraseObject(spr); spr->removeFromParent(); return; //리턴을 안해주면 포문이 계속 돌면서 에러남. 중요!! } else { spr->setTexture("CloseNormal.png"); } } } //랜덤한 위치에 아이콘 생성 void HelloWorld::setSmile(float delta) { auto spr = Sprite::create("CloseNormal.png"); spr->setTag(100); spr->setPosition(Vec2(rand() % 480, rand() % 320)); smile.pushBack(spr); this->addChild(spr); } |