Macos 当使用Cocos2d-X进行Mac游戏时,如何注册手指是否触摸(而不是按下鼠标按钮)Apple trackpad(如MacBook Pro)?

Macos 当使用Cocos2d-X进行Mac游戏时,如何注册手指是否触摸(而不是按下鼠标按钮)Apple trackpad(如MacBook Pro)?,macos,cocos2d-x,objective-c++,nstouch,Macos,Cocos2d X,Objective C++,Nstouch,我所需要的只是知道一个手指是否在触摸或是从触控板上抬起。我想我必须使用和NSTouchPhaseBegan和Nstouchphaseen。可能是一种方法,但我不知道如何在COCOS2D-X C++代码中实现这个Objto-C代码。任何人都可以举例说明如何将Objective-C代码实现到Cocos2d-X项目中,因为它是自己的类,例如trackpad.mm和trackpad.h?Cocos2d X有用户输入事件列表。 您可以检查用户是否触摸了屏幕,用户是否正在触摸屏幕并拖动它,用户是否已结束触摸

我所需要的只是知道一个手指是否在触摸或是从触控板上抬起。我想我必须使用和NSTouchPhaseBegan和Nstouchphaseen。可能是一种方法,但我不知道如何在COCOS2D-X C++代码中实现这个Objto-C代码。任何人都可以举例说明如何将Objective-C代码实现到Cocos2d-X项目中,因为它是自己的类,例如trackpad.mm和trackpad.h?

Cocos2d X有用户输入事件列表。 您可以检查用户是否触摸了屏幕,用户是否正在触摸屏幕并拖动它,用户是否已结束触摸(将手指从屏幕上抬起)

简单的方法是使用事件列表器

在.H文件中定义它

cocos2d::EventListenerTouchOneByOne *_touchListener;
bool onTouchBegan(cocos2d::Touch*, cocos2d::Event*);
void onTouchEnded(cocos2d::Touch*, cocos2d::Event*);
void onTouchMoved(cocos2d::Touch*, cocos2d::Event*);
现在在Init方法之后的.cpp文件中

_touchListener = EventListenerTouchOneByOne::create();
_touchListener->onTouchBegan = CC_CALLBACK_2(GamePlayScene::onTouchBegan, this);
_touchListener->onTouchEnded = CC_CALLBACK_2(GamePlayScene::onTouchEnded, this);
_touchListener->onTouchMoved = CC_CALLBACK_2(GamePlayScene::onTouchMoved, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(_touchListener, this);
在代码中定义这3种方法

// trigger when you push down
bool GamePlayScene::onTouchBegan(Touch* touch, Event* event)
{
return true;
}
// trigger when moving touch
void GamePlayScene::onTouchMoved(Touch* touch, Event* event)
{   
}
// trigger when you let up
void GamePlayScene::onTouchEnded(Touch* touch, Event* event)
{
//Code to Get Touch Location where user have ended touch
Point location = touch->getLocationInView();
location = Director::getInstance()->convertToGL(location);

CCLOG("Position x -> %f , y -> %f",location.x,location.y);
}

CoCoS2Dx具有用户输入EventListner。 您可以检查用户是否触摸了屏幕,用户是否正在触摸屏幕并拖动它,用户是否已结束触摸(将手指从屏幕上抬起)

简单的方法是使用事件列表器

在.H文件中定义它

cocos2d::EventListenerTouchOneByOne *_touchListener;
bool onTouchBegan(cocos2d::Touch*, cocos2d::Event*);
void onTouchEnded(cocos2d::Touch*, cocos2d::Event*);
void onTouchMoved(cocos2d::Touch*, cocos2d::Event*);
现在在Init方法之后的.cpp文件中

_touchListener = EventListenerTouchOneByOne::create();
_touchListener->onTouchBegan = CC_CALLBACK_2(GamePlayScene::onTouchBegan, this);
_touchListener->onTouchEnded = CC_CALLBACK_2(GamePlayScene::onTouchEnded, this);
_touchListener->onTouchMoved = CC_CALLBACK_2(GamePlayScene::onTouchMoved, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(_touchListener, this);
在代码中定义这3种方法

// trigger when you push down
bool GamePlayScene::onTouchBegan(Touch* touch, Event* event)
{
return true;
}
// trigger when moving touch
void GamePlayScene::onTouchMoved(Touch* touch, Event* event)
{   
}
// trigger when you let up
void GamePlayScene::onTouchEnded(Touch* touch, Event* event)
{
//Code to Get Touch Location where user have ended touch
Point location = touch->getLocationInView();
location = Director::getInstance()->convertToGL(location);

CCLOG("Position x -> %f , y -> %f",location.x,location.y);
}

如果您愿意将应用程序移植到iOS以外的其他平台,则不希望使用NSTouch。NSTouch存在于iOS之外。问题是关于在Mac OS上运行的应用程序。我建议您将在所有cocos 2dx支持的平台上工作,而不需要在Bridge类上工作。谢谢您的回答!但是如果事件发生在苹果触摸板上,当手指按下鼠标按钮时,事件监听器不会登记。我已经通过以下的指南成功地调用了COCOS2D-XC++应用程序中的Objtovi-C代码。但是我找不到使用NSEvent方法和TouchsMatchingPhase:NSTouchPhaseBegan的方法,如前所述,如果您愿意将应用程序移植到iOS以外的其他平台,则不希望使用NSTouch。NSTouch存在于iOS之外。问题是关于在Mac OS上运行的应用程序。我建议您将在所有cocos 2dx支持的平台上工作,而不需要在Bridge类上工作。谢谢您的回答!但是如果事件发生在苹果触摸板上,当手指按下鼠标按钮时,事件监听器不会登记。我已经通过以下的指南成功地调用了COCOS2D-XC++应用程序中的Objtovi-C代码。但我找不到一种方法来使用NSEvent方法和touchesMatchingPhase:NSTouchPhaseBegan,如所述