0

0

cocos2d-x网络编程 连接php服务器笔记3

php中文网

php中文网

发布时间:2016-06-23 13:33:34

|

917人浏览过

|

来源于php中文网

原创

上节服务器部分已经开发完,本节开始客户端部分开发,首先是ui制作。

UI制作

既然是登录验证那当然要有登录界面,UI起码也要像个游戏样子吧这里我不想用基本控件,就用cocostudio制作一个吧,cocostudio里有一个标准的登录界面如下:


立即学习PHP免费学习笔记(深入)”;

为了图省事我用最新版的Cocos制作的(v2.2.8)当然你直接用cocostudio1.6导出json文件也可以,但是没有这样方便。如果你第一次使用,想用它来建立VS2012的 C++工程需要先在商店里下载一个Cocos Framework v3.6. 我们启动cocos->新建项目LoginDemo,在模板里选择登陆示例,它就自动打开cocostudio显示出这个界面了。在cocostudio我们要把一些重要控件命个命字,好在程序里使用,如用户名输入框改成txtUser,如下图:


立即学习PHP免费学习笔记(深入)”;

其他的重要控件还有密码输入框命名为txtPass, 登录Login按钮改名为btnLogin, 登出按钮LoginOut没什么用不管,我们再加个注册按钮btnRegister,再加个显示登录成功与否的结果标签txtResult 类型为Text, 这一切作好后就可以发布资源了,选择“项目”->“发布与打包” 发布类型为“Visual Studio工程”如下图:


立即学习PHP免费学习笔记(深入)”;

旁边的设置按钮点进去设置数据格式为 csb格式,发布内容为发布资源与项目文件,如下图:


立即学习PHP免费学习笔记(深入)”;

好了点击确定发布吧,这样UI制作就算完成了,我们就到之前项目创建的路径可以打开VS工程,进行编码吧!

VS工程部分--单机实验

首先我们不要急着想如何联网,因为网络一向是个易出错的玩艺,为了不打击我们的自信心还是先把单机部分跑起来吧,说白了就是能把登录界面显示出来,但Cocos+VS已经帮我们完成了我们可以一句代码不用写,自动生成的代码如下:

bool HelloWorld::init(){    //////////////////////////////    // 1. super init first    if ( !Layer::init() )    {        return false;    }        auto rootNode = CSLoader::createNode("MainScene.csb");    addChild(rootNode);	    return true;}
直接编译运行就可以看到界面了,从代码看加载UI部分确实比以前cocos2d-x 3.1版简单好多。我们导出资源时导出了两个csb一个是MainScene.csb另一个是登录主体Login.csb,加载那个Login.csb是不是也行呢没试过。但这样当然是不行的,我们要取出用户名和密码输入框的内容,还要得到那几个Button控件,我们就在HelloWorldScene.h里声明这几个成员变量吧:

private:	cocos2d::ui::TextField* txtUser;  //用户名输入框	cocos2d::ui::TextField* txtPass;  //密码	cocos2d::ui::Text* lblResult;  //结果标签	cocos2d::ui::Button* btnRegister; //注册按钮	cocos2d::ui::Button* btnLogin;	  //登录按钮	void onBtnLoginClicked(cocos2d::Ref *pSender, cocos2d::ui::Widget::TouchEventType type); //登录点击	void onBtnRegClicked(cocos2d::Ref *pSender, cocos2d::ui::Widget::TouchEventType type); //注册点击
然后我们想办法取出csb里的控件,有两种方式一是根据tag取,一个是根据name取,官方给出了标准实现方法,如下:

1.以递归方式根据tag取出我们想要的控件:

Node* HelloWorld::seekNodeByTag(Node* root, int tag){	if (!root)	{		return nullptr;	}	if (root->getTag()==tag)	{		return root;	}	//获取root下所有的孩子	const auto& arrayRootChildren = root->getChildren();	ssize_t length = arrayRootChildren.size();	for (ssize_t i=0; i(arrayRootChildren.at(i));		if (child)		{			Node* res = seekNodeByTag(child, tag); //在child下递归查找tag结点			if (res!=nullptr)			{				return res;  //找到了			}					}			}	return nullptr;}
2.以名字name取出控件

//递归寻找在root根下以Name标记的结点Node* HelloWorld::seekNodeByName(cocos2d::Node* root, const std::string& name){	if (!root)	{		return nullptr;	}	if (root->getName() == name)	{		return root;	}	//获取root下所有的孩子	const auto& arrayRootChildren = root->getChildren();	for (auto& subWidget : arrayRootChildren)	{		//取出root下的一个孩子结点		Node* child = dynamic_cast(subWidget);		if (child)		{			Node* res = seekNodeByName(child, name); //在child下递归寻找name名字结点			if (res != nullptr)			{				return res;   //找到了,就返回它			}		}	}	return nullptr;}
好了有了工具函数了我们就可以取出控件了,在上面 bool HelloWorld::init()方法中在addChild(rootNode);下面加上下面代码:

txtUser = dynamic_cast(this->seekNodeByName(rootNode, "txtUser"));	txtPass = dynamic_cast(this->seekNodeByName(rootNode, "txtPass"));	lblResult = dynamic_cast(this->seekNodeByName(rootNode, "txtResult"));	btnLogin = dynamic_cast(this->seekNodeByName(rootNode, "btnLogin"));;	btnRegister = dynamic_cast(this->seekNodeByName(rootNode, "btnRegister"));	lblResult->setString("");	btnLogin->addTouchEventListener(CC_CALLBACK_2(HelloWorld::onBtnLoginClicked, this)); //登录按钮关联单击事件	btnRegister->addTouchEventListener(CC_CALLBACK_2(HelloWorld::onBtnRegClicked, this)); //注册按钮关联单击事件
OK这样就把控件取出了!

为了实验下是不是我们真的取出控件了写下列实验代码,在登录按钮响应事件里这样写:

void HelloWorld::onBtnLoginClicked(cocos2d::Ref *pSender, cocos2d::ui::Widget::TouchEventType type){	switch (type)	{	case cocos2d::ui::Widget::TouchEventType::BEGAN:		break;	case cocos2d::ui::Widget::TouchEventType::MOVED:		break;	case cocos2d::ui::Widget::TouchEventType::ENDED:	{		if(txtUser->getString()=="")  //用户名为空提示		{			lblResult->setString("User is empty");			break;		}		if (txtPass->getString()=="") //密码框为空提示		{			lblResult->setString("Pass is empty");			break;		}					lblResult->setString("click login btn"); //提示用户点击了登录			}		break;	case cocos2d::ui::Widget::TouchEventType::CANCELED:		break;	default:		break;	}}
写了switch一大堆但这些分支都是必要的,你要是不这样写会出现按钮按下执行点击代码,松开按钮又执行了一遍点击代码这些我们不希望看到的结果,好了编译运行点击下登录,那个红色的Result标签会提示我们"Click login btn" ,这样单机部分实验成功!





热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
微信文件过期恢复教程
微信文件过期恢复教程

本专题整合了微信文件过期恢复方法、技巧教程,阅读专题下面的文章了解更多详细内容。

0

2026.02.04

抖音网页版入口与视频观看指南 抖音官网视频在线访问
抖音网页版入口与视频观看指南 抖音官网视频在线访问

本专题汇总了抖音网页版的入口链接、官方登录页面以及视频观看入口,帮助用户快速访问抖音网页版,提供免登录访问方式和直接进入视频播放页面的方法,确保顺利浏览和观看抖音视频。

63

2026.02.04

学习通网页版入口与在线学习指南 学习通官网登录与使用方法
学习通网页版入口与在线学习指南 学习通官网登录与使用方法

本专题详细汇总了学习通网页版入口与登录方法,提供学习通官方网页端入口、学生登录平台、网页版使用指南等内容,帮助用户快速稳定地登录学习通官网,顺利进入学习平台,提升学习效率和体验。

9

2026.02.04

Python Web 框架 Django 深度开发
Python Web 框架 Django 深度开发

本专题系统讲解 Python Django 框架的核心功能与进阶开发技巧,包括 Django 项目结构、数据库模型与迁移、视图与模板渲染、表单与认证管理、RESTful API 开发、Django 中间件与缓存优化、部署与性能调优。通过实战案例,帮助学习者掌握 使用 Django 快速构建功能全面的 Web 应用与全栈开发能力。

9

2026.02.04

Java 流式处理与 Apache Kafka 实战
Java 流式处理与 Apache Kafka 实战

本专题专注讲解 Java 在流式数据处理与消息队列系统中的应用,系统讲解 Apache Kafka 的基础概念、生产者与消费者模型、Kafka Streams 与 KSQL 流式处理框架、实时数据分析与监控,结合实际业务场景,帮助开发者构建 高吞吐量、低延迟的实时数据流管道,实现高效的数据流转与处理。

3

2026.02.04

Golang 容器化与 Docker 实战
Golang 容器化与 Docker 实战

本专题深入讲解 Golang 应用的容器化与 Docker 部署,涵盖 Docker 基础概念、容器构建与镜像管理、Go 应用的 Dockerfile 编写、跨平台容器部署与优化、Docker Compose 和 Kubernetes 部署工具。通过实际案例,帮助学习者掌握 如何将 Golang 应用容器化并实现高效部署与管理,提升系统的可扩展性与运维效率。

3

2026.02.04

全国统一发票查询平台入口合集
全国统一发票查询平台入口合集

本专题整合了全国统一发票查询入口地址合集,阅读专题下面的文章了解更多详细入口。

59

2026.02.03

短剧入口地址汇总
短剧入口地址汇总

本专题整合了短剧app推荐平台,阅读专题下面的文章了解更多详细入口。

110

2026.02.03

植物大战僵尸版本入口地址汇总
植物大战僵尸版本入口地址汇总

本专题整合了植物大战僵尸版本入口地址汇总,前往文章中寻找想要的答案。

56

2026.02.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号