가속도를 주어서 실행하는 이즈액션



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
#include "test135.hpp"
 
USING_NS_CC;
 
Scene* Test135::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test135::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test135::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    auto sprite1 = Sprite::create("ball.png");
    sprite1->setPosition(Point(100,30));
    this->addChild(sprite1);
    auto sprite2 = Sprite::create("ball.png");
    sprite2->setPosition(Point(100,40));
    this->addChild(sprite2);
    auto sprite3 = Sprite::create("ball.png");
    sprite3->setPosition(Point(100,50));
    this->addChild(sprite3);
    auto sprite4 = Sprite::create("ball.png");
    sprite4->setPosition(Point(100,60));
    this->addChild(sprite4);
    auto sprite5 = Sprite::create("ball.png");
    sprite5->setPosition(Point(100,70));
    this->addChild(sprite5);
    auto sprite6 = Sprite::create("ball.png");
    sprite6->setPosition(Point(100,80));
    this->addChild(sprite6);
 
    
    
    auto action1 = MoveTo::create(2.0, Point(400,30));
    auto action2 = MoveTo::create(2.0, Point(400,40));
    auto action3 = MoveTo::create(2.0, Point(400,50));
    auto action4 = MoveTo::create(2.0, Point(400,60));
    auto action5 = MoveTo::create(2.0, Point(400,70));
    auto action6 = MoveTo::create(2.0, Point(400,80));
    //이즈 액션 : 동일한 속도가 아닌 특정한 가속도를 주어서 실행하게 해주는 액션
    //ps. 가속도비율이 1이면 등속도운동을 하고 비율값이 클수록 느린부분과 빠른부분의 차이가 많이난다
    
    //EaseIn::create(액션, 가속도비율) : 앞부분을 느리게
    //EaseOut : 뒷부분을 느리게
    //EaseInOut : 앞부분과 뒷부분을 느리게
    auto easeIn = EaseIn::create(action1, 3.0);
    auto easeOut = EaseOut::create(action2, 3.0);
    auto easeInOut = EaseInOut::create(action3, 3.0);
    
    //EaseSine : 가속비율이 작은 액션 <-> EaseExponential : 가속비율이 큰 액션
    //EaseSineIn::create(액션) , EaseExponentialIn : 앞부분을 느리게
    //EaseSineOut , EaseExponentialOut : 뒷부분을 느리게
    //EaseSineInOut , EaseExponentialInOut : 앞부분과 뒷부분을 느리게
    auto easeSineIn = EaseSineIn::create(action4);
    auto easeSineOut = EaseSineIn::create(action5);
    auto easeSineInOut = EaseSineIn::create(action6);
 
    sprite1->runAction(easeIn);
    sprite2->runAction(easeOut);
    sprite3->runAction(easeInOut);
    sprite4->runAction(easeSineIn);
    sprite5->runAction(easeSineOut);
    sprite6->runAction(easeSineInOut);
    
    
    return true;
}
 
cs



결과

이즈액션 종류마다 각각 다른 가속도를 주어 실행된다



구조체(struct) 사용 예제



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
#include <stdio.h>
#include <string.h>
 
//구조체 정의
struct student {
    char name[8];    //char[] 8바이트
    int kor;        //int     4바이트
    int eng;        //int     4바이트
};
 
void main() {
    //구조체 변수는 . 를 사용하여 참조하고 구조체 포인터 변수는 -> 를 사용하여 참조한다
    //구조체 선언 (변수 선언하듯이 한다)
    struct student person , *= &person;
    
    //포인터를 이용하여 구조체변수에 값을 할당한다.
    strncpy_s(p->name, "홍길동", strlen(p->name));    //strncpy() 를 이용하여 문자열할당
    p->kor = 90;
    p->eng = 100;
 
    //출력
    printf("이름 : %s\n", person.name);
    printf("국어 : %d\n", person.kor);
    printf("영어 : %d\n", person.eng);
}
cs



결과




액션 반복하기 (Repeat)



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
#include "test134.hpp"
 
USING_NS_CC;
 
Scene* Test134::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test134::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test134::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    auto sprite = Sprite::create("ball.png");
    sprite->setPosition(Point(100,100));
    this->addChild(sprite);
    
    
    auto action1 = MoveBy::create(1.0, Point(200,100));
    auto action2 = action1->reverse();
    auto sequenceAction = Sequence::create(action1, action2, NULL);
    //Repeat::create(반복할 액션, 반복 횟수) : 반복 횟수만큼 같은 액션을 반복한다
    //ps. 반복 횟수를 지정하지 않으면 무한반복 한다
    auto repeat = Repeat::create(sequenceAction, 5);
    sprite->runAction(repeat);
    
    
    return true;
}
 
cs



결과

(300,200)과 (100,100) 사이를 왔다갔다하는 액션을 5번 반복한다




딜레이타임 주기 (DelayTime)



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
#include "test132.hpp"
 
USING_NS_CC;
 
Scene* Test132::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test132::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test132::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    auto sprite = Sprite::create("ball.png");
    sprite->setPosition(Point(100,100));
    this->addChild(sprite);
    
    
    auto action1 = MoveTo::create(2.0, Point(400,100));
    //DelayTime::create(시간) : 아무것도 하지않고 정해진 시간만큼 기다린다
    auto delaytime = DelayTime::create(3.0);
    auto action2 = MoveTo::create(1.0, Point(50,50));
    auto sequenceAction = Sequence::create(action1, delaytime, action2, NULL);
    sprite->runAction(sequenceAction);
        
    
    return true;
}
 
cs



결과

(400,100)으로 이동한후 3초간 기다렸다 (50,50)으로 이동한다



반대로 실행하는 액션기능 (reverse)



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
#include "test131.hpp"
 
USING_NS_CC;
 
Scene* Test131::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test131::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test131::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    auto sprite = Sprite::create("ball.png");
    sprite->setPosition(Point(100,100));
    this->addChild(sprite);
    
    
    auto action1 = MoveBy::create(2.0, Point(300,100));
    //reverse() : 실행했던 액션을 반대로 실행시키는액션
    //ps. 반대로 실행할 수 있는 액션인 상대적인 위치를 나타내는 ~By로 끝나는 액션을 적용해야 한다
    auto reverseAction = action1->reverse();
    auto requenceAction = Sequence::create(action1, reverseAction, NULL);
    sprite->runAction(requenceAction);
    
    
    return true;
}
 
cs



결과

객체가 (400,200)으로 이동했다가 (100,100)으로 다시 이동한다



여러 액션을 동시에 실행하기 (Spawn)



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
#include "test130.hpp"
 
USING_NS_CC;
 
Scene* Test130::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test130::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test130::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    auto sprite = Sprite::create("ball.png");
    sprite->setPosition(Point(100,100));
    this->addChild(sprite);
    
    
    auto action1 = MoveTo::create(2.0, Point(400,100));
    auto action2 = FadeTo::create(2.0128);
    auto action3 = ScaleTo::create(2.03);
    //Spawn::create(액션1, 액션2,..., NULL) : 2개 이상의 액션을 동시에 실행한다
    auto spawnAction = Spawn::create(action1, action2, action3, NULL);
    sprite->runAction(spawnAction);
    
    
    return true;
}
 
cs



결과

2초동안 이동, 투명도, 크기 변환이 동시에 일어난다




순서대로 액션 실행하기 (Sequence)



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
#include "test129.hpp"
 
USING_NS_CC;
 
Scene* Test129::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test129::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test129::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    auto sprite = Sprite::create("ball.png");
    sprite->setPosition(Point(100,100));
    this->addChild(sprite);
    
    
    auto action1 = MoveTo::create(2.0, Point(400,100));
    auto action2 = MoveTo::create(2.0, Point(400,250));
    //Sequence::create(액션1, 액션2,..., NULL) : 순서대로 액션을 실행한다
    auto action3 = Sequence::create(action1, action2, NULL);
    sprite->runAction(action3);
    
    
    return true;
}
 
cs



액션1과 액션2가 순서대로 실행되어 위치가 이동된



error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS.



비주얼 스튜디오 2005 이상부터 scanf , strcpy , fopen 등의 함수를 사용하는 경우 발생하는 오류



해결1)

속성 > 구성속성 > C/C++ > 전처리기 > 전처리기 정의

_CRT_SECURE_NO_WARNINGS 추가


해결2)

맨 첫줄에 추가

1
#define _CRT_SECURE_NO_WARNINGS
cs


OpenCV R,G,B 를 H(색상) , S(채도) , V(명도) 로 바꾸는 공식




지정한 RGB의 값으로 색상변경하는 액션기능 (TintTo)



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
#include "test127.hpp"
 
USING_NS_CC;
 
Scene* Test127::createScene()
{
    auto scene = Scene::create();
    
    auto layer = Test127::create();
    scene->addChild(layer);
    
    return scene;
}
 
 
bool Test127::init()
{
    if ( !Layer::init())
    {
        return false;
    }
    
    
    auto sprite = Sprite::create("testimage.png");
    sprite->setPosition(Point(100,100));
    this->addChild(sprite);
    
    
    //TintTo::create(액션시간, R, G, B) : 지정한 RGB의 값으로 색상변경
    auto action = TintTo::create(3.025500);
    sprite->runAction(action);
    
    
    return true;
}
 
cs



결과

빨강색 셀로판지를 위에 댄것처럼 보인다



+ Recent posts