This tutorial is compatible with Cocos2d-x 3.0.
Some features of Cocos2d-x such as EditBox and HttpClient are not in the main libCocos2d project and in order to access them, other projects should be imported to the solution first. In this post, I am going to explain how to import and link external projects to the main game project. This post can also help people with general problems regarding referencing C++ projects in Visual Studio.
First, we need to import the libExtensions and libNetwork projects to our solution. To do this, right click on your Solution in the Solution Explorer window, hover over the Add item and press Existing Project….
libExtensions.vcxproj project file is located at
cocos2d\extensions\proj.win32 and the
libNetwork.vcxproj is located at
cocos2d\cocos\network\proj.win32. After importing them, you need to link them to your main project.
To add references to other projects, you need to go to the property pages of your main project. Right click on your project and press Properties.
From Common Properties click on the Add New Reference… button and check the boxes next to
One last thing that you need to do before using
libExtensions, is to add
$(EngineRoot) to your projects include directories. In Property Pages, open Configuration Properties>C/C++>General, and add
$(EngineRoot); to Additional Include Directories.
There is one additional dependency that you probably might need to add to the
libNetwork project. It requires the
libcurl_imp.lib file to build, and we can set this by opening the Property Pages of
libNetwork, locating Additional Dependencies at Configuration Properties>Librarian>General and adding
$(EngineRoot)\external\curl\prebuilt\win32\libcurl_imp.lib; to the beginning of it.
Now you are all set to use
libNetwork. For example, to create an
EditBox, after adding the
#include “extensions/GUI/CCEditBox/CCEditBox.h” line to the top of your file, you can use this code:
nameBox = cocos2d::extension::EditBox::create(Size(width, height), Scale9Sprite::createWithSpriteFrameName("editBox")); nameBox->setPosition(CP(0.5f, 0.45f)); nameBox->setFont(“Arial”, 42.0f); nameBox->setLabelAnchorPoint(Point(-0.1f, 0.5f)); nameBox->setFontColor(Color3B::WHITE); addChild(nameBox);
Note that the classes in
libExtensions are located in the
cocos2d::extension namespace, and for
libNetwork you’d want to look into the
cocos2d::network namespace. As an example for
libNetwork, in the next section I will show how to send a simple POST request using the
Sending a POST request with Cocos2d-x
To use HttpRequest and HttpClient, you first need to include their header files:
#include "network/HttpClient.h" #include "network/HttpRequest.h" using namespace cocos2d::network;
Now, let’s assume that we want to send some std::string containing our POST data called data to http://127.0.0.1:1337. We can use the following code snippet to do that:
HttpRequest* request = new HttpRequest(); request->setUrl("http://127.0.0.1:1337"); request->setRequestType(HttpRequest::Type::POST); request->setRequestData(data.c_str(), data.size()); HttpClient::getInstance()->send(request); request->release();
It’s that easy. Sending GET, PUT and DELETE requests is also very similar, you just need to pass a different
HttpRequest::Type to the