멀티터치 이벤트 설정하기



hpp)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef test179_hpp
#define test179_hpp
 
USING_NS_CC;
 
class Test179 : public cocos2d::Layer
{
public:
    static cocos2d::Scene* createScene();
    
    virtual bool init();
    
    // implement the "static create()" method manually
    CREATE_FUNC(Test179);
    
    
    virtual void onTouchesBeganCallback(const std::vector<Touch*> &touches, Event *event);
};
 
#endif
cs



c++)

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
#include "test179.hpp"
 
USING_NS_CC;
 
Scene* Test179::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test179::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test179::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    //멀티터치 리스너 생성
    auto listener = EventListenerTouchAllAtOnce::create();
    
    //화면터치시 콜백메서드 설정
    /*
     onTouchBegan     : 이벤트 터치할때
     onTouchMoved     : 이벤트 이동시
     onTouchEnded     : 이벤트 뗄때
     onTouchCancelled : 이벤트 취소시
     */
    listener->onTouchesBegan = CC_CALLBACK_2(Test179::onTouchesBeganCallback, this);
    
    //이벤트 디스패처에 리스너 설정
    Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(listener, 1);
    
    
    return true;
}
 
 
//멀티터치시 호출되는 콜백메서드
void Test179::onTouchesBeganCallback(const std::vector<Touch*> &touches, Event *event){
    //여러개의 터치정보가 저장된 iterator 초기화
    std::vector<Touch*>::const_iterator iterator = touches.begin();
    
    Touch *touch;
    Point location[2];
    
    //터치한 횟수만큼 반복문
    for(int i=0; i<touches.size(); i++){
        //iterator를 통해 1개의 터치정보를 가져옴
        touch = (Touch*)(*iterator);
        
        location[i] = touch->getLocation(); //좌표정보 가져옴
        iterator++//다음 iterator
        
        CCLOG("location[%d] x = %f , y = %f", i, location[i].x, location[i].y);
    }
}
cs


싱글터치 이벤트 설정하기



hpp)

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



c++)

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
#include "test176.hpp"
 
USING_NS_CC;
 
Scene* Test176::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test176::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test176::init()
{
    if ( !Layer::init())
    {
        return false;
    }
 
    
    //싱글터치 리스너 생성
    auto listener = EventListenerTouchOneByOne::create();
    
    //화면 터치시 콜백메서드 지정
    /*
        onTouchBegan     : 이벤트 터치할때
        onTouchMoved     : 이벤트 이동시
        onTouchEnded     : 이벤트 뗄때
        onTouchCancelled : 이벤트 취소시
    */
    listener->onTouchBegan = CC_CALLBACK_2(Test176::onTouchBegan, this);
    
    //이벤트 디스패처에 리스너 추가
    Director::getInstance()->getEventDispatcher()->addEventListenerWithFixedPriority(listener, 1);
    
    
    return true;
}
 
 
//터치시 호출되는 콜백함수 설정
bool Test176::onTouchBegan(Touch *touch, Event *event){
    Point point = touch->getLocation();
    
    CCLOG("onTouchBegan Location x = %f , y = %f", point.x, point.y);
    
    return true;
}
cs



결과

1
2
3
4
5
6
onTouchBegan Location x = 223.969864 , y = 197.965469
onTouchBegan Location x = 109.229088 , y = 178.560791
onTouchBegan Location x = 299.901245 , y = 134.689316
onTouchBegan Location x = 366.552155 , y = 206.402298
onTouchBegan Location x = 47.640285 , y = 219.057526
onTouchBegan Location x = 100.792252 , y = 102.629379
cs


화면 전환 효과 적용하기



c++)

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "test169.hpp"
#include "GameScene.hpp"
 
USING_NS_CC;
 
Scene* Test169::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test169::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test169::init()
{
    //현재 화면 배경색은 파랑색
    if ( !LayerColor::initWithColor(Color4B(00255255)))
    {
        return false;
    }
    
    
    //MenuItemFont::create(메뉴명, 메뉴 클릭시 실행되는 콜백함수)
    auto item = MenuItemFont::create("Replace Scene", CC_CALLBACK_1(Test169::replaceScene, this));
    
    
    auto menu = Menu::create(item, NULL);
    menu->alignItemsVertically();
    this->addChild(menu);
    
    
    return true;
}
 
 
void Test169::replaceScene(Ref *sender){
    //화면 전환 효과 적용
    //TransitionCrossFade::create(전환시간, 넘어갈려는 화면)
    auto scene = TransitionSplitCols::create(3.0, GameScene::createScene());
    Director::getInstance()->pushScene(scene);
}
 
 
//화면 전환 효과의 종류
//TransitionFade : 2개의 화면이 순차적으로 페이드 효과로 전환
//TransitionCrossFade : 2개의 화면이 동시에 페이드 효과로 전환
//TransitionFadeUp : 하단에서 상단으로 페이드 효과로 전환
//TransitionFadeDown : 상단에서 하단으로 페이드 효과로 전환
//TransitionFadeBL : 오른쪽 상단에서 왼쪽 하단으로 블록 모양 페이드 효과로 전환
//TransitionFadeTR : 왼쪽 하단에서 오른쪽 상단으로 블록 모양 페이드 효과로 전환
//
//TransitionFlipAngular : 화면 가운데에서 비스듬하게 회전하면서 전환
//TransitionFlipX : 화면 가운데에서 X축을 기준으로 회전하면서 전환
//TransitionFlipY : 화면 가운데에서 Y축을 기준으로 회전하면서 전환
//
//TransitionJumpZoom : 화면이 작아지면서 왼쪽으로 점프하여 사라지고 새로운화면이 오른쪽에서 점프하여 나타난 후 확대되면서 전환
//TransitionRotoZoom : 화면이 가운데로 축소되면서 회전하며 사라지고 새로운화면이 확대되면서 회전하며 나타나는 효과
//
//TransitionZoomFlipAngular : 확대 + 화면 가운데에서 비스듬하게 회전하면서 전환
//TransitionZoomFlipX : 확대 + 화면 가운데에서 X축을 기준으로 회전하면서 전환
//TransitionZoomFlipY : 확대 + 화면 가운데에서 Y축을 기준으로 회전하면서 전환
//
//TransitionMoveInB : 새로운 화면이 아래에서 위로 겹쳐지면서 전환
//TransitionMoveInT : 새로운 화면이 위에서 아래로 겹쳐지면서 전환
//TransitionMoveInL : 새로운 화면이 왼쪽에서 오른쪽으로 겹쳐지면서 전환
//TransitionMoveInR : 새로운 화면이 오른쪽에서 왼쪽으로 겹쳐지면서 전환
//
//TransitionSlideInB : 새로운 화면이 현재화면을 아래에서 위로 밀어내면서 전환
//TransitionSlideInT : 새로운 화면이 현재화면을 위에서 아래로 밀어내면서 전환
//TransitionSlideInL : 새로운 화면이 현재화면을 왼쪽에서 오른쪽으로 밀어내면서 전환
//TransitionSlideInR : 새로운 화면이 현재화면을 오른쪽에서 왼쪽으로 밀어내면서 전환
//
//TransitionProgressHorizontal : 새로운 화면이 왼쪽에서 오른쪽으로 지나가는 효과
//TransitionProgressVertical : 새로운 화면이 위쪽에서 아래쪽으로 지나가는 효과
//TransitionProgressRadialCW : 새로운 화면이 시계방향으로 회전하면서 나타나는 효과
//TransitionProgressRadialCCW : 새로운 화면이 반시계방향으로 회전하면서 나타나는 효과
//TransitionProgressInOut : 새로운 화면이 화면 가운데에서 확대되면서 나타나는 효과
//TransitionProgressOutIn : 현재 화면이 화면 가운데로 축소되면서 나타나는 효과
//
//TransitionSplitCols : 전환되는 2개의 화면이 상하로 나눠지면서 전환
//TransitionSplitRows : 전환되는 2개의 화면이 좌우로 나눠지면서 전환
//
//TransitionPageTurn : 페이지 넘기는 효과
//TransitionTurnOffTiles : 타일 조각 효과
//TransitionShrinkGrow : 확대, 축소로 교차되면서 전환
 
cs


이미지 정보 가져오기 (IPlImage 구조체 사용)



c++)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h>
#include <opencv/cv.h>
#include <opencv/highgui.h>
 
void main() {
    IplImage *image;
    uchar *data;
    
    //image load
    image = cvLoadImage("D:/study/colorimage.png", CV_LOAD_IMAGE_UNCHANGED);
 
    data = (uchar*)image->imageData;        //image pixcel data의 pointer
    printf("채널수 : %d\n", image->nChannels);    //픽셀당 채널수
    printf("영상의 원점 : %d\n", image->origin);    //영상의 원점(0 : top-left, 1 : bottom-left)
    printf("영상의 가로크기 : %d\n", image->width);    //영상의 가로크기(단위 : 픽셀)
    printf("영상의 세로크기 : %d\n", image->height);    //영상의 세로크기(단위 : 픽셀)
    printf("가로크기 : %dbytes\n", image->widthStep);//영상의 가로크기(단위 : 바이트) = width * nChannels
    printf("사용 비트수 : %dbits\n", image->depth);     //데이터를 몇 비트를 가지고 표현할 것인가
    printf("영상크기 : %dbytes\n", image->imageSize);//영상의 크기(단위 : 바이트) = width * height * nChannels
    printf("101번 이미지 데이터 : %d\n", data[100]); //픽셀의 이미지 데이터
 
    //image release
    cvReleaseImage(&image);
}
cs



결과



화면 전환하기



c++)

화면A

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
#include "test156.hpp"
#include "GameScene.hpp"
 
USING_NS_CC;
 
Scene* Test156::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test156::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test156::init()
{
    //현재 화면 배경색은 파랑색
    if ( !LayerColor::initWithColor(Color4B(00255255)))
    {
        return false;
    }
    
    
    //MenuItemFont::create(메뉴명, 메뉴 클릭시 실행되는 콜백함수)
    auto item1 = MenuItemFont::create("Replace Scene", CC_CALLBACK_1(Test156::replaceScene, this));
    auto item2 = MenuItemFont::create("Push Scene", CC_CALLBACK_1(Test156::pushScene, this));
    auto item3 = MenuItemFont::create("Pop Scene", CC_CALLBACK_1(Test156::popScene, this));
 
    
    auto menu = Menu::create(item1, item2, item3, NULL);
    menu->alignItemsVertically();
    this->addChild(menu);
    
    
    return true;
}
 
 
//화면전환
//Director::getInstance()->replaceScene(넘어갈려는 화면)
//replaceScene : 새로운 화면을 생성하고 이전화면은 메모리에서 해제한다
//pushScene : 화면전환시 이전에 있었던 화면은 그대로 있고 새로운 화면이 보인다
//popScene : 현재화면을 메모리에서 해제하여 이전 화면을 보인다
void Test156::replaceScene(Ref *sender){
    Director::getInstance()->replaceScene(GameScene::createScene());
}
 
void Test156::pushScene(Ref *sender){
    Director::getInstance()->pushScene(GameScene::createScene());
}
 
void Test156::popScene(Ref *sender){
    Director::getInstance()->popScene();
}
 
cs


화면B

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
#include "GameScene.hpp"
#include "test156.hpp"
 
 
USING_NS_CC;
 
Scene* GameScene::createScene()
{
    auto scene = Scene::create();
    
    auto layer = GameScene::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool GameScene::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    //MenuItemFont::create(메뉴명, 메뉴 클릭시 실행되는 콜백함수)
    auto item = MenuItemFont::create("Test156 Scene", CC_CALLBACK_1(GameScene::pushScene, this));
    
    auto menu = Menu::create(item, NULL);
    menu->alignItemsHorizontally();
    this->addChild(menu);
    
    
    return true;
}
 
void GameScene::pushScene(Ref *sender){
    Director::getInstance()->pushScene(Test156::createScene());
}
cs



결과

메뉴를 클릭하면 두화면이 전환된다


특정메서드를 호출하는 함수



c++)

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include "test146.hpp"
 
USING_NS_CC;
 
Scene* Test146::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test146::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test146::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    auto sprite1 = Sprite::create("ball.png");
    sprite1->setPosition(Point(100,100));
    this->addChild(sprite1);
    
    auto sprite2 = Sprite::create("ball.png");
    sprite2->setPosition(Point(100,50));
    this->addChild(sprite2);
    
    
    auto moveto = MoveTo::create(3.0, Point(400200)); //지정한 위치로 이동
    auto delay = DelayTime::create(3.0);    //3초간 딜레이
 
    
    //CallFunc , CallFuncN : 특정메서드를 호출하는 함수
    //CallFunc : 매개변수가 없는 함수를 호출
    //CallFuncN : 매개변수가 있는 함수를 호출
    
    //CallFunc( CC_CALLBACK_0(매개변수가 없는 메서드명, 타깃))
    auto callback1 = CallFunc::create(CC_CALLBACK_0(Test146::setCallFunc_0, this)); //3초후 디버깅창에 로그를 출력
    
    //CallFuncN( CC_CALLBACK_*(매개변수가 있는 메서드명, 타깃, 매개변수...))
    auto callback2 = CallFuncN::create(CC_CALLBACK_1(Test146::setCallFunc_1, this));
    auto callback3 = CallFuncN::create(CC_CALLBACK_1(Test146::setCallFunc_2, this, (void*)"Hell Cocos!"));
    auto callback4 = CallFuncN::create(CC_CALLBACK_1(Test146::setCallFunc_3, this, sprite2));
    
    
    auto action = Sequence::create(moveto, delay, callback1, delay, callback2, delay, callback3, delay, callback4, NULL);
    sprite1->runAction(action);
    
    
    return true;
}
 
//매개변수 없음
void Test146::setCallFunc_0(){
    CCLOG("Test146::setCallFunc_0");
}
 
//매개변수로 실행하는 객체를 넘김
void Test146::setCallFunc_1(Ref *sender){
    CCLOG("Test146::setCallFunc_1");
    
    auto sprite = (Sprite*)sender;
    sprite->setScale(2);    //실행하는 객체가 스프라이트 이므로 형변환하고 크기를 2배 키움
}
 
//매개변수로 실행하는 객체와 다른 매개변수를 넘김
void Test146::setCallFunc_2(Ref *sender, void *d)
{
    CCLOG("Test146::setCallFunc_2 = %s", (char*)d);
    
    auto sprite = (Sprite*)sender;
    sprite->setScale(2);
}
 
//매개변수로 실행하는 객체와 다른 객체를 넘김
void Test146::setCallFunc_3(Ref *sender, Ref *object){
    CCLOG("Test146::setCallFunc_3");
    
    auto sprite1 = (Sprite*)sender;
    sprite1->setScale(2);
    
    auto sprite2 = (Sprite*)object;
    sprite2->setPosition(400100);
}
 
 
 
cs



결과

1
2
3
4
Test146::setCallFunc_0
Test146::setCallFunc_1
Test146::setCallFunc_2 = Hell Cocos!
Test146::setCallFunc_3
cs




공이 튕기는 듯한 이즈액션



c++)

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
#include "test144.hpp"
 
USING_NS_CC;
 
Scene* Test144::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test144::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test144::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    auto sprite1 = Sprite::create("ball.png");
    sprite1->setPosition(Point(100300));
    this->addChild(sprite1);
    
    auto sprite2 = Sprite::create("ball.png");
    sprite2->setPosition(Point(200300));
    this->addChild(sprite2);
    
    auto sprite3 = Sprite::create("ball.png");
    sprite3->setPosition(Point(300300));
    this->addChild(sprite3);
    
    
    //EaseBounce 이즈 액션 : 공이 튕기는 듯한 이즈 액션
    auto action1 = MoveTo::create(2.0, Point(100,50));
    auto ease1 = EaseBounceIn::create(action1);
    
    auto action2 = MoveTo::create(2.0, Point(200,50));
    auto ease2 = EaseBounceOut::create(action2);
 
    auto action3 = MoveTo::create(2.0, Point(300,50));
    auto ease3 = EaseBounceInOut::create(action3);
    
    
    //스프라이트 객체에 이즈 액션 실행
    sprite1->runAction(ease1);
    sprite2->runAction(ease2);
    sprite3->runAction(ease3);
    
    
    return true;
}
 
cs



결과

공이 튕기는 듯한 액션을 취한다



뒤로 이동하는 이즈액션



c++)

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
#include "test143.hpp"
 
USING_NS_CC;
 
Scene* Test143::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test143::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test143::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    auto sprite1 = Sprite::create("ball.png");
    sprite1->setPosition(Point(100,90));
    this->addChild(sprite1);
    
    auto sprite2 = Sprite::create("ball.png");
    sprite2->setPosition(Point(100,70));
    this->addChild(sprite2);
    
    auto sprite3 = Sprite::create("ball.png");
    sprite3->setPosition(Point(100,50));
    this->addChild(sprite3);
    
    
    //EaseBack 이즈액션 : 뒤로 이동했다가 도착점으로 이동하는 이즈액션
    //EaseBackIn : 시작점에서 뒤로 이동했다가 도착점으로 이동
    //EaseBackOut : 도착점보다 더 이동했다가 도착점으로 돌아옴
    //EaseBackInOut : 시작점에서도 뒤로 이동하고 도착점에서도 더 이동했다가 도착점으로 돌아옴
    auto action1 = MoveTo::create(2.0, Point(450,90));
    auto ease1 = EaseBackIn::create(action1);
    
    auto action2 = MoveTo::create(2.0, Point(450,70));
    auto ease2 = EaseBackOut::create(action2);
    
    auto action3 = MoveTo::create(2.0, Point(450,50));
    auto ease3 = EaseBackInOut::create(action3);
    
    
    //스프라이트 객체에 액션을 실행
    sprite1->runAction(ease1);
    sprite2->runAction(ease2);
    sprite3->runAction(ease3);
    
    
    return true;
}
 
cs



결과

각기 다른 가속도로 뒤로 이동하게 된다



에러내용

Manifest merger failed : Attribute application@icon value=(@mipmap/ic_launcher) from AndroidManifest.xml:7:9-43 is also present at [com.pnikosis:materialish-progress:1.0] AndroidManifest.xml:13:9-45 value=(@drawable/ic_launcher).



해결내용

tools:replace="android:icon" 추가

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<manifest ...
          xmlns:tools="http://schemas.android.com/tools"
          ...>
 
    <application
        ...
        tools:replace="android:icon">
        ...
    </application>
 
</manifest>
cs



결과


고무줄에서 튕기는 것처럼 실행하는 이즈액션



c++)

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
#include "test141.hpp"
 
USING_NS_CC;
 
Scene* Test141::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test141::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test141::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
 
    auto sprite1 = Sprite::create("ball.png");
    sprite1->setPosition(Point(100,50));
    this->addChild(sprite1);
 
    auto sprite2 = Sprite::create("ball.png");
    sprite2->setPosition(Point(100,70));
    this->addChild(sprite2);
 
    auto sprite3 = Sprite::create("ball.png");
    sprite3->setPosition(Point(100,90));
    this->addChild(sprite3);
 
    
    //EaseElastic 이즈 액션 : 고물줄처럼 튕기는 효과를 주는 액션
    //EaseElasticIn : 시작점에서 고무줄에서 튕기는 것처럼 앞뒤로 움직인다
    //EaseElasticOut : 도착점에서 고무줄에서 튕기는 것처럼 앞뒤로 움직인다
    //EaseElasticInOut : 시작점, 도착점에서 고무줄에서 튕기는 것처럼 앞뒤로 움직인다
    auto action1 = MoveTo::create(2.0, Point(400,50));
    auto ease1 = EaseElasticIn::create(action1);
    
    auto action2 = MoveTo::create(2.0, Point(400,70));
    auto ease2 = EaseElasticOut::create(action2);
    
    auto action3 = MoveTo::create(2.0, Point(400,90));
    auto ease3 = EaseElasticInOut::create(action3);
    
    
    //스프라이트 객체에 액션적용
    sprite1->runAction(ease1);
    sprite2->runAction(ease2);
    sprite3->runAction(ease3);
    
    
    return true;
}
 
cs



결과

각각 다른 가속도록 고무줄처럼 튕긴다



+ Recent posts