Gotchas: Using Cocos2d-x libExtensions and libNetwork
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….
The 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 Propertiesclick on the Add New Reference…button and check the boxes next to libExtensions and libNetwork.
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 libExtensions and 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”));
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 HttpRequest and HttpClient classes.
Sending a POST request with Cocos2d-x
To use HttpRequest and HttpClient, you first need to include their header files:s
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();
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 setRequestType(…) method.