2014-11-02 4 views
3

나는 멀티 터치를 처리하려고하는데 한 번만 터치 만받습니다. cocos2d-x v3.3rc0을 사용하고 있습니다.

동작은 멀티 터치가 아닌 싱글 터치와 비슷합니다. onTouchesBegan은 손가락이 두 개 이상일 때만 한 번 호출됩니다.cocos2d-x v3에서 멀티 터치 작업을 할 수 없음

희망을 누군가가 해결할 수 있도록 도와주세요. 여기

내 코드가 지원할 각 플랫폼에 멀티 터치를 활성화해야 멀티 터치

에게 ControlLayer.h

#include "cocos2d.h" 

class ControlLayer : public cocos2d::Layer{ 


public: 

    static ControlLayer* create(); 
    virtual bool init(); 

    void onTouchesBegan(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *unused_event); 
    void onTouchesMoved(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *unused_event); 
    void onTouchesEnded(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *unused_event); 

}; 

ControlLayer.cpp

bool ControlLayer::init(){ 

    if (!Layer::init()){ 
     return false; 
    } 

    auto touchListener = EventListenerTouchAllAtOnce::create(); 
    touchListener->onTouchesBegan = CC_CALLBACK_2(ControlLayer::onTouchesBegan, this); 
    touchListener->onTouchesMoved = CC_CALLBACK_2(ControlLayer::onTouchesMoved, this); 
    touchListener->onTouchesEnded = CC_CALLBACK_2(ControlLayer::onTouchesEnded, this); 

    Director::getInstance()->getEventDispatcher()->addEventListenerWithSceneGraphPriority(touchListener, this); 

    return true; 
} 

void ControlLayer::onTouchesBegan(const std::vector<Touch*>& touches, Event *unused_event){ 
    CCLOG("onTouchesBegan[%lu]", touches.size()); 
} 
void ControlLayer::onTouchesMoved(const std::vector<Touch*>& touches, Event *unused_event){ 
    CCLOG("onTouchesMoved[%lu]", touches.size()); 
} 
void ControlLayer::onTouchesEnded(const std::vector<Touch*>& touches, Event *unused_event){ 

} 
+0

CCLOG ("onTouchesBegan [% lu]", touches.size()); onTouchesBegan에서 인쇄 하시겠습니까? – musikov

+0

로그는 "onTouchesBegan [1]"이며 한 번만 호출하면 두 번째 손가락이 적용되지 않습니다. – Frizlancer

답변

2

수 있도록하는 것입니다 그것은 기본적으로.

여기에 예 (아이폰 OS)입니다 :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  

// Override point for customization after application launch. 

// Add the view controller's view to the window and display. 
window = [[UIWindow alloc] initWithFrame: [[UIScreen mainScreen] bounds]]; 

// Init the CCEAGLView 
CCEAGLView *eaglView = [CCEAGLView viewWithFrame: [window bounds] 
           pixelFormat: kEAGLColorFormatRGBA8 
           depthFormat: GL_DEPTH24_STENCIL8_OES 
          preserveBackbuffer: NO 
            sharegroup: nil 
           multiSampling: NO 
          numberOfSamples: 0]; 

[eaglView setMultipleTouchEnabled:YES]; // <----- 
+1

질문은 C++를 사용하는 cocos2d-x에 대한 것이고 귀하의 대답은 cocos2d를 사용하는 objective-c에 대한 것입니다. – whiteSkar

+0

@whiteSkar 내 대답은 cocos2d-x입니다. 각 기본 AppDelegate는 각 UIApplicationDelegate 호출을 공유 (C++) 대리자에 위임합니다. 따라서, 멀티 터치를 가능하게하는 원리는 유효하다. 내가 준 예제는 iOS 구현입니다. 나는 아마도 각각의 모든 구현을 대답에 넣을 수는 없다. 내 말은, – Mercurial

+1

. 나는 당신의 "예"가 "대답"이라고 생각했습니다. 그것이 단지 예일 뿐이라면, 내가 만든 하향 수를 제거하고 싶습니다. 그러나, 귀하의 게시물을 편집하지 않는 한 내 downvote를 제거 할 수 없다고 말합니다. 내 downvote를 제거 할 수 있도록 게시물을 편집 할 수 있습니까? – whiteSkar

2

프로젝트의 나머지 부분은 C++로 작성된 경우에도 목표 C에있을 것 프로젝트의 아이폰 OS 부분에 멀티 터치를 활성화해야합니다. 템플릿 프로젝트는 앱 컨트롤러 (AppController.mm)의 [eaglView setMultipleTouchEnabled:NO]; 행을 NO로 변경하여 YES로 설정할 수 있습니다.

0

iOS의 경우 사용 설정해야합니다. Cocos2d-x 3.16부터 cocos new 명령 줄 도구로 생성 된 RootViewController.mm의 단일 행을 수정하여 멀티 터치를 활성화하십시오.

--- a/proj.ios_mac/ios/RootViewController.mm 
+++ b/proj.ios_mac/ios/RootViewController.mm 
@@ -52,7 +52,7 @@ 
             numberOfSamples: 0 ]; 

    // Enable or disable multiple touches 
- [eaglView setMultipleTouchEnabled:NO]; 
+ [eaglView setMultipleTouchEnabled:YES];