原作者:
jeffxtang
这篇教程首先向你展示如何导入以及在
Google Glass
上运行
Cocos2d-x 3.0
的
TestCpp
,
并展示如何在
Google Glass
上运行一个新的
Cocos2d-x 3.0
应用程序。
导入并在Google Glass上导入Cocos2d-x 3.0应用程序。
下面展示的是如何在Mac上运行Cocos2d-x 3.0的C++事例代码:
- 从http://developer.android.com/sdk/index.html下载并解压Android SDK (ADT 包)(谷歌眼镜是基于安卓的)
2.启动在ADT捆绑的eclipse目录下的Eclipse,然后打开Window > Android SDK Manager,在Android 4.4.2 (API 19)下安装SDK Platform平台和Glass Development Kit Preview - 链接你的谷歌眼镜Google Glass并打开终端Terminal,运行/sdk/platform-tools/adb 设备来确认你的Glass设备,或者跟从Glass GDK快速启动指示:https://developers.google.com/glass/develop/gdk/quick-start;
- 跟随使用指南 http://www.cocos2d-x.org/wiki/How_to_run_cpp-tests_on_Android得到样本app cpp-tests(注意——在brew安装ant之前你可能需要先运行brew的升级)。你可以跳过使用指南里面的“如何通过命令行将它布置到安卓机上”“How to deploy it on your Android phone via command line”,毕竟我们会将项目导入到Eclipse里并用Eclipse把app安装到Glass中。但你可能想将它在其他的非眼镜的安卓设备上试试样本demo的使用效果。
- 跟着步骤走:http://www.cocos2d-x.org/wiki/how_to_build_an_android_project_with_eclipse导入cpp-tests项目和libcocos2dx项目到Eclipse。
选择CppTest并确认你的Glass链接电脑并开着,然后作为安卓程序一样运行它。不幸的事,轻击或者左右滑动都不能操作demo菜单。更糟糕的是,如果你的Glass的屏幕关闭了,再次点击,你会被带到”Ok Glass”的主页去而不是CppTest app中。你可以下载Launchy app(https://github.com/kaze0/launchy)一旦Glass关闭后用它轻松地选择启动CppTests
7.为了启动Glass上的CppTest的用户界面,你需要按如下Listing1首先修改在AppActivity.java类的实现方法。
public class AppActivity extends Cocos2dxActivity {
Cocos2dxGLSurfaceView glSurfaceView;
public Cocos2dxGLSurfaceView onCreateView() {
glSurfaceView = new Cocos2dxGLSurfaceView(this);
glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
return glSurfaceView;
}
public boolean onGenericMotionEvent(MotionEvent event) {
if ((event.getAction() & MotionEvent.ACTION_MASK) == MotionEvent.ACTION_POINTER_DOWN) {
finish();
return true;
}
glSurfaceView.onTouchEvent(event);
return false;
}
}
```
改动将会通过一个实例变量glSurfaceView来实现,这将用来展示每一个demo的特性。所以在GenericMotionEvent我们能够传递触控时间给glSurfaceView(除了结束app的手指双击)。
8. 为了直接在Eclipse上直接开发C++代码,我们需要把在Classes目录下的C++源文件链接到Eclipse里CppTest的Classes文件夹。为了实现这个,打开项目属性,选择C/C++General,然后Path and Symbols,你会看到信息”这个项目不是一个CDT项目” This project is not a CDT project”(CDT全称是C/C++ Development Tools)
为了修复这个问题,在Properties窗口中点击Cancel。在Eclipse中,选择File ——>New ——> Project然后选择C/C++ ——> C++ Project,输入一个假名然后点击Finish。现在打开虚拟项目的Properties ——> Resource以此找到它的路径在终端上,从这个路径上复制文件.cproject到你的新游戏的app的proj.android目录下(/tests/cpp-tests/proj.android)。你现在可以从Eclipse和硬盘上删掉虚拟的项目了。
9. 回到CppTests,选Properties——>C/C++ General——> Paths and Symbols ——>Source Location,点击Link Folder…,在文件系统中检查到folder的Link,然后Browse…选择CppTest的Classes文件夹。两次点击OK,Eclipse就会把Classes下的所有源文件展示出来。
10. 接下来我们要做的是修改在Classes文件夹中的AppDelegate.cpp。但是当你打开文件后,你会看到一大堆的错误并且在Glass上根本不能创建和安装CppTest。这是因为Eclipse,或至少版本22.6.2 ADT不正确的在CppTest以及AppDelegate.cpp的属性窗口中显示了错误提示。为了修复这个问题,打开CppTest属性窗口(CppTests’s Properties window),然后到C/C++概况(C/C++ General)下的代码分析(Code Analysis),选择使用项目设置(project settings),并取消语法语义错误(Syntax and Semantic Errors)然后你会看到错误提示消失了。这一步骤非常重要,否则当你在Eclipse中修改了C++代码后就不能建立CppTest应用程序。
11. 我们对AppDelegate做出一些简单的改动——在applicationDidFinishLaunching方法里面,在return true之前;添加下面两行代码:
auto s =
new Box2dTestBedScene();
s->runThisTest();
然后添加 在AppDelegate.cpp的开头添加 #include "Box2DTestBed/Box2dView.h"
现在打开一个终端窗口,用cd打开cocos2d-x-3.0的项目目录。运行本地C++字库创建指令。
python android-build.py -p 19 cpp-tests
在出现“创建成功”“BUILD SUCCESSFUL”的信息后,会在CppTests > libs > armeabi文件夹中出现一个名叫libcpp_tests.so的新版本CppTests的数据库。
12. 现在在Eclipse上再次运行CppTest.app,你就会看到CppTest的Box2D的样例开始在Glass上运行了,然后用你的指头在镜片上拖动,你就会看到样例盒子在Glass上移动了。
理想情况下,我们能用手势返回主菜单MainMenu并在Glass上简单的测试Cocos2d-x所有裤裤的特性。当你看到这的时候已经实现了一大半的功能了——这样的话,我们会在书的网站上贴上更新教程的链接。从现在开始,你能使用上面的步骤11和步骤12来尝试CppTest上的其他特性。比如,试试粒子效果ParticleTest在Glass上的效果,在AppDelegate.cpp上替换auto s = new Box2dTestBedScene(); 成 auto s = new ParticleTestScene(),还有#include "ParticleTest/ParticleTest.h",创建C++数据库,然后再Eclipse上运行CppTest。
在试过CppTest后,在做出你自己的游戏之前,你应该去http://www.cocos2d-x.org/看下Cocos2d-x Wiki 和 API 相关文献做进一步的了解。
现在你知道如何在Glass上运行CppTest的demo了,现在让我们看看如何建Glass上运行一个新建的Cocos2d-x应用程序。
在Glass上创建一个新的Cocos2d-x App
-----------------------------------
跟随下面的步骤从头开始制作一个Cocos2d-x app
1.跟着http://www.cocos2d-x.org/wiki/how_to_start_a_new_cocos2d-x_game.这里的指导走。总结下,我在Mac上运行的命令行。
cd cocos2d-x-3.0
./setup.py
source ~/.bash_profile
cocos new MyGame -p com.myCompany.myGame -l cpp -d ./MyCompany
cocos run -s ./MyCompany/MyGame -p android
如果你在Windows或Linux上运行,你是用的命令行跟着是差不多的。
2.在Eclipse中,导入在MyCompany/MyGame/proj.android的Android项目,在导入后,如果你在MyGame项目和AppActivity.java上出现问题后看到错误的话,你需要修改相关对libcocos2dx的引用:打开项目的属性,到安卓数据库区域下Android’s Library section,点击添加Add,然后再里面选择libcocos2dx。
3. Run the MyGame app on your Glass and you’ll see the Cocos2d-x version of Hello World on Glass.
在Glass上运行MyGame应用,你就会看到Cocos2d-x版本的HelloWorld了。
4. 如果你点击存放有全部游戏C++代码Classes文件夹,你会看到他却是空的,但是实际上它在MyCompany/MyGame下,和proj.android目录在同一级下。我们需要在Eclipse中将Classes的目录链接到MyGame的Classes文件夹下,就像我们在上一个部分里步骤8为CppTest做的那样。选择File > New > Project…然后选择C/C++ > C++ Project,输入一个空文件名然后点击完成Finish。现在打开空项目的属性资源Properties ——> Resource 来找到它的位置。在终端上,复制.cproject文件从刚才找的位置移动到你的新游戏app的proj.android目录(MyCompany/MyGame/proj.android)。
现在回到MyGame的Properties ——> C/C++ General ——> Paths and Symbols ——> Source Location,点击链接文件夹Link Folder,在文件系统中确认链接到文件夹,然后浏览Browse,再选择MyGame的Classes文件夹,点击OK。
5.如果,也只有在你在Classes里打开了AppDelegate.cpp文件,你会看到一大堆的错误。为了修复这个问题,在进行一次上个部分教程的步骤10。
6.现在打开AppActivity.java然后文件里面设置成Listing 1(Listing 1在上面)那样。然后打开HelloWorldScene.cpp,添加下面的代码,大多是从这个网站http://www.cocos2d-x.org/wiki/eventdispatcher_mechanism获取的,当然还是需要修改些地方,到HelloWorld::init() 方法,在return true前面添加如Listing 2的代码。
// Listing 2 Adding Sprites with Touch Even Listener for Cocos2d-x 3.0
auto size = Director::getInstance()->getWinSize();
auto sprite1 = Sprite::create("CloseNormal.png");
sprite1->setPosition(origin+Point(size.width/2, size.height/2) + Point(-80, 80));
addChild(sprite1, 10);
auto sprite2 = Sprite::create("CloseNormal.png");
sprite2->setPosition(origin+Point(size.width/2, size.height/2));
addChild(sprite2, 20);
auto sprite3 = Sprite::create("HelloWorld.png");
sprite3->setPosition(Point(0, 0));
sprite2->addChild(sprite3, 1);
auto listener1 = EventListenerTouchOneByOne::create();
listener1->setSwallowTouches(true);
listener1->onTouchBegan = ](Touch* touch, Event* event){
auto target = static_cast(event->getCurrentTarget());
//Get the position of the current point relative to the button
Point locationInNode = target->convertToNodeSpace(touch->getLocation());
Size s = target->getContentSize();
Rect rect = Rect(0, 0, s.width, s.height);
//Check the click area
if (rect.containsPoint(locationInNode)) {
target->setOpacity(180);
return true;
}
return false;
};
//Trigger when moving touch
listener1->onTouchMoved = ](Touch* touch, Event* event){
auto target = static_cast(event->getCurrentTarget());
//Move the position of current button sprite
target->setPosition(target->getPosition() + touch->getDelta());
};
//Process the touch end event
listener1->onTouchEnded = =](Touch* touch, Event* event){
auto target = static_cast(event->getCurrentTarget());
target->setOpacity(255);
//Reset zOrder and the display sequence will change
if (target == sprite2)
sprite1->setZOrder(100);
else if(target == sprite1)
sprite1->setZOrder(0);
};
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1, sprite1);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite2);
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener1->clone(), sprite3);
```
这就是所有你需要改动的代码。
7.打开一个终端窗口,用语句cd找到MyGame的proj.android目录,运行命令行“python build_native.py”,你将会看到如下信息:
Compile++ thumb: cocos2dcpp_shared <= HelloWorldScene.cpp
SharedLibrary : libcocos2dcpp.so
Install : libcocos2dcpp.so => libs/armeabi/libcocos2dcpp.so
We're all set.
完成。
8.回到Eclipse,在Glass上运行MyGame的应用,这一次,你能在Glass的触摸板上移动图像了。
如果你有任何Cocos2d游戏的开发背景,或者根本没有,你也能迅速掌握Cocos2d-x—他有着很好的网上文档资源和事例。我希望在这展示的是怎样在Glass上运行引擎和样例并且跟引擎互动,让你能看到下一个Glass游戏项目的可能性和潜在的使用价值——为了获得更多的灵感,你可以看看其他用Cocos引擎做的游戏:http://www.cocos2d-x.org/games.