Cocos2d-x中,如何通过触摸来移动一个精灵
2015-07-27 12:46
513 查看
Cocos2d-x中,如何通过按住一个精灵移动手指,使精灵跟随手指移动,方法如下:
首先添加精灵,定义触摸事件
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
ball = Sprite::create("Ball.png");
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegin, this);
listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnd, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
addChild(ball);
return true;
}然后创建onTouchMoved函数
void HelloWorld::onTouchMoved(Touch* touch, Event* event){
Rect ballRect = ball->getBoundingBox();
//获取精灵的区域
Vec2 beginPoint = touch->getLocation();
//获取触摸的开始位置
if (ballRect.containsPoint(beginPoint)){
Point endPoint = touch->getPreviousLocation();
//获取触摸的结束位置
Point offSet = beginPoint - endPoint;
//计算出两个位置的差
Point newPosition = ball->getPosition() + offSet;
//计算出精灵现在应该在的位置
ball->setPosition(newPosition);
//把精灵的位置设置到它应该在的位置
}
}这样即可实现基本的精灵跟随触摸位置移动。
不过这个方法有一定的问题,当快速移动时,精灵可能会丢失触摸的位置,需要重新点击并且移动才可以继续跟上手指。
首先添加精灵,定义触摸事件
bool HelloWorld::init()
{
if ( !Layer::init() )
{
return false;
}
ball = Sprite::create("Ball.png");
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchMoved = CC_CALLBACK_2(HelloWorld::onTouchMoved, this);
listener->onTouchBegan = CC_CALLBACK_2(HelloWorld::onTouchBegin, this);
listener->onTouchEnded = CC_CALLBACK_2(HelloWorld::onTouchEnd, this);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, this);
addChild(ball);
return true;
}然后创建onTouchMoved函数
void HelloWorld::onTouchMoved(Touch* touch, Event* event){
Rect ballRect = ball->getBoundingBox();
//获取精灵的区域
Vec2 beginPoint = touch->getLocation();
//获取触摸的开始位置
if (ballRect.containsPoint(beginPoint)){
Point endPoint = touch->getPreviousLocation();
//获取触摸的结束位置
Point offSet = beginPoint - endPoint;
//计算出两个位置的差
Point newPosition = ball->getPosition() + offSet;
//计算出精灵现在应该在的位置
ball->setPosition(newPosition);
//把精灵的位置设置到它应该在的位置
}
}这样即可实现基本的精灵跟随触摸位置移动。
不过这个方法有一定的问题,当快速移动时,精灵可能会丢失触摸的位置,需要重新点击并且移动才可以继续跟上手指。
相关文章推荐
- Cocos2d-x中背景音乐和音效使用实例
- Cocos2d-x学习笔记之CCScene、CCLayer、CCSprite的默认坐标和默认锚点实验
- Cocos2d-x UI开发之CCControlPotentiometer控件类使用实例
- Cocos2d-x UI开发之文本类使用实例
- Cocos2d-x保存用户游戏数据之XML文件是否存在问题判断方法
- Cocos2d-x UI开发之菜单类使用实例
- Cocos2d-x UI开发之CCControlButton控件类实例
- Cocos2d-x学习笔记之世界坐标系、本地坐标系、opengl坐标系、屏幕坐标系
- Cocos2d-x UI开发之CCControlColourPicker控件类使用实例
- Cocos2d-x学习笔记之CCLayerColor层的使用实例
- Cocos2d-x Schedule定时器的使用实例
- Cocos2d-x中使用CCScrollView来实现关卡选择实例
- Cocos2d-x中CCEditBox文本输入框的使用实例
- cocos2d-x学习笔记之CCLayer、CCLayerColor、CCLayerGradient、CCLayerMultiplex场景层介绍
- Cocos2d-x UI开发之CCControlSlider控件类使用实例
- Cocos2d-x学习笔记之开发环境搭建
- Cocos2d-x学习笔记之Hello World!
- Cocos2d-x的内存管理总结
- Cocos2d-x 3.0中集成社交分享ShareSDK的详细步骤和常见问题解决
- Cocos2d-x入门教程(详细的实例和讲解)