学习笔记之cocos2d-x2.1.1实现多个精灵的拖动
来源:互联网 发布:淘宝卖的奶粉是真的吗 编辑:程序博客网 时间:2024/05/20 02:56
场景中存在多个精灵,需要移动以安放在合适的位置,简单的move会出现精灵区域重叠的情况,稍微在ccTouchBegan函数中做修改就可以解决这个问题,每次移动当前ccTouchBegan点击下的那个精灵。需要开启ccTouchBegan和ccTouchMoved的代理,不然单单的setTouchEnabled(true);是没有效果的,还是直接看代码吧
bool HelloWorld::init(){bool bRet = false;do {CC_BREAK_IF(! CCLayer::init());CCMenuItemImage *pCloseItem = CCMenuItemImage::create("CloseNormal.png","CloseSelected.png",this,menu_selector(HelloWorld::menuCloseCallback));CC_BREAK_IF(! pCloseItem);pCloseItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 500));CCMenuItemImage *pSaveItem = CCMenuItemImage::create("save_1.png","save_2.png",this,menu_selector(HelloWorld::menuSaveCallback));CC_BREAK_IF(! pSaveItem);pSaveItem->setPosition(ccp(CCDirector::sharedDirector()->getWinSize().width - 100, 100));CCMenu* pMenu = CCMenu::create(pCloseItem,pSaveItem, NULL);pMenu->setPosition(CCPointZero);CC_BREAK_IF(! pMenu);this->addChild(pMenu, 1);CCSize s = CCDirector::sharedDirector()->getWinSize();CCSprite* bg = CCSprite::create("bg.png");CC_BREAK_IF(!bg);bg->setPosition(ccp(s.width/2,s.height/2));this->addChild(bg);//////////////////////////////////////////////////////////////////////////TagCount = 0;CCSprite* sprite=CCSprite::create("1.png"); CC_BREAK_IF(!sprite); sprite->setPosition(ccp(100,200));this->addChild(sprite,1,++TagCount); CCSprite* sprite2=CCSprite::create("2.png"); CC_BREAK_IF(!sprite2); sprite2->setPosition(ccp(500,200));this->addChild(sprite2,2,++TagCount); CCDirector* pDirector = CCDirector::sharedDirector();pDirector->getTouchDispatcher()->addTargetedDelegate(this, 0, true);setTouchEnabled(true);bRet = true;} while (0);return bRet;}bool HelloWorld::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent) { int tag ;for (tag = 1;tag<=TagCount;tag++){CCSprite* sprite= (CCSprite*)this->getChildByTag(tag); CCPoint touchPoint = pTouch->getLocationInView();touchPoint = CCDirector::sharedDirector()->convertToGL( touchPoint );CCRect rc1 = sprite->boundingBox();if (rc1.containsPoint(touchPoint)){ pSprite = sprite;return true;}}return false; } void HelloWorld::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent) {CCPoint beginPoint=pTouch->getLocationInView(); beginPoint=CCDirector::sharedDirector()->convertToGL(beginPoint); CCPoint endPoint=pTouch->getPreviousLocationInView(); endPoint=CCDirector::sharedDirector()->convertToGL(endPoint); CCPoint offSet =ccpSub(beginPoint,endPoint); CCPoint toPoint=ccpAdd(pSprite->getPosition(),offSet); pSprite->setPosition(toPoint); }
- 学习笔记之cocos2d-x2.1.1实现多个精灵的拖动
- 学习笔记之cocos2d-x2.1.1实现读取.plist文件
- cocos2d-x学习笔记—封装可拖动的精灵
- Cocos2d-x实现精灵的拖动
- 学习笔记之cocos2d-x2.1.1实现读取.plist文件(使用数组CCArray)
- 学习笔记之cocos2d-x2.1.1实现修改plist文件数据,用TinyXml解析XML
- 学习笔记之cocos2d-x2.1.1 TinyXml解析XML
- Cocos2D-X2.2.3学习笔记8(处理精灵单击、双击和三连击事件)
- cocos2d-x 2.1 实现精灵拖动
- COCOS2D-X之拖动精灵Demo
- Cocos2d-x精灵学习笔记
- Cocos2d-x精灵学习笔记
- Cocos2D-X2.2.3学习笔记10(几何图形)
- quick-cocos2d-x(lua) 拖动精灵使其在屏幕移动的效果实现
- cocos2d-x实现多个精灵动画同步播放(一)
- cocos2d-x实现多个精灵动画同步播放(二)
- 开发笔记9-cocos2d之精灵的创建与移动
- cocos2d-x2.1.2动画与精灵表单
- 利用oracle发送邮件功能简单监控数据库运行状态
- 图的遍历
- 我的Android进阶之旅------>Android实现数据存储技术
- mysql 慢查询配置
- 异常处理方法,同步VS异步
- 学习笔记之cocos2d-x2.1.1实现多个精灵的拖动
- 解决64位Linux系统编译32位错误
- linux ps命令参数和使用详解
- 关于SIGPIPE导致的程序退出
- IPRAN PTNRAN
- RFC查询
- java 日期前后推算计算
- VC++检测可执行程序DLL、EXE等是32位还是64位
- Hibernate 3新特性介绍及发展趋势