日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

5.触摸touch,单点触摸,多点触摸,触摸优先和触摸事件的吞噬

發布時間:2024/9/27 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 5.触摸touch,单点触摸,多点触摸,触摸优先和触摸事件的吞噬 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


1 觸摸

Coco2dx默認只有CCLayer及其派生類才有觸摸的功能。

2 單點觸摸

打開觸摸開關和觸摸方式

setTouchEnabled(true);

setTouchMode(kCCTouchesOneByOne);

Cocos2dx 對觸摸分三布來處理。分是是點觸,移動,離開。或是中間被打斷。其功能皆有相應的virtual 函數進行override 的。

virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent);

virtual void ccTouchMoved(CCTouch *pTouch,CCEvent *pEvent);

virtual void ccTouchEnded(CCTouch *pTouch,CCEVENT *pEvent);

virtual void ccTouchCancelled(CCTouch *pTouch,CCEvent *pEvent);

獲取點擊的坐標點

CCPoint pt = pTouch->getLocation();

CCLog(“x=%f y=%f”,pt.x,pt.y);

理解getDelta();

ccTouchBegan

start x = 67.309761 y = 180.989975

ccTouchMoved

delta x = 1.013191, y = 0.000000

ccTouchMoved

delta x = 5.977837, y = 0.000000

ccTouchMoved

delta x = 3.985229, y = 0.000000

ccTouchMoved

delta x = 1.013184, y = 0.000000

ccTouchMoved

delta x = 1.992615, y = 0.000000

ccTouchMoved

...................................

...................................

delta x = 1.013184, y = 0.000000

ccTouchMoved

delta x = 0.979431, y = 0.000000

ccTouchMoved

delta x = 1.992615, y = 0.000000

ccTouchMoved

delta x = 3.005798, y = 0.000000

ccTouchMoved

delta x = 3.005798, y = 0.000000

ccTouchMoved

delta x = 2.972015, y = 0.000000

ccTouchMoved

delta x = 1.013214, y = 0.000000

ccTouchMoved

delta x = 3.005798, y = 0.000000

ccTouchMoved

delta x = 0.979431, y = 0.000000

ccTouchEnded

3 多點觸摸

打開觸摸開關,系統默認為單點觸摸。

setTouchEnabled(true);

cocos2dx對觸摸分三部來處理。分別是點觸,移動,離開。或是中間被打斷。其功能皆有相應的virtual函數進行override的。

virtual bool ccTouchesBegan(CCSet *pTouches, CCEvent *pEvent);

virtual void ccTouchesMoved(CCSet *pTouches, CCEvent *pEvent);

virtual void ccTouchesEnded(CCSet *pTouches, CCEvent *pEvent);

virtual void ccTouchesCancelled(CCSet *pTouches, CCEvent *pEvent);

獲取點擊的坐標點。

4 案例(打飛機)

Touch.h

#ifndef __TOUCH_H__

#define __TOUCH_H__

?

#include "cocos2d.h"

USING_NS_CC;

class Touch :public CCLayerColor

{

public:

??? static CCScene * scene();

??? CREATE_FUNC(Touch);

??? bool init();

??? enum MyEnum

??? {

??????? BN747

??? };

?

??? bool ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent);

??? void ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent);

??? void ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent);

??? void ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent);

};

?

#endif

Touch.cpp

#include "Touch.h"

#include "AppMacros.h"

?

CCScene *Touch::scene()

{

??? CCScene * scene = CCScene::create();

??? Touch * layer = Touch::create();

??? scene->addChild(layer);

??? return scene;

}

?

bool Touch::init()

{

??? CCLayerColor::initWithColor(ccc4(255, 255, 255, 255));

?

??? setTouchEnabled(true);

??? setTouchMode(kCCTouchesOneByOne);

?

??? CCSprite * plane = CCSprite::create("hero1.png");

??? plane->setPosition(ccp(100, 100));

??? addChild(plane);

??? plane->setTag(BN747);

?

??? return true;

}

?

bool Touch::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)

{

??? CCSprite * plane = (CCSprite *)getChildByTag(BN747);

??? CCPoint pt = pTouch->getLocation();

??? if (plane->boundingBox().containsPoint(pt))

??? {

??????? CCLOG("touched");

??????? return true;

??? }

??? //決定消息是否往下傳遞

??? return false;

}

?

void Touch::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)

{

??? CCSprite * plane = (CCSprite *)getChildByTag(BN747);

??? CCPoint pt = plane->getPosition() + pTouch->getDelta();

??? if (pt.x > plane->getContentSize().width / 2

??????? && pt.x < winSize.width - plane->getContentSize().width / 2

??????? && pt.y > plane->getContentSize().height / 2

??????? && pt.y < winSize.height - plane->getContentSize().height / 2)

??? {

??????? plane->setPosition(pt);

??? }

??? CCLog("ccTouchMoved x = %g y = %g", pt.x, pt.y);

}

?

void Touch::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)

{

??? CCLog("ccTouchEnded");

}

?

void Touch::ccTouchCancelled(CCTouch *pTouch, CCEvent *pEvent)

{

??? CCLog("ccTouchCancelled");

}

運行結果:

?

總結

以上是生活随笔為你收集整理的5.触摸touch,单点触摸,多点触摸,触摸优先和触摸事件的吞噬的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。