cocos2dx 3.x(精灵的碰撞检测,点击移动与拖动精灵)

 1 //
 2 //  MainScene.hpp
 3 //  helloworld
 4 //
 5 //  Created by apple on 16/9/19.
 6 //
 7 //
 8
 9 #ifndef MainScene_hpp
10 #define MainScene_hpp
11
12 #include <stdio.h>
13 #include "cocos2d.h"
14 USING_NS_CC;
15 using namespace cocos2d;
16 //定义一个场景类
17
18 class MainScene : public cocos2d::Layer{
19
20 private:
21     // 成员变量(私有的)
22     Size size;//注意不能用auto关键字
23     Sprite *sprite1, *sprite2;//定义两个成员变量的精灵(注意不能用auto关键字
24     Label *label;//全局变量Label->显示碰撞与未碰撞(注意不能用auto关键字)
25 public:
26     virtual bool init(); // 虚函数,返回值为布尔类型,没有函数
27
28     static cocos2d::Scene* createScene();//static是一个类方法返回场景
29     //声明点击手势
30     virtual bool onTouchBegan(Touch *touch, Event *unused_event);
31     //声明拖动手势
32     virtual void onTouchMoved(Touch *touch, Event *unused_event);
33
34     CREATE_FUNC(MainScene);
35 };
36
37
38 #endif /* MainScene_hpp */
 1 //
 2 //  MainScene.cpp
 3 //  helloworld
 4 //
 5 //  Created by apple on 16/9/19.
 6 //
 7 //
 8
 9 #include "MainScene.hpp"
10 cocos2d::Scene * MainScene::createScene()
11 {
12      auto scene = Scene::create();
13 //    CCScene * scene = CCScene::create();// 创建场景
14     //创建层
15     MainScene *layer = MainScene::create();
16     scene->addChild(layer);
17     return scene;
18 }
19 bool MainScene::init(){
20     if (!Layer::init()) {
21         return false;
22     }
23     //获取屏幕大小
24     size = Director::getInstance()->getVisibleSize();
25     //auto size = Director::getInstance()->getWinSize();
26     //添加一个图片精灵
27     sprite1 = Sprite::create("CloseNormal.png");
28     sprite1->setPosition(Vec2(size.width/2, size.height/2));
29     this->addChild(sprite1);
30
31     sprite2 = Sprite::create("CloseNormal.png");
32     sprite2->setPosition(Vec2(size.width*0.4, size.height/2));
33     this->addChild(sprite2);
34
35     label = Label::createWithSystemFont("No collision", "Marker Felt", 50);
36     label->setPosition(Vec2(size.width/2, size.height*0.7));
37     this->addChild(label);//直接把Label显示在屏幕上
38
39     //创建监听事件对象
40     auto listener = EventListenerTouchOneByOne::create();
41
42     //定义监听事件的回调函数
43     listener->onTouchBegan = CC_CALLBACK_2(MainScene::onTouchBegan, this);
44     listener->onTouchMoved = CC_CALLBACK_2(MainScene::onTouchMoved, this);
45
46     //在事件分发器中注册
47     _eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
48
49     return true;
50 }
51
52 //点击移动精事件回调方法
53 bool MainScene::onTouchBegan(Touch *touch, Event *unused_event)
54 {
55     //获取触屏位置(坐标)
56     Point pos = touch->getLocation();
57
58     sprite2->setPosition(pos);//把点击屏幕的触摸点(坐标)给赋值给精灵2
59
60     log("TouchBegan");
61
62     return true;
63 }
64 //拖动手势执行事件方法
65 void MainScene::onTouchMoved(Touch *touch, Event *unused_event)
66 {
67     //获取当前拖动手势的坐标与位置
68     Point pos = touch->getLocation();
69
70     sprite2->setPosition(pos);//让精灵跟着拖动点移动
71
72     //判断两个精灵是否相交
73     if (sprite2->getBoundingBox().intersectsRect(sprite1->getBoundingBox())){    //3.0改变处
74         label->setString("Collision!");//改变屏幕上Label的文字
75     }else{
76         label->setString("No collision");//改变屏幕上Label的文字
77
78         log("TouchMoved");
79     }
80 }
时间: 2024-08-28 14:08:22

cocos2dx 3.x(精灵的碰撞检测,点击移动与拖动精灵)的相关文章

cocos2d-x CCSprite 精灵监听点击事件

参考文章: cocos2d-x 精灵监听点击事件 http://labs.easymobi.cn/?p=5167 实现过程,实现CCTouchDelegate接口,在enter 的时候添加监听,exit 和析构时移除监听,点击时将touch 的坐标转化为相对精灵的坐标,如果是否在精灵的范围内,则响应点击.主要是参考前面两篇文章中的例子,不同的地方在判断区域,个人觉得太复杂.所以稍微修改了下,看起来更容易理解. PianoTile.h class PianoTile : public cocos2

创建3D模型/添加屏幕监听,点击屏幕时,精灵带有旋转的移动

 3D模型创建 //3D models auto model = Sprite3D::create("Sprite3DTest/boss1.obj"); model->setScale(4); model->setTexture("Sprite3DTest/boss.png"); model->setPosition3D(Vec3(s.width/2, s.height/2, 0)); addChild(model); EventListene

Cocos2d-x 3.0中 物理碰撞检测中onContactBegin回调函数不响应问题

好吧,其实这篇也是临时冒出来的,最近朋友要做个物理游戏,以前做物理还是用box2d,呃,确实要花些功夫才能搞懂其中的精髓,但是听讲这套引擎重新封装了一次,要容易很多,所以就简单尝试了一下,感觉确实要简单不少,不过在这其中还是遇到了些问题,首先就来说说onContactBegin这个回调函数响应问题. 先说说情况,简单做了一个打砖块的游戏,前面一切都很顺利,只是做到碰撞检测的时候,发现回调函数弄死都不调用.开始我以为函数写错了,后来查了api,testCpp都没有错,在3.0的api中,没有关于P

【cocos2d-x学习笔记】ZOder、tag、场景切换、精灵的各种创建方式、三个特殊层、坐标体系

ZOder: 1.是描述渲染顺序的值,每个CCNode都有ZOder,默认是0. 2.ZOder越大则越后面绘制.如果ZOder值相同,那么看arrival(全局变量每次加一)顺序,先加入的节点先绘制,ZOder只在相同父节点的节点直接进行比较 tag:是一个节点的身份证,方便通过getChildByTag来获取节点对象,它的意义在于减少成员变量 TAG只在相同父节点的节点之间有效 TAG在相同父节点的儿子之间不能相同,相同情况cocos不报错,getChildByTag可能会获取到不是你想要的

cocos2dx 3.x 精灵重叠时点击最上层的精灵

ps. 这个方法只适用设置精灵的触摸.. //注册触摸事件..3.X后可以在这样写..不需要重新声明 EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create(); listener->onTouchBegan = [](Touch* pTouch, Event* pEvent){ return true; }; listener->onTouchMoved = [](Touch* pTouch, Eve

cocos2dx 3.x(点击屏幕移动精灵,拖动精灵)不需要写回调函数

1 // 2 // MainScene.cpp 3 // helloworld 4 // 5 // Created by apple on 16/9/19. 6 // 7 // 8 9 #include "MainScene.hpp" 10 Scene * MainScene::createScene() 11 { 12 auto scene = Scene::create(); 13 //创建层 14 MainScene *layer = MainScene::create(); 1

Cocos2d-x 使用物理引擎进行碰撞检测

[转自]: http://blog.csdn.net/cbbbc/article/details/38541099 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵的条件是否满足判断条件就可以了.例如,在飞机大战中,判断我方子弹和敌机是否发生碰撞一般在定时器中通过敌机所在位置的矩形是否包括了子弹的位置来判断是否发生碰撞.在消除类游戏中,判断在y轴或x轴上是否要消除相同物品一般在定时器中通过循环来检测在某个方向上是否有连续的相同物品满足消除个数来移除精灵就可以了

cocos2d-x 显示触摸操作(显示水波点击效果,用于视频演示)

昨天刚刚參加玩游戏设计大赛, 积累了一些东西. 接下去将会逐个分享出来. 首先是显示触摸操作. 由于要演示我们的作品.使用试玩过程中, 假设没办法显示我们的触摸操作(像录制视频一样, 点击了屏幕某点, 出现红点或者水波荡漾这种效果), 那样的话演示效果不好. 观众就无法直观的了解我们的游戏.所以考虑加入这个功能. 之后, 走了点弯路.一直在考虑手机本身有没有这个功能,后来找了非常久.非越狱iPhone是没有这个功能的. 于是乎, 自己写呗. 详细效果例如以下: 实现非常easy.主要用到了一个粒

基于cocos2d-x对俯视角游戏碰撞检测及碰撞处理的探究

作者:i_dovelemon 来源:CSDN 日期:2015/2/10 主题:俯视角游戏,碰撞检测,碰撞处理 引言 对于任何游戏来说,碰撞检测和碰撞处理都是非常重要的内容.最近自己在编写一个俯视角的类rouge-like的游戏.游戏基于网格来设计地图,在游戏设计过程中,尤其是在设计游戏的碰撞系统的时候遇到了麻烦.经过多方面的努力,终于解决了问题,现在就此问题,记录下我的心得和体会. 碰撞检测 在我的游戏中,大部分的时候都是使用AABB-AABB这种碰撞盒来进行碰撞.对于此种的碰撞体,在前面的文章