标签:cocos2dx
【唠叨】
如果手机设备没有手柄、键盘的话,就只能靠触摸屏幕来操作游戏了。
虚拟摇杆的作用就是在游戏中创建几个按键来模拟手柄,通过触控来实现上下左右的移动,以及攻击、跳跃、发大招等操作。
如下所示,有一个移动的虚拟摇杆,以及一个A键。

已有开源的SneakyInput虚拟摇杆,开源地址:https://github.com/Ntran013/SneakyInput
而这里博主则是将开源的SneakyInput进一步的修改,方便博主自身的使用。
【demo下载】
http://down.51cto.com/data/1871368
【虚拟摇杆】
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、代码举例
//
bool flag = false; //是否在执行按键动作
void Game::update(float dt) {
CCNode* sp = this->getChildByTag(1);
//移动
int movespeed = 2;
CCPoint dv = 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;
}
}
void Game::setFlag() { flag = false; }
//本文出自 “夏天的风” 博客,请务必保留此出处http://shahdza.blog.51cto.com/2410787/1549666
标签:cocos2dx
原文地址:http://shahdza.blog.51cto.com/2410787/1549666