cocos2dx 3.x(精灵的碰撞检测,点击移动与拖动精灵)
//
// MainScene.hpp
// helloworld
//
// Created by apple on 16/9/19.
//
// #ifndef MainScene_hpp
#define MainScene_hpp #include <stdio.h>
#include "cocos2d.h"
USING_NS_CC;
using namespace cocos2d;
//定义一个场景类 class MainScene : public cocos2d::Layer{ private:
// 成员变量(私有的)
Size size;//注意不能用auto关键字
Sprite *sprite1, *sprite2;//定义两个成员变量的精灵(注意不能用auto关键字
Label *label;//全局变量Label->显示碰撞与未碰撞(注意不能用auto关键字)
public:
virtual bool init(); // 虚函数,返回值为布尔类型,没有函数 static cocos2d::Scene* createScene();//static是一个类方法返回场景
//声明点击手势
virtual bool onTouchBegan(Touch *touch, Event *unused_event);
//声明拖动手势
virtual void onTouchMoved(Touch *touch, Event *unused_event); CREATE_FUNC(MainScene);
}; #endif /* MainScene_hpp */
//
// MainScene.cpp
// helloworld
//
// Created by apple on 16/9/19.
//
// #include "MainScene.hpp"
cocos2d::Scene * MainScene::createScene()
{
auto scene = Scene::create();
// CCScene * scene = CCScene::create();// 创建场景
//创建层
MainScene *layer = MainScene::create();
scene->addChild(layer);
return scene;
}
bool MainScene::init(){
if (!Layer::init()) {
return false;
}
//获取屏幕大小
size = Director::getInstance()->getVisibleSize();
//auto size = Director::getInstance()->getWinSize();
//添加一个图片精灵
sprite1 = Sprite::create("CloseNormal.png");
sprite1->setPosition(Vec2(size.width/, size.height/));
this->addChild(sprite1); sprite2 = Sprite::create("CloseNormal.png");
sprite2->setPosition(Vec2(size.width*0.4, size.height/));
this->addChild(sprite2); label = Label::createWithSystemFont("No collision", "Marker Felt", );
label->setPosition(Vec2(size.width/, size.height*0.7));
this->addChild(label);//直接把Label显示在屏幕上 //创建监听事件对象
auto listener = EventListenerTouchOneByOne::create(); //定义监听事件的回调函数
listener->onTouchBegan = CC_CALLBACK_2(MainScene::onTouchBegan, this);
listener->onTouchMoved = CC_CALLBACK_2(MainScene::onTouchMoved, this); //在事件分发器中注册
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this); return true;
} //点击移动精事件回调方法
bool MainScene::onTouchBegan(Touch *touch, Event *unused_event)
{
//获取触屏位置(坐标)
Point pos = touch->getLocation(); sprite2->setPosition(pos);//把点击屏幕的触摸点(坐标)给赋值给精灵2 log("TouchBegan"); return true;
}
//拖动手势执行事件方法
void MainScene::onTouchMoved(Touch *touch, Event *unused_event)
{
//获取当前拖动手势的坐标与位置
Point pos = touch->getLocation(); sprite2->setPosition(pos);//让精灵跟着拖动点移动 //判断两个精灵是否相交
if (sprite2->getBoundingBox().intersectsRect(sprite1->getBoundingBox())){ //3.0改变处
label->setString("Collision!");//改变屏幕上Label的文字
}else{
label->setString("No collision");//改变屏幕上Label的文字 log("TouchMoved");
}
}
cocos2dx 3.x(精灵的碰撞检测,点击移动与拖动精灵)的更多相关文章
- cocos2dx 3.x(点击屏幕移动精灵,拖动精灵)不需要写回调函数Lua表达式
// // MainScene.cpp // helloworld // // Created by apple on 16/9/19. // // #include "MainScene. ...
- cocos2dx 3.x 精灵重叠时点击最上层的精灵
ps. 这个方法只适用设置精灵的触摸.. //注册触摸事件..3.X后可以在这样写..不需要重新声明 EventListenerTouchOneByOne *listener = EventListe ...
- Cocos2d-x 使用物理引擎进行碰撞检测
[转自]: http://blog.csdn.net/cbbbc/article/details/38541099 通常在游戏简单逻辑判断和模拟真实的物理世界时,我们只需要在定时器中判断游戏中各个精灵 ...
- cocos2d-x 显示触摸操作(显示水波点击效果,用于视频演示)
昨天刚刚參加玩游戏设计大赛, 积累了一些东西. 接下去将会逐个分享出来. 首先是显示触摸操作. 由于要演示我们的作品.使用试玩过程中, 假设没办法显示我们的触摸操作(像录制视频一样, 点击了屏幕某点, ...
- cocos2dx基础篇(25) 简单碰撞检测
[3.x] 将数学类 CCPoint.CCRect 改为v3.x版本的 Vec2.Rect 就好了. [简单碰撞检测] 在一些游戏中经常会遇到碰撞检测的情况,如愤怒的小鸟飞出去后,是否与石头发生碰撞. ...
- cocos2dx 3.x 蒙板 遮罩 点击圆功能
//注册触摸 EventListenerTouchOneByOne *listener = EventListenerTouchOneByOne::create(); listener->onT ...
- jQuery点击图片放大拖动查看效果
效果如图: 放大前: 放大后(可拖动图片浏览): 源码如下: <html xmlns="http://www.w3.org/1999/xhtml"> <head& ...
- 百度地图Api进阶教程-点击生成和拖动标注4.html
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
- winform 点击控件拖动窗体
private Point mPoint = new Point(); private void 选择控件_MouseDown(object sender, MouseEventArgs e) { m ...
随机推荐
- ci文件缓存使用,可以用来实现多模板切换 改写URL辅助函数
//2015年2月28日15:13:41 $this->load->driver('cache', array('adapter' => 'file'));//加载适配器 //请注意 ...
- 【转】区别和认识.Net四个判等函数
原文地址:不详 .Net有四个判等函数?不少人看到这个标题,会对此感到怀疑.事实上确是如此,.Net提供了ReferenceEquals.静态Equals,具体类型的Equals以及==操作符这四个判 ...
- 优雅的函数式编程--Clojure概述
欢迎转载,转载请注明出处,徽沪一郎. 楔子 由于阅读storm源码的原因,头一次接触到Clojure.没有花特别的时间来研究clojure语法,只是在一些特殊的用法时,才查了一下clojure官网的文 ...
- Redis 笔记与总结4 set 和 zset 类型
(一)set 类型 set 是集合是 string 类型的无序集合. set 元素最大可以包含(2 的 32 次方)个元素.set 的是通过 hash table 实现的,所以添加.删除和查找的复杂度 ...
- nginx服务器调优
nginx服务器调优措施总结: 1.选择合适的网络IO模型 epoll select poll 2.配置合适的启动进程数和每个进程处理请求的工作线程数 3.启用gzip压缩以减小通信量以减少网络IO ...
- php面向对象之__toString()
似曾相识,在php面向对象编程之魔术方法__set,曾经介绍了什么是魔术方法,这一章又介绍一个魔术方法__tostring(). __toString()是快速获取对象的字符串信息的便捷方式,似乎魔术 ...
- Ubuntu 14.04 LTS 64bit 编译SDL的问题
http://blog.csdn.net/jhting/article/details/38523945 Ubuntu 14.04 LTS 64bit 编译SDL的问题 分类: C/C++2014-0 ...
- 删除本地git版本库中受版本控制的文件
git乱码解决方案汇总 乱码原因 搜索一番,发现git文件名.log乱码,是普遍问题,这其中有编码的原因,也有跨平台的原因.主要原因是Windows 系统中的Git对中文文件名采用不同的编码保存所致 ...
- UITextView打开文字中的URL
1. 背景介绍 UITextView里显示的文字带有url,点击url可以打开对应的网页,可以分两种打开方式:(1)在App内打开url:(2)用safari打开url. 2. 实现代码: (1)声明 ...
- ecshop transport.js 和 jquery 冲突解决办法
您提供一个简单的解决transport.js 和 jquery 方法: 在 page_header.lbi 库文件中加入如下代码,注意操作顺序: 1.先导入transport.js 文件 {inse ...