학습 시스템적인 Cocos2D-X (2) 상호 작용 코코스

번갈아

우리는 입력 장치와 그 게임과 상호 작용해야하는, 게임 플레이, 게임까지 눌러 키보드 아래 예를 들어, 그에 따라 선수를 필요로 누른 핵심 기술에 해당하는 방향으로 이동의 역할, 역할, 해제 숙련

키보드 모니터

응답

적인 Cocos2D-X 기능은 키보드 모니터를 달성하기 위해, 응답을 만들기 위해 키보드의 첫 번째 게임을 쓰기

"HelloWorldScene.h"
void Press(EventKeyboard::KeyCode keycode, Event *event);//按下
void Release(EventKeyboard::KeyCode keycode, Event *event);//释放

의 두 함수 선언 HelloWorldScene.h
다음 두 가지 기능이 정의되어

"HelloWorldScene.cpp"
void HelloWorld::Press(EventKeyboard::KeyCode keycode, Event* event)
{
    using KC = EventKeyboard::KeyCode;
    switch (keycode)
    {
    case KC::KEY_UP_ARROW:
        log("up press");
        break;
    case KC::KEY_DOWN_ARROW:
        log("down press");
        break;
    case KC::KEY_RIGHT_ARROW:
        log("right press");
        break;
    case KC::KEY_LEFT_ARROW:
        log("left press");
        break;
    case KC::KEY_Z:
        log("Explosion!");
        break;
    default:
        break;
    }
}

void HelloWorld::Release(EventKeyboard::KeyCode keycode, Event* event)
{
    using KC = EventKeyboard::KeyCode;
    switch (keycode)
    {
    case KC::KEY_UP_ARROW:
        log("up release");
        break;
    case KC::KEY_DOWN_ARROW:
        log("down release");
        break;
    case KC::KEY_RIGHT_ARROW:
        log("right release");
        break;
    case KC::KEY_LEFT_ARROW:
        log("left release");
        break;
    case KC::KEY_Z:
        log("Boom!");
        break;
    default:
        break;
    }
}

키보드의 왼쪽과 오른쪽 위로 및 아래로 키의이 두 가지 기능을 따라 Z

듣고 가입

에서는 HelloWorld::init()함수 코드의 또

"HelloWorldScene.cpp"
auto *dispatcher = Director::getInstance()->getEventDispatcher();
auto* keyListener = EventListenerKeyboard::create();//创建键盘按键监听器

keyListener->onKeyPressed = CC_CALLBACK_2(HelloWorld::Press, this);//设置按键按下的响应
keyListener->onKeyReleased = CC_CALLBACK_2(HelloWorld::Release, this);//设置按键释放的响应
//键盘按键被弹回时响应
dispatcher->addEventListenerWithSceneGraphPriority(keyListener,this);

이러한 실수는 다음 경우 컴파일

당황하지 마십시오됩니다 HelloWorldScene.h에,적인 Cocos2D 공간에서 사용하지 않는 #include "cocos2d.h"이 것은 다음 코드 줄을 추가 USING_NS_CC;잘, USING_NS_CC;매크로 것과 같습니다using namespace cocos2d

"HelloWorldScene.h"
#include "cocos2d.h"
USING_NS_CC;
class HelloWorld : public cocos2d::Scene
{
...
}

이것으로, 직접 범위 결정 변수를 선언합니다

"HelloWorldScene.h"
#include "cocos2d.h"
//USING_NS_CC;
class HelloWorld : public cocos2d::Scene
{
public:
    ...
    void Press(cocos2d::EventKeyboard::KeyCode keycode, cocos2d::Event* event);//按下
    void Release(cocos2d::EventKeyboard::KeyCode keycode, cocos2d::Event* event);//释放
    ...
};

프로그램은 성공적으로 실행의 출력 창보기 버튼을 누르면

성공적으로 상호 작용을

마우스 리스너

응답

키보드와 동일한 단계의 모니터, 우리가 처음 HelloWorldScene.h우리는 함수를 눌러야하는 경우 함수 선언이 마우스 응답 물론, 다음 기능을 당신은 또한 존재하지 않는이 두 기능 사이의 번들 관계를 작성할 필요가 없습니다 수 해제

"HelloWorldScene.h"
void MouseDown(cocos2d::Event* event);
void MouseUp(cocos2d::Event* event);

에서 HelloWorldScene.cpp두 함수의 정의

"HelloWorldScene.cpp"
void HelloWorld::MouseDown(cocos2d::Event* event)
{
    EventMouse* e = static_cast<EventMouse*>(event);
    log("press (%f, %f)", e->getCursorX(), e->getCursorY());
}

void HelloWorld::MouseUp(cocos2d::Event* event)
{
    EventMouse* e = static_cast<EventMouse*>(event);
    log("release (%f, %f)", e->getCursorX(), e->getCursorY());
}

이 두 기능의 기능 누르거나 마우스의 위치 출력을 해제

듣고 가입

에서는 HelloWorld::init()이 코드 등록 모니터 기능, 키보드 및 부가 동일한 기본 원칙을 모니터링하지만 콜백의 유형은 CC_CALLBACK_1키보드없는 CC_CALLBACK_2종류 및 양에 따른 차이로 콜백 파라미터를 입력

"HelloWorldScene.cpp"
auto listener = EventListenerMouse::create();
listener->onMouseDown = CC_CALLBACK_1(HelloWorld::MouseDown,this);
listener->onMouseUp = CC_CALLBACK_1(HelloWorld::MouseUp,this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

프로그램을 실행하고 마우스 테스트 기능을 클릭

오른쪽 상단에 클릭을하고 바닥은 거의 두 위치가 게임 세계에 좌표를 저장하는 마우스 이벤트 좌표에서 찾을 수 있습니다 왼쪽과 범위는 게임의 해상도와 관련이 있습니다.

추천

출처www.cnblogs.com/NightFrost/p/11704179.html