【唠叨】

如果手机设备没有手柄、键盘的话,就只能靠触摸屏幕来操作游戏了。

虚拟摇杆的作用就是在游戏中创建几个按键来模拟手柄,通过触控来实现上下左右的移动,以及***、跳跃、发大招等操作。

如下所示,有一个移动的虚拟摇杆,以及一个A键。

已有开源的SneakyInput虚拟摇杆,开源地址:https://github.com/Ntran013/SneakyInput

而这里博主则是将开源的SneakyInput进一步的修改,方便博主自身的使用。


【demo下载】

https://github.com/shahdza/Cocos_LearningTest/tree/master/%E8%99%9A%E6%8B%9F%E6%91%87%E6%9D%86SneakyInput




【虚拟摇杆】


1、说明

SneakyInput是一个开源的项目,而我们只需要修改摇杆使用的图片、按钮图片,以及位置即可。

所以,只要修改Sneaky类中标注的 "//-- need modify start --" 部分,将虚拟摇杆的按钮图片改成你自己的图片即可。


2、使用方法

(1)将 Sneaky.h 头文件包含到你的Game.h类中

(2)在 Game.cpp 的初始化函数 init()里添加虚拟摇杆即可。

Sneaky* sneaky = new Sneaky();

this->addChild(sneaky,1,999);

(3)移动和按钮一般在游戏Game类的update()中进行。

(4)移动:

//获得方向向量,dv为标准化向量,即长度为1.

CCPoint dv = sneaky->joystick->getVelocity();

//人物移动

sp->setPosition( sp->getPosition() + dv );

(5)按钮:

//判断按钮A是否被按下

sneaky->buttonA->getIsActive()


3、代码举例

//boolflag=false;//是否在执行按键动作voidGame::update(floatdt){CCNode*sp=this->getChildByTag(1);//移动intmovespeed=2;CCPointdv=sneaky->joystick->getVelocity();sp->setPosition(sp->getPosition()+dv*movespeed);//按键if(sneaky->buttonA->getIsActive()&&!flag){CCJumpBy*jump=CCJumpBy::create(0.5f,ccp(0,0),100,1);//原地跳跃CCCallFunc*func=CCCallFunc::create(this,callfunc_selector(Game::setFlag));sp->runAction(CCSequence::create(jump,func,NULL));flag=true;}}voidGame::setFlag(){flag=false;}//