Gotchas: Using Cocos2d-x libExtensions and libNetwork - Sun, Jul 6, 2014
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 Properties click 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"));
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 HttpRequest
and HttpClient
classes.
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 setRequestType(…)
method.