2014-11-02 2 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]", touchhes.size()); печатать в onTouchesBegan? – musikov

+0

Журнал «onTouchesBegan [1]», и он называется только один раз, второй палец не действует. – Frizlancer

ответ

2

Вы должны включить мультитач на каждой платформе для поддержки это изначально.

Вот пример (IOS):

- (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

Вопрос для cocos2d-x, который использует C++, и ваш ответ для object-c с cocos2d. – whiteSkar

+0

@whiteSkar Мой ответ для cocos2d-x. Каждый родной AppDelegate будет делегировать каждый вызов UIApplicationDelegate совместному делегату (C++). Поэтому принцип включения мультитача действителен. Пример, который я дал, - это реализация iOS. В ответе я не могу поставить каждую реализацию. – Mercurial

+1

Я вижу. Я думал, что ваш «пример» был «ответом». Если это всего лишь пример, я хочу удалить нисходящее я, которое я сделал. Тем не менее, он говорит, что я не могу удалить свой downvote, если ваше сообщение не отредактировано. Можете ли вы отредактировать свой пост, чтобы я мог удалить свой downvote? – whiteSkar

2

Вы должны включить мульти прикосновение в IOS части вашего проекта, который будет находиться в Objective C, даже если остальная часть проекта написана на C++. Проекты шаблонов имеют строку [eaglView setMultipleTouchEnabled:NO]; в контроллере приложения (AppController.mm), готовом для вас, чтобы изменить NO на YES.

0

Для iOS вам необходимо включить его. Начиная с Cocos2d-x 3.16, измените одну строку RootViewController.mm, сгенерированную инструментом командной строки cocos new, чтобы включить multi-touch.

--- 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]; 
Смежные вопросы