使用cocoswidget来实现
很简答,配置好cocoswidget之后,就可以直接使用了。代码如下:
class WelcomeScene
: public cocos2d::CCLayer |
void onTouched(CCObject*
pSender, float fx, float fy); |
bool WelcomeScene::init() |
CWidgetWindow*
m_pWindow = CWidgetWindow::create(); |
m_pWindow->setMultiTouchEnabled( true ); |
this ->addChild(m_pWindow); |
CControlView*
pView = CControlView::create( "control_baseboard.png" , "control_joystick.png" ); |
pView->setPosition(CCPoint(100,
100)); |
pView->setAnchorPoint(CCPointZero); |
pView->setRadius(pView->getContentSize().width
/ 2); //直接设置即可,原作者没有透漏作用 |
pView->setOnControlListener( this ,
ccw_control_selector(WelcomeScene::onTouched)); //回调函数 |
pView->setOpacity(200); //设置透明度 |
m_pWindow->addChild(pView); |
void WelcomeScene::onTouched(CCObject*
pSender, float fx, float fy) |
CCLOG( "x
= %f y = %f" , fx,fy); |
如何配置cocoswidget请参考【
http://cstriker1407.info/blog/cocos2dx-study-notes-custom-engineering-path-and-cocoswidget-configuration/ 】。
截图:
![](http://cstriker1407.info/blog/wp-content/uploads/2014/03/20140306105921_85869.png)
自己写一个
参考
【
http://www.himigame.com/iphone-cocos2dx/721.html 】
【
http://blog.csdn.net/kuloveyouwei/article/details/9101833 】
Joystick.h:
class HRocker
: public cocos2d::CCLayer
{ |
//初始化
aPoint是摇杆中心 aRadius是摇杆半径 aJsSprite是摇杆控制点 aJsBg是摇杆背景 |
static HRocker*
HRockerWithCenter(cocos2d::CCPoint aPoint , float aRadius
,cocos2d::CCSprite* aJsSprite,cocos2d::CCSprite* aJsBg, bool _isFollowRole); |
cocos2d::CCPoint
getDirection(); |
HRocker
* initWithCenter(cocos2d::CCPoint aPoint , float aRadius
,cocos2d::CCSprite* aJsSprite,cocos2d::CCSprite* aJsBg, bool _isFollowRole); |
cocos2d::CCPoint
centerPoint; //摇杆中心 |
cocos2d::CCPoint
currentPoint; //摇杆当前位置 |
cocos2d::CCSprite
*jsSprite; |
bool isFollowRole; //是否跟随用户点击 |
void updatePos( float dt); |
virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent); |
virtual void ccTouchMoved(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent); |
virtual void ccTouchEnded(cocos2d::CCTouch *pTouch,cocos2d::CCEvent *pEvent); |
Joystick.cpp:
void HRocker::updatePos( float dt){ |
jsSprite->setPosition(ccpAdd(jsSprite->getPosition(),ccpMult(ccpSub(currentPoint,
jsSprite->getPosition()),0.5))); |
schedule(schedule_selector(HRocker::updatePos)); //添加刷新函数 |
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate( this ,
0, false ); |
this ->unschedule(schedule_selector(HRocker::updatePos)); //删除刷新 |
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate( this ); //删除委托 |
CCPoint
HRocker::getDirection() |
return ccpNormalize(ccpSub(centerPoint,
currentPoint)); |
float HRocker::getVelocity() |
return ccpDistance(centerPoint,
currentPoint); |
HRocker*
HRocker:: HRockerWithCenter(CCPoint aPoint , float aRadius
,CCSprite* aJsSprite,CCSprite* aJsBg, bool _isFollowRole){ |
HRocker
*jstick=HRocker::create(); |
jstick->initWithCenter(aPoint,aRadius,aJsSprite,aJsBg,_isFollowRole); |
bool HRocker::ccTouchBegan(CCTouch* touch,CCEvent* event) |
CCPoint
touchPoint = touch->getLocationInView(); |
touchPoint
= CCDirector:: sharedDirector()->convertToGL(touchPoint); |
if (ccpDistance(touchPoint,
centerPoint) > radius){ |
currentPoint
= touchPoint; |
centerPoint=currentPoint; |
jsSprite->setPosition(currentPoint); |
this ->getChildByTag(88)->setPosition(currentPoint); |
void HRocker::ccTouchMoved(CCTouch* touch,CCEvent* event) |
CCPoint
touchPoint = touch->getLocationInView(); |
touchPoint
= CCDirector:: sharedDirector()->convertToGL(touchPoint); |
if (ccpDistance(touchPoint,
centerPoint) > radius) |
currentPoint =ccpAdd(centerPoint,ccpMult(ccpNormalize(ccpSub(touchPoint,centerPoint)),radius)); |
currentPoint
= touchPoint; |
void HRocker::ccTouchEnded(CCTouch* touch,CCEvent* event) |
currentPoint
= centerPoint; |
HRocker*
HRocker::initWithCenter(CCPoint aPoint , float aRadius
,CCSprite* aJsSprite,CCSprite* aJsBg, bool _isFollowRole){ |
isFollowRole
=_isFollowRole; |
currentPoint
= centerPoint; |
jsSprite->setPosition(centerPoint); |
aJsBg->setPosition(centerPoint); |
this ->addChild(jsSprite); |
使用方法:
class WelcomeScene
: public cocos2d::CCLayer |
bool WelcomeScene::init() |
CCSprite
*spRocker= CCSprite::create( "control_joystick.png" ); |
CCSprite
*spRockerBG=CCSprite::create( "control_baseboard.png" ); |
HRocker
*rocker=HRocker::HRockerWithCenter(ccp(210.0f,130.0f),50.0f ,spRocker ,spRockerBG, false ); |
CCSprite
*spRocker2 = CCSprite::create( "control_joystick.png" ); |
CCSprite
*spRockerBG2 = CCSprite::create( "control_baseboard.png" ); |
HRocker*
rocker2=HRocker::HRockerWithCenter(ccp(210.0f,130.0f),50.0f ,spRocker2 ,spRockerBG2, true ); |
截图:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理