#include "HRocker.h"
const double PI=3.1415;
HRocker::HRocker(void)
{
rocketRun=false;
}
HRocker::~HRocker(void)
{
}
//创建摇杆(摇杆的操作题图片资源名,摇杆背景图片资源名,起始坐标)
HRocker* HRocker::createHRocker(const char *rockerImageName,const char *rockerBGImageName,CCPoint position)
{
HRocker *layer = HRocker::create();
if (layer)
{
layer->rockerInit(rockerImageName,rockerBGImageName,position);
return layer;
}
CC_SAFE_DELETE(layer);
return NULL;
}
//自定义初始化函数
void HRocker::rockerInit(const char* rockerImageName,const char* rockerBGImageName,CCPoint position)
{
CCSprite *spRockerBG = CCSprite::create(rockerBGImageName);
spRockerBG->setPosition(position);
spRockerBG->setVisible(false);
addChild(spRockerBG,0,tag_rockerBG);
CCSprite *spRocker = CCSprite::create(rockerImageName);
spRocker->setPosition(position);
spRocker->setVisible(false);
addChild(spRocker,1,tag_rocker);
rockerBGPosition = position;
rockerBGR = spRockerBG->getContentSize().width*0.5;//
rocketDirection=-1;//表示摇杆方向不变
}
//启动摇杆(显示摇杆、监听摇杆触屏事件)
void HRocker::startRocker(bool _isStopOther)
{
CCSprite *rocker = (CCSprite*)this->getChildByTag(tag_rocker);
rocker->setVisible(true);
CCSprite *rockerBG = (CCSprite *)this->getChildByTag(tag_rockerBG);
rockerBG->setVisible(true);
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this,-1,_isStopOther);
}
//停止摇杆(隐藏摇杆,取消摇杆的触屏监听)
void HRocker::stopRocker()
{
CCSprite *rocker = (CCSprite *)this->getChildByTag(tag_rocker);
rocker->setVisible(false);
CCSprite * rockerBG = (CCSprite *)this->getChildByTag(tag_rockerBG);
rockerBG->setVisible(false);
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
}
//获取当前摇杆与用户触屏点的角度
float HRocker::getRad(CCPoint pos1,CCPoint pos2)
{
float px1 = pos1.x;
float py1 = pos1.y;
float px2 = pos2.x;
float py2 = pos2.y;
//得到两点x的距离
float x = px2 - px1;
//得到两点y的距离
float y = py1 - py2;
//算出斜边长度
float xie = sqrt(pow(x,2) + pow(y,2));
//得到这个角度的余弦值(通过三角函数中的店里:角度余弦值=斜边/斜边)
float cosAngle = x / xie;
//通过反余弦定理获取到期角度的弧度
float rad = acos(cosAngle);
//注意:当触屏的位置Y坐标<摇杆的Y坐标,我们要去反值-0~-180
if (py2 < py1)
{
rad = -rad;
}
return rad;
}
CCPoint getAngelePosition(float r,float angle){
return ccp(r*cos(angle),r*sin(angle));
}
//抬起事件
bool HRocker::ccTouchBegan(CCTouch *pTouch, CCEvent *pEvent)
{
CCPoint point = pTouch->getLocation();
CCSprite *rocker = (CCSprite *)this->getChildByTag(tag_rocker);
if (rocker->boundingBox().containsPoint(point))
isCanMove = true;
return true;
}
//移动事件
void HRocker::ccTouchMoved(CCTouch *pTouch, CCEvent *pEvent)
{
if (!isCanMove)
{
return;
}
CCPoint point = pTouch->getLocation();
CCSprite *rocker = (CCSprite *)this->getChildByTag(tag_rocker);
//得到摇杆与触屏点所形成的角度
float angle = getRad(rockerBGPosition,point);
//判断两个圆的圆心距是否大于摇杆背景的半径
if (sqrt(pow((rockerBGPosition.x - point.x),2) + pow((rockerBGPosition.y - point.y),2)) >= rockerBGR)
{
//保证内部小圆运动的长度限制
rocker->setPosition(ccpAdd(getAngelePosition(rockerBGR,angle),ccp(rockerBGPosition.x,rockerBGPosition.y)));
}
else
rocker->setPosition(point);
//判断方向
if(angle>=-PI/4&&angle<PI/4)
{
rocketDirection=rocker_right;
rocketRun=false;
}
else if(angle>=PI/4&&angle<3*PI/4)
{
rocketDirection=rocker_up;
}
else if((angle>=3*PI/4&&angle<=PI)||(angle>=-PI&&angle<-3*PI/4))
{
rocketDirection=rocker_left;
rocketRun=true;
}
else if(angle>=-3*PI/4&&angle<-PI/4)
{
rocketDirection=rocker_down;
}
}
//离开事件
void HRocker::ccTouchEnded(CCTouch *pTouch, CCEvent *pEvent)
{
if (!isCanMove)
{
return;
}
CCSprite *rockerBG = (CCSprite*)this->getChildByTag(tag_rockerBG);
CCSprite *rocker = (CCSprite*)this->getChildByTag(tag_rocker);
rocker->stopAllActions();
rocker->runAction(CCMoveTo::create(0.08f,rockerBG->getPosition()));
isCanMove = false;
rocketDirection=rocker_stay;
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
这里实现了能通过虚拟摇杆控制精灵的运动,而且能够改变精灵运动时的脸部朝向。之前看了好多人写虚拟摇杆,但是就是没写控制精灵的运动和脸朝向的。 为Cocos2d-x虚拟摇杆控制精灵上下左右运动----之游戏开发《赵云要格斗》(1)的源代码,有不懂的地方请看文章地址 http://blog.csdn.net/evankaka/article/details/42043509
资源推荐
资源详情
资源评论
收起资源包目录
Cocos2d-x 虚拟摇杆控制精灵上下左右运动--《赵云要格斗》 (118个子文件)
ResolveAssemblyReference.cache 1KB
HRocker.cpp 4KB
HelloWorldScene.cpp 2KB
Hero.cpp 2KB
AppDelegate.cpp 1KB
main.cpp 591B
libExtensions.dll 3.05MB
libcocos2d.dll 2.44MB
libcurl.dll 1.13MB
iconv.dll 868KB
libCocosDenshion.dll 613KB
sqlite3.dll 527KB
libtiff.dll 513KB
glew32.dll 324KB
pthreadVCE2.dll 76KB
zlib1.dll 76KB
websockets.dll 76KB
HelloCpp.exe 72KB
libcocos2d.exp 1.01MB
libExtensions.exp 1023KB
libCocosDenshion.exp 348KB
HelloCpp.vcxproj.filters 1KB
AppMacros.h 3KB
HRocker.h 1KB
AppDelegate.h 955B
Hero.h 716B
HelloWorldScene.h 422B
main.h 267B
vc100.idb 2.14MB
libExtensions.ilk 8.72MB
HelloCpp.ilk 869KB
background_1.jpg 277KB
HelloCpp.lastbuildstate 86B
libBox2D.lib 2.3MB
libcocos2d.lib 1.65MB
libExtensions.lib 1.64MB
libchipmunk.lib 1.09MB
libCocosDenshion.lib 560KB
libwebp.lib 533KB
glew32.lib 500KB
libpng.lib 321KB
libjpeg.lib 263KB
sqlite3.lib 48KB
libtiff.lib 35KB
pthreadVCE2.lib 29KB
websockets.lib 17KB
libcurl_imp.lib 13KB
libzlib.lib 13KB
libiconv.lib 3KB
HelloCpp.log 7KB
HelloCpp.exe.embed.manifest 406B
HelloCpp.exe.intermediate.manifest 381B
HelloWorldScene.obj 195KB
Hero.obj 180KB
AppDelegate.obj 171KB
HRocker.obj 131KB
main.obj 77KB
libExtensions.pdb 12.54MB
libcocos2d.pdb 8.85MB
libCocosDenshion.pdb 3.1MB
HelloCpp.pdb 1.98MB
vc100.pdb 1.42MB
run_animation.plist 4KB
attack1_animation.plist 3KB
12.png 1.37MB
HelloWorld.png 136KB
attack1_animation.png 20KB
Direction_bc.png 18KB
run_animation.png 18KB
CloseNormal.png 6KB
CloseSelected.png 5KB
attack_6.png 5KB
attack_2.png 5KB
attack_8.png 4KB
attack_4.png 4KB
attack_5.png 4KB
attack_3.png 4KB
attack_7.png 4KB
attack_1.png 4KB
zhoayun.png 4KB
run_1.png 4KB
run_5.png 3KB
run_8.png 3KB
run_4.png 3KB
run_2.png 3KB
run_3.png 3KB
run_6.png 3KB
run_7.png 3KB
bt.png 3KB
Direction_bt.png 2KB
HelloCpp_manifest.rc 218B
HelloCpp.exe.embed.manifest.res 472B
HelloCpp.sdf 49.96MB
HelloCpp.sln 4KB
HelloCpp.suo 13KB
CL.read.1.tlog 260KB
cl.command.1.tlog 14KB
link.read.1.tlog 7KB
link.command.1.tlog 5KB
CL.write.1.tlog 3KB
共 118 条
- 1
- 2
Evankaka
- 粉丝: 7756
- 资源: 129
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 动手学深度学习,沐神版配套代码,所有代码均可在jupyter中运行,内附有极为详尽的代码注释
- qaxbrowser-1.1.32574.52.exe (奇安信浏览器windows安装包)
- C#编写modbus tcp客户端读取modbus tcp服务器数据
- 某房地产瑞六补环境部分代码
- 基于Matlab实现无刷直流电机仿真(模型+说明文档).rar
- AllSort(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序)
- 模拟qsort,改造冒泡排序使其能排序任意数据类型,即日常练习
- carsim+simulink联合仿真实现变道 包含路径规划算法+mpc轨迹跟踪算法 可选simulink版本和c++版本算法 可以适用于弯道道路,弯道车道保持,弯道变道 carsim内规划轨迹可视化
- 数组经典习题之顺序排序和二分查找和冒泡排序
- 永磁同步电机神经网络自抗扰控制,附带编程涉及到的公式文档,方便理解,模型顺利运行,效果好,位置电流双闭环采用二阶自抗扰控制,永磁同步电机三闭环控制,神经网络控制,自抗扰中状态扩张观测器与神经网络结合
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页