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; }
//
时间: 2024-12-11 18:48:48

cocos2dx小知识——虚拟摇杆的相关文章

cocos2dx小知识——Android虚拟机调试问题

1.提出问题 遇到过这样的一个问题:我将cocos2dx程序移植到Android项目中去后,想通过Android虚拟机来进行调,但是运行虚拟机后,出现如下错误: Unfortunately, MyTest has stopped. 这是因为:cocos2dx需要OpenGL进行渲染,而Android虚拟机没有这个东西,所以需要启用硬件的渲染器进行渲染,即GPU. 在老版本的Android SDK中,使用AVD创建虚拟机,是有勾选"Use Host GPU"这个选项的. 也就是使用主机的

cocos2dx小知识——两个头文件相互包含问题

[问题] Game.h包含了Ship.h,并且Ship.h也包含了Game.h. 然后在Game.h中声明了一个成员变量为Ship类:Ship* ship; 会出现找不到Ship类的错误. [解决] 在Game.h头文件中对Ship类进行声明即可:class Ship; [扩展] 如果在Game.cpp和Ship.cpp中相互包含Game.h与Ship.h. 是不会有影响的.

cocos2dx小知识——暂停界面的实现

游戏需要暂停时,一般都是将游戏界面变灰,暂停所有动作,然后弹出一堆的按钮. 这该如何实现暂停界面呢? 1.定义 我定义了两个类:Game游戏类.GamePause暂停类. Game类中调用doPause()函数进行游戏暂停,却换到GamePause暂停画面. 2.doPause() 这里需要用到CCRenderTexture这个动态纹理类,顾名思义就是可以动态创建纹理图片. 在doPause类中使用该类,将游戏界面截个图. // //创建CCRenderTexture,纹理画布大小为窗口大小(4

cocos2dx小知识——schedule/update不起作用

在开发的过程中,我自己写了一个英雄类Hero,继承自节点类CCNode.可是在构造函数中开启更新函数schedule/update不起作用了. 后来百度了一番,解决了. 主要原因:更新函数的触发事件需要通过父类进行初始化. 解决方法:调用父类的onEnter()函数. 我这里的父类为CCNode,所以只要在构造函数Hero()中最开始的部分加上如下代码即可. // Hero::Hero() { //初始化父类onEnter CCNode::onEnter(); //相关代码... //开启更新

cocos2dx小知识——更换精灵图片

更换精灵CCSprite的图片有两种方式. 1.直接通过图片更换 使用setTexture(CCTexture2D*)函数,可以重新设置精灵类的纹理图片. // CCTexture2D* texture = CCTextureCache::sharedTextureCache()->addImage("bg2.png"); bg->setTexture(texture); // 2.通过缓存帧替换 使用setDisplayFrame(CCSpriteFrame*)函数,利用

Cocos2d-x《赵云要格斗》--虚拟摇杆控制精灵上下左右运动

本文将要实现一个横版格斗类游戏,并实现摇杆控制英雄上下左右运动.这里实现了能通过虚拟摇杆控制精灵的运动,而且能够改变精灵运动时的脸部朝向.之前看了好多人写虚拟摇杆,但是就是没写控制精灵的运动和脸朝向的.所以自己就想要写个文章好好讲下它的实现思路.好了,下面我们开始吧. 最终效果: cocos2d-x版本:2.2.5 工程环境:windows7+VS2010 打开方式:将工程放在cocos2d-x安装目录下的project文件夹下用VS打开 目录: 一.修改背景图片和窗口大小 二.添加虚拟摇杆 三

Cocos2d-x虚拟摇杆控制精灵上下左右运动----之游戏开发《赵云要格斗》

这是自己开发的第一次小游戏,有需要源代码和材料的邮箱留个,这里实现了能通过虚拟摇杆控制精灵的运动,而且能够改变精灵运动时的脸部朝向.之前看了好多人写虚拟摇杆,但是就是没写控制精灵的运动和脸朝向的.所以自己就想要写个文章好好讲下它的实现思路.好了,下面我们开始吧. 目录: 一.修改背景图片和窗口大小 二.添加虚拟摇杆 三.添加精灵并用摇杆控制精灵的运动 四.思路总结 一.修改背景图片和窗口大小 新建一个工程,工程名为HelloCpp.为了让效果更加好些,首先修改下窗口的大小,在main.cpp中改

Cocos2dx 小技巧(十三)聊聊坐标系

一好友考上了空姐,她说:以后基本上不会回来了,等下次见面时请叫我白富美!虽然有点羡慕,但我依旧不甘示弱回复:下次见面时请叫我高富帅!未来,谁说得准呢? ------------------有段时间没用到onTouchBegan,近来写代码时发现对convertToGL(),getLocation()这些接口都有点陌生了,所以趁这次机会就写个总结到博客里,下次忘了就来博客里看看,当笔记用咯. 首先脑补下基础知识吧:1.OpenGL坐标系:该坐标系原点在屏幕左下角,x轴向右,y轴向上.这也就是coc

Linux 小知识翻译 - 「/proc 文件夹」

这次聊聊 「/proc 文件夹」. /proc 文件夹用来保管系统状态相关的文件的特殊文件夹,这个文件夹中有的文件只是内存上的虚拟文件. /proc 文件夹下有些文件可以反映各个进程的运行状态.所以说是决定Linux运行的非常重要的文件夹. 通过这个文件夹下文件,可以获取各式各样的信息.比如,请在命令行下输入「cat /proc/cpuinfo」试试看.可以获得CPU的信息. 其它还可以获得内存信息,驱动信息,以及其它软硬件方面的各种信息. 因此,修改 /proc 文件夹下的文件,可以调整系统的