cocos2d-x ネットワーク プログラミング PHP サーバーに接続するメモ 3

WBOY
リリース: 2016-06-23 13:33:34
オリジナル
800 人が閲覧しました

前のセクションのサーバー部分の開発が完了しました。このセクションでは、UI の作成から始まるクライアント部分の開発を開始します。

UI制作

ログイン認証なのでログインインターフェースは当然必要で、UIは最低限ゲームっぽいものにする必要があるので、ここでは基本的な操作を使いたくないので、cocostudioを使って作ります。 cocostudio には次のような標準ログイン インターフェイスがあります:


手間を省くために、Cocostudio の最新バージョン (v2.2.8) を使用しました。 もちろん、cocostudio1.6 を使用して json ファイルを直接エクスポートすることもできます。 , しかし、それほど便利ではありません。初めて使用し、VS2012 用の C++ プロジェクトを構築するために使用したい場合は、まずストアで Cocos Framework v3.6 をダウンロードする必要があります。cocos->新しいプロジェクト LoginDemo を開始し、ログイン サンプルを選択します。テンプレートに追加すると、自動的に開き、Cocostudio によってこのインターフェイスが表示されます。 cocostudio では、プログラムで使用できるように、いくつかの重要なコントロールに名前を付ける必要があります。たとえば、以下に示すように、ユーザー名入力ボックスは txtUser に変更されます。


他の重要なコントロールには、という名前のパスワード入力ボックスが含まれます。 txtPass、ログイン ログイン ボタンは btnLogin という名前に変更され、LoginOut ボタンは役に立ちません。登録ボタン btnRegister と、ログインが成功したかどうかを示す結果ラベル txtResult を追加します。結局のところ、これは Text です。 [プロジェクト] -> [発行とパッケージ化] を選択します。以下に示すように、発行タイプは [Visual Studio プロジェクト] です:


その横にある設定ボタンをクリックし、データ形式を次のように設定します。 csb 形式。公開コンテンツは次のようにリソースとプロジェクト ファイルを公開します。図:


[OK] をクリックして公開します。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 よりもはるかにシンプルになっています。リソースをエクスポートするときに、2 つの CBSB をエクスポートしました。1 つは MainScene.csb、もう 1 つはログイン サブジェクト Login.csb です。まだ試していませんが、その Login.csb を読み込むことはできますか?しかし、もちろんこれは機能しません。ユーザー名とパスワードの入力ボックスの内容を取り出し、それらの Button コントロールも取得する必要があります。これらのメンバー変数を HelloWorldScene.h で宣言しましょう。その後、方法を見つけます。 CSB でコントロールを取得するには 2 つの方法があり、1 つはタグに基づいて取得する方法、もう 1 つは名前に基づいて取得する方法です。タグに基づいて必要なコントロール:

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); //注册点击
ログイン後にコピー
2 名前でコントロールを取り出します

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<length; i++)	{		//取出root下的一个孩子结点		Node* child = dynamic_cast<Node*>(arrayRootChildren.at(i));		if (child)		{			Node* res = seekNodeByTag(child, tag); //在child下递归查找tag结点			if (res!=nullptr)			{				return res;  //找到了			}					}			}	return nullptr;}
ログイン後にコピー
OK これでツール関数が完成したので、上記の bool HelloWorld::init() メソッドにコントロールを取り出します。以下のコード addChild(rootNode);:

//递归寻找在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<Node*>(subWidget);		if (child)		{			Node* res = seekNodeByName(child, name); //在child下递归寻找name名字结点			if (res != nullptr)			{				return res;   //找到了,就返回它			}		}	}	return nullptr;}
ログイン後にコピー
OK このようにコントロールを取り出すだけです。

本当にコントロールを取り出すかどうかをテストするには、ログイン ボタンの応答イベントに次の実験的なコードを記述します。

txtUser = dynamic_cast<TextField*>(this->seekNodeByName(rootNode, "txtUser"));	txtPass = dynamic_cast<TextField*>(this->seekNodeByName(rootNode, "txtPass"));	lblResult = dynamic_cast<Text*>(this->seekNodeByName(rootNode, "txtResult"));	btnLogin = dynamic_cast<Button*>(this->seekNodeByName(rootNode, "btnLogin"));;	btnRegister = dynamic_cast<Button*>(this->seekNodeByName(rootNode, "btnRegister"));	lblResult->setString("");	btnLogin->addTouchEventListener(CC_CALLBACK_2(HelloWorld::onBtnLoginClicked, this)); //登录按钮关联单击事件	btnRegister->addTouchEventListener(CC_CALLBACK_2(HelloWorld::onBtnRegClicked, this)); //注册按钮关联单击事件
ログイン後にコピー
は多くのスイッチを記述しましたが、そうでない場合はこれらのブランチが必要です。次のように記述します。 ボタンが表示されたら、ボタンを押してクリック コードを実行します。 これらは、コンパイルして実行した後、クリックしてログに記録する必要のない結果です。赤い結果ラベルにより、「ログインボタンをクリックしてください」というプロンプトが表示され、実験のスタンドアロン部分が成功したことがわかります。





ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート