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. #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/, size.height/));
  29. this->addChild(sprite1);
  30.  
  31. sprite2 = Sprite::create("CloseNormal.png");
  32. sprite2->setPosition(Vec2(size.width*0.4, size.height/));
  33. this->addChild(sprite2);
  34.  
  35. label = Label::createWithSystemFont("No collision", "Marker Felt", );
  36. label->setPosition(Vec2(size.width/, 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. }

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

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

    // // MainScene.cpp // helloworld // // Created by apple on 16/9/19. // // #include "MainScene. ...

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

    ps. 这个方法只适用设置精灵的触摸.. //注册触摸事件..3.X后可以在这样写..不需要重新声明 EventListenerTouchOneByOne *listener = EventListe ...

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

    [转自]: http://blog.csdn.net/cbbbc/article/details/38541099 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵 ...

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

    昨天刚刚參加玩游戏设计大赛, 积累了一些东西. 接下去将会逐个分享出来. 首先是显示触摸操作. 由于要演示我们的作品.使用试玩过程中, 假设没办法显示我们的触摸操作(像录制视频一样, 点击了屏幕某点, ...

  5. cocos2dx基础篇(25) 简单碰撞检测

    [3.x] 将数学类 CCPoint.CCRect 改为v3.x版本的 Vec2.Rect 就好了. [简单碰撞检测] 在一些游戏中经常会遇到碰撞检测的情况,如愤怒的小鸟飞出去后,是否与石头发生碰撞. ...

  6. cocos2dx 3.x 蒙板 遮罩 点击圆功能

    //注册触摸 EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create(); listener->onT ...

  7. jQuery点击图片放大拖动查看效果

    效果如图: 放大前: 放大后(可拖动图片浏览): 源码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head& ...

  8. 百度地图Api进阶教程-点击生成和拖动标注4.html

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. winform 点击控件拖动窗体

    private Point mPoint = new Point(); private void 选择控件_MouseDown(object sender, MouseEventArgs e) { m ...

随机推荐

  1. hdoj-1233-还是畅通工程

    题目:hdoj-1233 题解: 本题是典型的最小生成树问题,给出的是无向图,这里使用的方法是Prim最小生成树算法. Reference Prim算法参照:最小生成树-Prim算法和Kruskal算 ...

  2. 如何使用Xcode分析调试在真机运行的UE4 IOS版游戏

    写本文的是因为UE4 官方文档虽然也有,但主要讲的是是用UE4Editor把游戏打成一个IPA包的形式发布的方法 而对于想通过Xcode分析UE4的渲染流程来学习或优化的朋友,那官方文档的资料还是不够 ...

  3. thinkphp四种url访问方式详解

    本文实例分析了thinkphp的四种url访问方式.分享给大家供大家参考.具体分析如下: 一.什么是MVC thinkphp的MVC模式非常灵活,即使只有三个中和一个也可以运行. M -Model 编 ...

  4. EditPlus使用心得及常用快捷键

    下载好烈火版EditPlus_4.00.465_SC  然后去官网下载自动补全ACP文件  我用的是php_stx_acp.zip  解压到editplus4主目录下 然后打开软件-设置-参数 先调字 ...

  5. Bootstrap页面布局2 - 包含BS文件

    如图所示: bootstrap布局基于HTML5,为了使IE8以下也能使用某些HTML5的标签,必须要引入文件:http://html5shiv.googlecode.com/svn/trunk/ht ...

  6. Remote 的远程使用

        <script type="text/javascript">        $(function () {            //每次隐藏的时候 删除页面 ...

  7. MySql练习+加源代码

    一.设有一个数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher). 四个表的结构分别如表1-1的表(一)~表(四)所示,数据如表1 ...

  8. shell的if else 以及大于,小于等逻辑表达式

    if ....; then .... elif ....; then .... else .... fi 大多数情况下,可以使用测试命令来对条件进行测试.比如可以比较字符串.判断文件是否存在及是否可读 ...

  9. Decoder with 3 Inputs and 2 3 = 8 Outputs

    COMPUTER ORGANIZATION AND ARCHITECTURE DESIGNING FOR PERFORMANCE NINTH EDITION

  10. java 操作数据库

    package foo;import java.sql.*; public class JdbcDemo { private static Connection conn; private stati ...