ParallaxNode를 이용한 배경스크롤 구현하기



h++)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#ifndef test257_hpp
#define test257_hpp
 
#include "cocos2d.h"
 
USING_NS_CC;
 
class Test257 : public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();
    
    virtual bool init();
    
    // implement the "static create()" method manually
    CREATE_FUNC(Test257);
    
    
    void initBG();   //배경
};
 
#endif 
cs



c++)

배경레이어 대신 ParallaxNode를 생성하고 스프라이트 객체를 ParallaxNode에 추가한다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
#include "test257.hpp"
 
USING_NS_CC;
 
Scene* Test257::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test257::create();
    scene->addChild(layer);
    
    
    return scene;
}
 
 
bool Test257::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    initBG();
    
    return true;
}
 
 
//배경그리기
void Test257::initBG(){
    //배경레이어 대신 ParallaxNode 에 액션기능을 구현하고 스프라이트 객체를 ParallaxNode 에 추가
    auto node = ParallaxNode::create();
    this->addChild(node);
    
    //ParallaxNode 에 애니메이션 구현
    auto action1 = MoveBy::create(10.0, Point(-2000,0));
    auto action2 = Place::create(Point::ZERO);
    auto action3 = Sequence::create(action1, action2, NULL);
    auto action4 = RepeatForever::create(action3);
    node->runAction(action4);
    
    /** 첫번째 이미지 **/
    auto sprite1 = Sprite::create("background2.png");
    sprite1->setAnchorPoint(Point::ZERO);
    //addChild(스프라이트, z-order, 이동비율, 좌표) : ParallaxNode 에 Sprite 객체 추가
    //이동비율 : ParallaxNode를 기준으로 한 이동비율
    //         1이면 ParallaxNode와 똑같이 이동하고 0이면 이동하지 않으며 2이면 ParallaxNode보다 2배 빨리 이동한다
    node->addChild(sprite1, 0, Point(1,0), Point::ZERO);
    
    auto sprite2 = Sprite::create("background2.png", Rect(0,0,480,320));
    sprite2->setAnchorPoint(Point::ZERO);
    node->addChild(sprite2, 0, Point(1,0), Point(2000,0));
    
 
    /** 두번째 이미지 **/
    auto sprite3 = Sprite::create("background3.png");
    sprite3->setAnchorPoint(Point::ZERO);
    node->addChild(sprite3, 1, Point(2,0), Point::ZERO);
    
    //같은시간에 ParallaxNode 보다 2000px 더 이동하므로 스프라이트 객체를 1개더 추가한다
    auto sprite4 = Sprite::create("background3.png");
    sprite4->setAnchorPoint(Point::ZERO);
    node->addChild(sprite4, 1, Point(2,0), Point(2000,0));
    
    auto sprite5 = Sprite::create("background3.png", Rect(00480114));
    sprite5->setAnchorPoint(Point::ZERO);
    node->addChild(sprite5, 1, Point(2,0), Point(4000,0));
}
 
 
cs




+ Recent posts