Cocos2d-x3.2单点触摸


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

//GameScene.h

#include "cocos2d.h"

USING_NS_CC;

 

class GameScene : public cocos2d::Layer

{

public:

    static cocos2d::Scene* createScene();

     

    virtual bool init();

 

    virtual bool onTouchBegan(Touch *touch, Event *unused_event);

    virtual void onTouchMoved(Touch *touch, Event *unused_event);

    virtual void onTouchEnded(Touch *touch, Event *unused_event);

     

    void menuCallback(cocos2d::Ref* pSender);

     

    CREATE_FUNC(GameScene);

};

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

//GameScene.cpp

//功能:运行点击屏幕,控制台显示触点坐标,并将图标移动到触点位置

 

#include "GameScene.h"

 

USING_NS_CC;

 

cocos2d::Scene* GameScene::createScene()

{

    auto scene = Scene::create();   //创建一个场景

    auto layer = GameScene::create();   //创建一个图层

    scene->addChild(layer);

    return scene;

}

 

//初始化当前的图层

bool GameScene::init()

{

    if(!Layer::init())      //初始化父类

        return false;

     

    //获取屏幕大小

    Size visibleSize = Director::getInstance()->getVisibleSize();

    //添加一个图片精灵

    auto sprite = Sprite::create("OnePiece_1.png");

    sprite->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));

    this->addChild(sprite);

     

    auto sprite1 = Sprite::create("Flag_1.png");

    sprite1->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));

    sprite1->setTag(12);

    this->addChild(sprite1);

     

    //1.注册监听事件对象

    auto listener = EventListenerTouchOneByOne::create();       //单点触摸

    //auto listener = EventListenerTouchAllAtOnce::create();      //多点触摸

    //setTouchEnabled(true);        //3.0版本已经被弃用

     

    //2.定义监听对象的回调方法

    listener->onTouchBegan = CC_CALLBACK_2(GameScene::onTouchBegan, this);

    listener->onTouchMoved = CC_CALLBACK_2(GameScene::onTouchMoved, this);

    listener->onTouchEnded = CC_CALLBACK_2(GameScene::onTouchEnded, this);

     

    //3.在事件分发器中注册

    _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);

     

    return true;

}

 

//触摸事件函数(内部已创建,这里重新编写)

bool GameScene::onTouchBegan(Touch *touch, Event *unused_event)

{

//    touch->getLocation();       //获得的是OpenGL坐标

//    auto p1 = touch->getLocationInView();     //获得的是UI坐标

//    auto p2 = Dirctor::getInstance()->convertToGL(p1);    //转换成OpenGL坐标

    CCLOG("TouchBegan x:%lf, y:%lf", touch->getLocation().x, touch->getLocation().y);

     

    auto sprite = this->getChildByTag(12);      //通过标识获取精灵

    //sprite->setPosition(Vec2(touch->getLocation().x, touch->getLocation().y));

    sprite->runAction(MoveTo::create(0.5f, Point(touch->getLocation().x, touch->getLocation().y)));

 

    return true;

}

 

void GameScene::onTouchMoved(Touch *touch, Event *unused_event)

{

    //图标随鼠标一起移动

//    auto sprite = this->getChildByTag(12);      //通过标识获取精灵

//    sprite->setPosition(Vec2(touch->getLocation().x, touch->getLocation().y));

}

 

void GameScene::onTouchEnded(Touch *touch, Event *unused_event)

{

     

}

时间: 2024-08-30 19:24:21

Cocos2d-x3.2单点触摸的相关文章

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

 1 触摸 Coco2dx默认只有CCLayer及其派生类才有触摸的功能. 2 单点触摸 打开触摸开关和触摸方式 setTouchEnabled(true); setTouchMode(kCCTouchesOneByOne); Cocos2dx 对触摸分三布来处理.分是是点触,移动,离开.或是中间被打断.其功能皆有相应的virtual 函数进行override 的. virtual bool ccTouchBegan(CCTouch *pTouch,CCEvent *pEvent); vir

Cocos2d-x实例:单点触摸事件

为了让大家掌握Cocos2d-x中的事件机制下面我们以触摸事件为例使用事件触发器实现单点触摸事件.该实例如图8-3所示场景中有三个方块精灵显示顺序如图8-3所示拖拽它们可以移动它们事件响应优先级是按照它们的显示顺序. 下面我们再看看具体的程序代码首先看一下HelloWorldScene.h文件它的代码如下 #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" typedef

android 多点和单点触摸的区别

问题描述 android 多点和单点触摸的区别 当我使用双指缩放view,单指触摸提示显示的坐标.会出现双指缩放在抬起的时候,如果不是同时离开屏幕,那么就会触发单指触摸事件.请问如何在双指缩放时不触发单指事件? 解决方案 android多点触摸事件的一些事Android多点触摸事件捕获 解决方案二: 你缩放的时候记录一下按下的是几个点,几点触摸,抬起的时候判断一下,如果这各个点都抬起了,在结束缩放过程!

Cocos2d-x开发实例:单点触摸事件

下面我们通过一个实例详细了解一下层中单点触摸事件的实现过程.感受一下它的缺点和优点.该实例场景如下图所示场景中有两个方块精灵我们可以点击和移动它们. 下面我们看看HelloWorldScene.cpp具体的实现代码如下 bool HelloWorld::init() { if( !Layer::init() ) { returnfalse; } ...... setTouchEnabled(true); //设置为单点触摸 setTouchMode(Touch::DispatchMode::ON

Android基础知识之单点触摸_Android

相对于多点触摸,单点触摸还是很简单的. 新建一个工程,先看看布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="

多点触摸与单点触摸接口主要区别【转】

转自:http://blog.csdn.net/eleven_yy/article/details/7723079 上发单点触摸事件 input_report_key(input,ABS_MT_TRACKING_ID,0); input_report_key(input, BTN_TOUCH, 1); input_report_abs(input, ABS_MT_POSITION_X, ts->tc.x1); input_report_abs(input, ABS_MT_POSITION_Y,

Android基础知识之单点触摸

相对于多点触摸,单点触摸还是很简单的. 新建一个工程,先看看布局文件: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="

cocos2d x3 6移植安卓-cocos2d-x3.6移植安卓时出现图片中错误如何解决?

问题描述 cocos2d-x3.6移植安卓时出现图片中错误如何解决? 解决方案 这是安卓的版本问题啊.你NDK设置编译的andorid17..但是androidMainfest.xml里设置的是最少 9,改下.把9改成17看看 解决方案二: 这是安卓的版本问题啊.你NDK设置编译的andorid17..但是androidMainfest.xml里设置的是最少 9,改下.把9改成17看看

cocos2d x3 0bate相关-Cocos2d-x3.0bate版,关于粒子特效

问题描述 Cocos2d-x3.0bate版,关于粒子特效 用粒子编辑器生成个.plist文件,如何在代码中加载,以及控制其开启和关闭,求大神指点