#include "HelloWorldScene.h" USING_NS_CC; Scene* HelloWorld::createScene() { // 'scene' is an autorelease object auto scene = Scene::create(); auto layer = HelloWorld::create(); scene->addChild(layer); return scene; } bool HelloWorld::init() { if ( !Layer::init() ) { return false; } listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegan, this); Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this); initBG(); initPlayer(); this->scheduleUpdate(); this->schedule(schedule_selector(HelloWorld::initEnemy), 3); return true; } void HelloWorld::initBG() { auto node = ParallaxNode::create(); this->addChild(node); node->runAction(RepeatForever::create(Sequence::create( MoveBy::create(20.0f, Vec2(-1280, 0)), Place::create(Vec2::ZERO), NULL))); //하늘 - 정지 auto bg0_1 = Sprite::create("BG/bg_0.png"); bg0_1->setAnchorPoint(Vec2::ZERO); node->addChild(bg0_1, 0, Vec2(0, 0), Vec2::ZERO); //산 - 천천히 for (int i = 0; i < 2; i++) { auto bg2 = Sprite::create("BG/bg_1.png"); bg2->setAnchorPoint(Vec2::ZERO); node->addChild(bg2, 0, Vec2(1.0f, 0), Vec2(1280 * i, 0)); } //땅 - 평범히 for (int i = 0; i < 3; i++) { auto bg2 = Sprite::create("BG/bg_3.png"); bg2->setAnchorPoint(Vec2::ZERO); node->addChild(bg2, 0, Vec2(2, 0), Vec2(1280*i, 0)); } //강 for (int i = 0; i < 3; i++) { auto bg3 = Sprite::create("BG/bg_2.png"); bg3->setAnchorPoint(Vec2::ZERO); node->addChild(bg3, 0, Vec2(2.5, 0), Vec2(1280*i, 0)); } } void HelloWorld::initPlayer() { CCLOG("initHero()"); isJump = false; SpriteFrameCache::getInstance()->addSpriteFramesWithFile("Player/player.plist"); //캐시에 plist 등록 auto player = Sprite::createWithSpriteFrameName("walk01.png"); player->setTag(TAG_SPRITE_PLAYER); player->setAnchorPoint(Vec2(0.5, 0)); player->setPosition(Vec2(100, 140)); this->addChild(player); auto walking = Animation::create(); walking->setDelayPerUnit(0.05f); for (int i = 0; i < 10; i++) { walking->addSpriteFrame(SpriteFrameCache::getInstance()->getSpriteFrameByName(StringUtils::format("walk%02d.png", i+1))); } player->runAction( RepeatForever::create( Animate::create(walking)) ); } void HelloWorld::initEnemy(float delta) { CCLOG("initEnemy()"); auto enemy = Sprite::create("flyFly1.png"); enemy->setTag(TAG_SPRITE_ENEMY); enemy->setAnchorPoint(Vec2(0.5, 0)); enemy->setPosition(Vec2(680, 140)); this->addChild(enemy); auto ani = Animation::create(); ani->setDelayPerUnit(0.1f); ani->addSpriteFrameWithFile("flyFly1.png"); ani->addSpriteFrameWithFile("flyFly2.png"); auto walking = Animate::create(ani); enemy->runAction(RepeatForever::create(walking)); enemy->runAction(Sequence::create( MoveBy::create(2, Vec2(-700, 0)), RemoveSelf::create(), NULL)); } void HelloWorld::update(float delta) { CCLOG("update()"); auto player = (Sprite*)this->getChildByTag(TAG_SPRITE_PLAYER); auto enemy = (Sprite*)this->getChildByTag(TAG_SPRITE_ENEMY); if (enemy) { if (enemy->getBoundingBox().intersectsRect(player->getBoundingBox())) { CCLOG("paused"); Director::getInstance()->pause(); enemy->removeFromParent(); } } } bool HelloWorld::onTouchBegan(Touch* touch, Event* unused_event) { auto player = (Sprite*)this->getChildByTag(TAG_SPRITE_PLAYER); auto enemy = (Sprite*)this->getChildByTag(TAG_SPRITE_ENEMY); auto pos = touch->getLocation(); if (enemy && enemy->getBoundingBox().containsPoint(pos)) { //커스텀 파티클 예제 auto particle = ParticleSystemQuad::create("ParticleNoteBomb.plist"); particle->setPosition(enemy->getPosition()); particle->setScale(0.5f); this->addChild(particle); enemy->removeFromParent(); } else if ( !isJump ) { setJump(true); player->runAction( Sequence::create( JumpBy::create(0.5f, Vec2(0, 0), 100, 1), CallFunc::create(CC_CALLBACK_0(HelloWorld::setJump, this, false)), NULL)); } else if (Director::getInstance()->isPaused()) { Director::getInstance()->resume(); } return true; } void HelloWorld::setJump(bool flag) { isJump = flag; } |