cocos::触摸跟随移动
2016-04-02 13:36
615 查看
#pragma once #ifndef __CONTROLL_MOVE_H_ #define __CONTROLL_MOVE_H_ #include "cocos2d.h" USING_NS_CC; class ControllMoveLayer :public Layer { public : CREATE_FUNC(ControllMoveLayer); bool init(); void setPlayer(Node *player); private: void update(float dt); bool onTouchBegan(Touch *touch, Event *unused_event); void onTouchCancelled(Touch *touch, Event *unused_event); void onTouchMoved(Touch *touch, Event *unused_event); void onTouchEnded(Touch *touch, Event *unused_event); float mDeltaX; float mDeltaY; Node *mPlayer; bool isControlled; }; #endif
#include "ControllMoveLayer.h" bool ControllMoveLayer::init() { if (!Layer::init()) { return false; } mPlayer = NULL; mDeltaX = 0; mDeltaY = 0; isControlled = false; scheduleUpdate(); return true; } void ControllMoveLayer::setPlayer(Node *player) { if (mPlayer != NULL) { removeChild(player); CC_SAFE_DELETE(player); } mPlayer = player; addChild(player); auto listeScene = EventListenerTouchOneByOne::create(); listeScene->onTouchBegan = CC_CALLBACK_2( ControllMoveLayer::onTouchBegan, this); listeScene->onTouchCancelled = CC_CALLBACK_2 (ControllMoveLayer::onTouchCancelled, this); listeScene->onTouchMoved = CC_CALLBACK_2( ControllMoveLayer::onTouchMoved, this); listeScene->onTouchEnded = CC_CALLBACK_2( ControllMoveLayer::onTouchEnded, this); Director::getInstance()->getEventDispatcher() ->addEventListenerWithSceneGraphPriority(listeScene, this); } void ControllMoveLayer::update(float dt) { if (mPlayer == NULL) { return; } } bool ControllMoveLayer::onTouchBegan(Touch *touch, Event *unused_event) { auto playerBox = mPlayer->getBoundingBox(); auto touchPos = Director::getInstance() ->convertToGL(touch->getLocationInView()); if (playerBox.containsPoint(touchPos)) { isControlled = true; auto playerPos = mPlayer->getPosition(); mDeltaX = touchPos.x - playerPos.x; mDeltaY = touchPos.y - playerPos.y; return true; } return true; } void ControllMoveLayer::onTouchCancelled(Touch *touch, Event *unused_event) { isControlled = false; } void ControllMoveLayer::onTouchMoved(Touch *touch, Event *unused_event) { if (isControlled) { Point mMovedPos = touch->getLocationInView(); mMovedPos = Director::getInstance()->convertToGL(mMovedPos); Size visibleSize = Director::getInstance()->getVisibleSize(); Point origin = Director::getInstance()->getVisibleOrigin(); //記得減去偏移量 float x = mMovedPos.x - mDeltaX; float y = mMovedPos.y - mDeltaY; //x到达屏幕左边界 if (x <= mPlayer->getContentSize().width / 2 + origin.x) x = mPlayer->getContentSize().width / 2 + origin.x; //x到达屏幕右边界 else if (x >= visibleSize.width - mPlayer->getContentSize().width / 2) x = visibleSize.width - mPlayer->getContentSize().width / 2; //y到达屏幕下边界 if (y <= mPlayer->getContentSize().height / 2 + origin.y) y = mPlayer->getContentSize().height / 2 + origin.y; //x到达屏幕上边界 else if (y >= visibleSize.height - mPlayer->getContentSize().height / 2) y = visibleSize.height - mPlayer->getContentSize().height / 2; //飞机跟随手指移动 mPlayer->setPosition(Point(x, y)); } } void ControllMoveLayer::onTouchEnded(Touch *touch, Event *unused_event) { isControlled = false; }
相关文章推荐
- cocos2dx集成友盟社会化分享
- cocos2d-JS 第二炮Cocos Creater(使用当下最新的编辑器,带你ZB装带你fly)
- 17、Cocos2dx 3.0游戏开发找小三之内置的经常使用层:三剑客LayerColor、LayerGradient、Menu
- 转载自笨木头的Cocos2d-x Auto-batching分析
- Cocos2d 官网介绍,新手必看!!!!!!!!!!!!!!!!!!!!!!!!!
- Quick-Cocos2dx 快速了解
- cocos:有限状态机(消息驱动)
- cocos2dx 3.3 + lua 学习笔记(04)--- 动作回调、函数回调、骨骼动画回调
- cocos2d-JS 第一炮HelloWorld(很适合小白)
- cocos2dx 3.3 + lua 学习笔记(03)--- 触摸事件、定时器、进度条
- cocos2dx 3.3 + lua 学习笔记(02)--- 游戏场景的基本搭建
- cocos2d-x 3.4版本 Android ndk-gdb真机调试环境搭建
- 选择cocos2d-js的原因,摘录了官网的一些东西
- cocos2d-js创建帧动画
- Cocos 2.2.3 ScrollView浅谈
- cocos:有限状态机
- cocos2dx之box2d画刚体外边框
- android JNI 与cocos结合篇(二)
- Cocos2dx引擎9-注册事件监听器
- cocos2dx lua UI栈