cocos2dx-3.10虚拟摇杆的实现

【iOS-cocos2d-X 游戏开发之十二】自定义Cocos2dx摇杆(增强Joystick),增加摇杆跟随用户触点作为摇杆坐标,让摇杆不再死板! 本站文章均为 李华明Himi 原创,转载务必在明显处注明:转载自【黑米GameDev街区】 原文链接: http://www.himigame.com/iphone-cocos2dx/721.html          ☞ 点击订阅 ☜ 本博客最新动态!及时将最新博文通知您!对于虚拟摇杆在游戏开发中必不可少,Android方面的是由Himi自己实现封装的,大家可以移步到这里查看详细实现机制:【An 阅读详情
本篇文章是在cocos2dx-2.x的基础上改编而来,基本没有什么大的改变,只是让技术小白少走一些弯路。好了。下面就直接上代码了。
首先把虚拟摇杆封装成一个类,就要建立一个.cpp文件和.文件,这个文件就命名为HRocker.h文件。

其中HRocker.h的文件如下:

#ifndef HRocker_H
#define HRocker_H
#include "cocos2d.h"

using namespace cocos2d;

class HRocker :public Layer {
public:
	//初始化 aPoint是摇杆中心 aRadius是摇杆半径 aJsSprite是摇杆控制点 aJsBg是摇杆背景
	static HRocker*  HRockerWithCenter(Vec2 point, float Radius, Sprite* aJsSprite, Sprite* aJsBg, bool _isFollowRole);
	//启动摇杆
	void Active();
	//解除摇杆
	void Inactive();
	Vec2 getDirection();

private:
	EventListenerTouchOneByOne* touchListener;
	HRocker * initWithCenter(Vec2 point, float aRadius, Sprite* aJsSprite, Sprite* aJsBg, bool _isFollowRole);
	Vec2 centerPoint;//摇杆中心
	Vec2 currentPoint;//摇杆当前位置
	bool active;//是否激活摇杆
	float radius;//摇杆半径
	Sprite *jsSprite;
	bool isFollowRole;//是否跟随用户点击
	float getVelocity();
	void  updatePos(float dt);
	virtual bool onTouchBegan(Touch *pTouch, Event *pEvent);
	virtual void onTouchMoved(Touch *pTouch, Event *pEvent);
	virtual void onTouchEnded(Touch *pTouch, Event *pEvent);

	CREATE_FUNC(HRocker);
};

#endif

其下是HRockre.cpp中的内容

#include "HRocker.h"

using namespace cocos2d;

//定义一个计时器,随时检测鼠标点击的位置
void HRocker::updatePos(float dt){
	jsSprite->setPosition(ccpAdd(jsSprite->getPosition(), ccpMult(ccpSub(currentPoint, jsSprite->getPosition()), 0.5)));
}
//启动摇杆
void HRocker::Active()
{
	if (!active) {
		active = true;
		schedule(schedule_selector(HRocker::updatePos));//添加刷新函数
		//CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, 0, false);
		touchListener = EventListenerTouchOneByOne::create();
		touchListener->setSwallowTouches(true);

		touchListener->onTouchBegan = CC_CALLBACK_2(HRocker::onTouchBegan, this);
		touchListener->onTouchMoved = CC_CALLBACK_2(HRocker::onTouchMoved, this);
		touchListener->onTouchEnded = CC_CALLBACK_2(HRocker::onTouchEnded, this);
		// 注册事件监听机制
		_eventDispatcher->addEventListenerWithSceneGraphPriority(touchListener, this);

	}
	else {
	}
}
//解除摇杆
void   HRocker::Inactive()
{
	if (active) {
		active = false;
		this->unschedule(schedule_selector(HRocker::updatePos));//删除刷新
		_eventDispatcher->removeEventListener(touchListener);//删除委托
	}
	else {
	}
}
//摇杆方位
Vec2 HRocker::getDirection()
{

	return ccpNormalize(ccpSub(centerPoint, currentPoint));
}
//摇杆力度
float HRocker::getVelocity()
{
	return ccpDistance(centerPoint, currentPoint);
}
HRocker* HRocker::HRockerWithCenter(Vec2 point, float aRadius, Sprite* aJsSprite, Sprite* aJsBg, bool _isFollowRole){
	HRocker *jstick = HRocker::create();
	jstick->initWithCenter(point, aRadius, aJsSprite, aJsBg, _isFollowRole);
	return jstick;
}
bool HRocker::onTouchBegan(Touch* touch, Event* event)
{
	if (!active)
		return false;
	this->setVisible(true);
	Vec2 touchPoint = touch->getLocationInView();
	touchPoint = Director::sharedDirector()->convertToGL(touchPoint);
	if (!isFollowRole){
		if (ccpDistance(touchPoint, centerPoint) > radius){
			return false;
		}
	}
	currentPoint = touchPoint;
	if (isFollowRole){
		centerPoint = currentPoint;
		jsSprite->setPosition(currentPoint);
		this->getChildByTag(88)->setPosition(currentPoint);
	}
	return true;
}
void  HRocker::onTouchMoved(Touch* touch, Event* event)
{
	Vec2 touchPoint = touch->getLocationInView();
	touchPoint = Director::sharedDirector()->convertToGL(touchPoint);
	if (ccpDistance(touchPoint, centerPoint) > radius)
	{
		currentPoint = ccpAdd(centerPoint, ccpMult(ccpNormalize(ccpSub(touchPoint, centerPoint)), radius));
	}
	else {
		currentPoint = touchPoint;
	}
}
void  HRocker::onTouchEnded(Touch* touch, Event* event)
{
	currentPoint = centerPoint;
	if (isFollowRole){
		this->setVisible(false);
	}
}
HRocker* HRocker::initWithCenter(Vec2 aPoint, float aRadius, Sprite* aJsSprite, Sprite* aJsBg, bool _isFollowRole){
	isFollowRole = _isFollowRole;
	active = false;
	radius = aRadius;
	if (!_isFollowRole){
		centerPoint = aPoint;
	}
	else{
		centerPoint = ccp(0, 0);
	}
	currentPoint = centerPoint;
	jsSprite = aJsSprite;
	jsSprite->setPosition(centerPoint);
	aJsBg->setPosition(centerPoint);
	aJsBg->setTag(88);
	this->addChild(aJsBg);
	this->addChild(jsSprite);
	if (isFollowRole){
		this->setVisible(false);
	}
	this->Active();//激活摇杆
	return this;
}

好了,到这里一个虚拟摇杆的的类就完成了,接下来就是虚拟摇杆的精灵了
其中要看你把这个摇杆精灵放在哪个。cpp的文件当中了,我这个只是测试的例子,所以就放在
helloword.cpp文件当中。在init函数当中添加如下的代码就可以运行了。
其中要加上#include "HRocker.h"这个有文件
Sprite *spRocker2 = Sprite::create("rockerBar.png");//摇杆
    Sprite *spRockerBG2 = Sprite::create("rocker.png");//摇杆背景
    HRocker* rocker2 = HRocker::HRockerWithCenter(Vec2(210.0f, 130.0f), 50.0f, spRocker2, spRockerBG2, true);//创建摇杆
    this->addChild(rocker2);//摇杆添加到layer中 
这就是我通过cocos2dx-2.x修改过来的了,









Cocos2dx 摇杆控件 利用cocos2dx引擎开发的摇杆控件,继承自CCSprite,完美兼容2.2.1 立即下载

相关推荐

cocos2dx3.0 虚拟摇杆 joystic

根据李华明的的cocos2dx 虚拟摇杆,改写成3.0版本,另有摇杆的使用方法 还有很多欠缺,希望哪位朋友看完之后能够给我宝贵的意见!

cocos2dx-3.4虚拟摇杆的实现

本文参考网址:http://blog.csdn.net/kuloveyouwei/article/details/9102623 本篇文章是在cocos2dx-2.x的基础上改编而来,基本没有什么大的改变,只是让技术小白少走一些弯路。好了。下面就直接上代码了。 首先把虚拟摇杆封装成一个类,就要建立一个.cpp文件和.文件,这个文件就命名为HRocker.h文件。 其中HRocker.h的

qq_34240791的博客 1689

cocos2dx 虚拟摇杆 lua实现

cocos2dx 虚拟摇杆的lua实现

[cocos2d-x教程之 Hero教你打灰机] 如何制作一个虚拟摇杆

一、 前言          很多大型游戏里 都采用了虚拟摇杆 ,即 手触摸 屏幕 才出现 摇杆,一方面 使 玩家更易操作, 另一方面则是使得 游戏的视觉变得更加酷炫 。这一篇教程就告诉大家如何 完成制作 一个 虚拟摇杆。 二、 图片准备          笔者 不太精通ps,也没有费时间去画图了。只用了两个简单的有填充色的 圆形作为 摇杆的组成部分。 小圆代表摇杆,大圆代表摇杆的底

ez_wzr的专栏 1108

Cocos2dx摇杆lua版

Cocos2dx游戏 虚拟摇杆 实现 lua版

opencv实践项目-图片拼接之缝合线算法

opencv 图片缝合线算法

wyw0000的博客 2624

cocos2d-x摇杆JoyStick

之前下载了老G前辈的一个项目实例,发现在项目中用到了虚拟摇杆,所以我就想把这个功能拿出来单独的讲一讲,只为学习交流,并无侵权之意。同时感谢老G前辈的分享。项目所用图片资源下载:http://download.csdn.net/detail/jukai7/5096755        解压我们下载的图片资源,有三个图片,其中飞机图片是被控制的对象,剩下的两个我们组合起来制作摇杆,想必这个摇杆最后的

路上的点滴 6070

基于STM32与毫米波雷达的非接触式睡眠监测系统

物联网和嵌入式系统技术正在推动医疗健康设备的智能化发展。通过传感器网络采集生理信号,结合信号处理算法实现健康监测已成为主流技术方案。毫米波雷达凭借其非接触检测特性,在呼吸、心率等生命体征监测中展现出独特优势。STM32系列MCU凭借丰富外设和低功耗特性,成为医疗级嵌入式设备的首选平台。本系统整合60GHz毫米波雷达、红外测温与无线传输模块,构建了完整的睡眠质量评估解决方案,其硬件架构设计、信号处理算法和低功耗优化策略对可穿戴医疗设备开发具有参考价值。

weixin_36369848的博客 612

cocos2dx 3.x虚拟摇杆及其应用

1、虚拟摇杆类(OperateLayer.h)#include "cocos2d.h" using namespace cocos2d;class OperateLayer : public cocos2d::Layer { public: OperateLayer(); ~OperateLayer(); virtual bool init(); CREATE_F

lin 1242

EtherCAT-1 技术概述

1.EtherCAT简介①开放的技术EtherCAT全称EtherNet Control Automation Technology,是由德国倍福(Beckhoff)公司提出的一种实时以太网技术。EtherCAT是一种开放但不开源的技术,意味着您可以任意使用这项技术,但若要进行相关设备的开发,则需要向倍福公司获取相关授权。②快速性相比传统现场总线,EtherCAT的数据传输速率有了极大的提升,可选10Mbit/s或100Mbit/s,甚至依托补充

tianya_xuan的博客 3543

SAP MTO模式实战:从库存管理到成本核算的深度解析

本文深入解析SAP MTO(Make-to-Order)模式在制造业中的应用,从库存管理到成本核算的全流程实战技巧。通过对比MTS模式,详细阐述MTO的核心逻辑、库存管理配置、成本核算路径及与PP模块的集成要点,帮助企业实现按单生产的高效管理,优化库存水平和资金占用。

weixin_29204205的博客 709

cocos2dx之虚拟摇杆

刚刚弄的,直接上代码: // // Rocker.h // Rocker // // Created by zp on 16/4/7. // // #ifndef __Rocker__Rocker__ #define __Rocker__Rocker__ /* void onRockBegan(float,float,bool); void onRockMoved(float,fl

TTUZ的博客 795

基于FastLIO2与TEB算法的机器狗自主导航系统实战

本文详细介绍了如何为机器狗构建一套基于FastLIO2与TEB算法的自主导航系统。通过整合FastLIO2激光惯性里程计实现精准定位,并采用TEB局部规划器进行灵活路径规划与动态避障,解决了传统方案在复杂地形下反应慢、易碰撞的问题。文章提供了从环境搭建、算法部署、地图转换到系统调试的完整实战指南,帮助开发者实现机器狗的稳健自主行走。

beer8的博客 320

【cocos2dx 3.3 lua】07 模拟摇杆

实现了一个模拟摇杆 --[[ 虚拟摇杆类 Layer 几种组合方式: 1.固定位置 不自动隐藏 2.固定位置 自动隐藏 3.非固定位置 自动隐藏 Init 初始化 Release 释放 SetEnable 启用 IsEnable 是否启用 --]] local NavigationLayer = class("NavigationLayer",function() ret

胡老哈的学习记录 1883

ADS基础教程24 - Gerber文件的导入

一、引言二、基本概念1.仿真文件下载2.仿真文件介绍二、导入步骤1.新建workspace2.选择Layout结构3.导入设计4.选择文件类型5.导入文件6.预览文件内容7.铜皮离散问题四、总结选择。通过本文章结束,可以了解ADS中如何将导入Gerber文件,并且对导入的铜皮进行合并。下一步就针对导入的文件进行层叠设置和编辑。END!}}END!

XZ_ZC的博客 3053

beegfs源码分析

BeeGFS的客户端是由一个内核模块和两个系统服务组成的,这里咱们主要分析内核模块。由于BeeGFS的目录树解析,是在父目录DEntry里找子目录或文件DEntry,逐级迭代完成的,所以在Mount文件系统时,须要从管理节点获取根元数据节点的ID,而后再向根元数据节点查询根目录的DEntry的信息,为后续的目录解析打下基础。获取类似/data/beeond/data/dentries/38/51/root/#fSiDs#/文件fileId的父路径。1.1 FileID的生成。Session网络消息。

wfzy的博客 1913

关于cocos2dx虚拟摇杆的lua实现

看到网上不少虚拟摇杆的代码,但是都是在c++里面实现,非常不方便,所以我自己把c++的代码移植到lua里面 local VitrualController = class("VitrualController", cc.Layer) function VitrualController:ctor(app, name) if self.onCreate then self:on

xlbboy的博客 1765

全能媒体工具深度测评(下篇一):AI图文生成+全能解压+图片去文字,一键搞定素材精修

解压50多种格式,文生图,图生图

cs821984831的博客 40

自定义Cocos2dx摇杆(增强Joystick),增加摇杆跟随用户触点作为摇杆坐标,让摇杆不再死板!

对于虚拟摇杆在游戏开发中必不可少,Android方面的是由Himi自己实现封装的,大家可以移步到这里查看详细实现机制: 【Android游戏开发二十四】360°平滑游戏摇杆(触屏方向导航)  那么在Cocos2d引擎已提供此摇杆类(Joystick),所以Himi也就懒得重写了,但是Cocos2dx中并没有封装,那么这里Himi给出Cocos2dx版的Joystick(HRocker类

fybing1986的专栏 570

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Cocos2d-x3.2实现虚拟摇杆多点触摸

本文重点不是虚拟摇杆,而是多点触摸, 一个Layer控制

Cocos2d-x,Android,IOS,游戏,HTML5开发/交流/学习/资源 沈大海 3900

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

cocos2dx番外篇——虚拟摇杆

【唠叨】如果手机设备没有手柄、键盘的话,就只能靠触摸屏幕来操作游戏了。虚拟摇杆的作用就是在游戏中创建几个按键来模拟手柄,通过触控来实现上下左右的移动,以及***、跳跃、发大招等操作。如下所示,有一个移动的虚拟摇杆,以及一个A键。 已有开源的SneakyInput虚拟摇杆,开源地址:https://github.com/Ntran013/S...

weixin_34233856的博客 203

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

【iOS-cocos2d-X 游戏开发之十二】自定义Cocos2dx摇杆(增强Joystick),增加摇杆跟随

对于虚拟摇杆在游戏开发中必不可少,Android方面的是由Himi自己实现封装的,大家可以移步到这里查看详细实现机制: 【Android游戏开发二十四】360°平滑游戏摇杆(触屏方向导航) 那么在Cocos2d引擎已提供此摇杆类(Joystick),所以Himi也就懒得重写了,但是Cocos2dx中并没有封装,那么这里Himi给出Cocos2dx版的...

weixin_34345560的博客 135

Cocos2d-x虚拟摇杆控制精灵上下左右运动----之游戏开发《赵云要格斗》(1) cocos2dx 3.3移植版

第0章,环境的搭建:: cocos2d-x版本:3.3 工程环境:ubuntu14.04+QTCreator3.3.0 一 创建工程 cocos new ZhaoYun -p com.ARPG.ZhaoYun -l cpp -d ~/ARPG 二 编译并运行。 命令行下: cocos run -s ~/ARPG/ZhaoYun/ -p linux 用QTCreator

剑有偏锋的窝 3536

【IOS-COCOS2D-X 游戏开发之十二】自定义COCOS2DX摇杆(增强JOYSTICK),增加摇杆跟随用户触点作为摇杆坐标,让摇杆不再死板!...

本站文章均为李华明Himi原创,转载务必在明显处注明: 转载自【黑米GameDev街区】 原文链接:http://www.himigame.com/iphone-cocos2dx/721.html 对于虚拟摇杆在游戏开发中必不可少,Android方面的是由Himi自己实现封装的,大家可以移步到这里查看详细实现机制: 【Android游戏开发二十...

weixin_34375054的博客 100
上一篇: 如何实现字幕效果,cocos2dx ,Lua
下一篇: cocos2dx的一些效果
翊飞
博客等级 码龄16年 18粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值