当我想用我的C++代码中的JNI调用来改变我的Android-Application的Activity时,我遇到了很大的问题.该应用程序使用cocos2d-x进行渲染.具体情况是我想使用这个非常小的函数在Java中打开OpenFeint-Dashboard:
void launchOpenFeintDashboard() {
Dashboard.open();
}
Run Code Online (Sandbox Code Playgroud)
然后使用简单的JNI调用从C++调用此函数:
void
OFWrapper::launchDashboard() {
// init openfeint
CCLog("CPP Init OpenFeint Dashboard");
CCDirector::sharedDirector()->pause();
jmethodID javamethod = JNIManager::env()->GetMethodID(JNIManager::mainActivity(), "launchOpenFeintDashboard", "()V");
if (javamethod == 0)
return;
JNIManager::env()->CallVoidMethod( JNIManager::mainActivityObj(), javamethod );
CCLog("CPP Init OpenFeint Dashboard done");
}
Run Code Online (Sandbox Code Playgroud)
JNIManager类的实现也非常简单和基本:
#include "JNIManager.h"
#include <cstdlib>
static JNIEnv* sJavaEnvironment = NULL;
static jobject sMainActivityObject = NULL;
static jclass sMainActivity = NULL;
extern "C" {
JNIEXPORT void JNICALL Java_net_plazz_mainzelapp_mainzelapp_sendJavaEnvironment(JNIEnv* env, jobject obj);
};
// this function is called from JAVA at startup to …Run Code Online (Sandbox Code Playgroud) 任何人都可以解释我为什么需要在Cocos2dx中使用CREATE_FUNC?我在HelloWorld示例中看到了它并且不清楚它.请告诉我更多细节.谢谢.
我使用cocos2dx在c ++中编程,在添加精灵或对象时,
这个 - > addChild(something)和addChild(something)
作品.两种方式都得出相同的结果.
但是,不仅在c++,this使用android系统编程太(也许,所有的编程语言使用"本"?).我在Java中使用它来替换ClassName.class,简单this.但除此之外,还有this很多用途.
但是因为我还没有深入编程语言,我不知道他们是否真的做同样的工作(这个 - > addChild与addChildAND ClassName.classvs. this).
我们为什么需要this?
.
.
自答案:
this 是一个关键字,它引用许多面向对象编程语言中的当前类实例或对象.
所以...只是为了安慰?
我有一个精灵(例如纸飞机).我想让它像下面的图片一样移动.我可以使用很多MoveTo和RotateBy动作来按点定义路径,但对我来说这似乎是个坏主意.如何实施?

现在我关注文章http://www.cocos2d-x.org/wiki/Effects.链接的示例会产生错误.经过测试的cocos2d-x版本是cocos2d-x 3.2beta0.
我的代码:
auto bgimage = Sprite::create("top.png");
bgimage->setPosition(visibleSize / 2);
// create a Lens3D action
ActionInterval* lens = Lens3D::create(10, Size(32, 24), Vec2(100, 180), 150);
// create a Waved3D action
ActionInterval* waves = Waves3D::create(10, Size(15, 10), 18, 15);
// create a sequence an repeat it forever
bgimage->runAction(RepeatForever::create(Sequence::create(waves, lens, NULL)));
this->addChild(bgimage);
Run Code Online (Sandbox Code Playgroud)
结果日志:
Assert failed: GridActions can only used on NodeGrid
Assertion failed!
File: CCActionGrid.cpp
Line: 84
Run Code Online (Sandbox Code Playgroud)
我弄错了什么?即使我删除液体动作线,wave3d和lens3d也显示我同样的错误.
首先,我正在使用cocos2d 3.6一切正常,直到我按下键盘上的右箭头键,从keypress事件监听器执行startRunning()函数,操作成功停止,但在下一行this->runAction(Animate::create( runAnimation));,我得到错误.runAnimation是OK.我想问题是在运行新的Action但我不知道它是什么.
这是代码:
#pragma once
#include "cocos2d.h"
using namespace cocos2d;
const int DIR_RIGHT = 1;
const int DIR_LEFT = -1;
class CPlayer: public Sprite
{
private:
Animation* idleAnimation;
Animation* runAnimation;
Animation* bowAnimation;
Animation* climbAnimation;
SpriteFrame* jumpFrame;
SpriteFrame* fallFrame;
SpriteFrame* wallJumpFrame;
boolean onGround = true;
boolean running = false;
int dir = DIR_RIGHT;
float movementSpeed = 50; //50 unit in world space
float stateTime=0;
public:
Animation* createAnimation(const char* format, float delay, bool loop){
Animation* animation = Animation::create();
char …Run Code Online (Sandbox Code Playgroud) 如何设置Cocos2d-x(3.7)以使用Visual Studio 2015的Android和iOS新C++跨平台工具?这是相对较新的,除了最简单的项目之外,没有太多文档.我有Cocos2d-x和一些SDKBOX插件,我似乎无法在Visual Studio中设置任何东西.
在这里投票获取样本. https://code.msdn.microsoft.com/site/requests/Cocos2d-x-e34be78c?ShowSubmitLinkForm=False
我做了一些研究,找不到直接简单的方法来运行我在网上用c ++构建的cocos2d-x项目.如果除了用js或html重写我的代码之外还有其他解决方案,我很乐意听到.到目前为止我尝试过的事情......
Emscripten:我能够在js中转换cpp/c文件并使用它来运行它们,但我想要一种简单的方法来运行整个项目,而不是单个类文件.Cocos2d使用Emscripten提供了很好的支持,并且没有很好的文档可以让它工作.如果有人对此有所成功,请指导我.
Marmalade:看起来这可以用cocos2d-x完成,但是你必须改变代码才能使用marmalade移植到web上.我对此不感兴趣,特别是如果我不知道质量和结果,我必须购买橘子酱.有没有人使用Marmalade的Quick/OpenQuick取得积极成果?
NaCl:看起来很有希望,但它没有很好地更新.任何人都有这个成功吗?
期待听到其他选择和想法.我张贴在cocos2d forumns同样的问题:http://discuss.cocos2d-x.org/t/run-cocos2d-x-project-in-browser/25224
谢谢.
我目前正在开发一个程序,需要从套接字服务器下载一些图像,下载工作将执行很长时间.所以,我创造了一个新std::thread的做法.
一旦下载,std::thread它将调用当前Class的成员函数,但此类可能已被释放.所以,我有一个例外.
如何解决这个问题呢?
void xxx::fun1()
{
...
}
void xxx::downloadImg()
{
...a long time
if(downloadComplete)
{
this->fun1();
}
}
void xxx::mainProcees()
{
std::thread* th = new thread(mem_fn(&xxx::downloadImg),this);
th->detach();
//if I use th->join(),the UI will be obstructed
}
Run Code Online (Sandbox Code Playgroud) 我需要替换精灵的颜色.
一些建立在谷歌的例子

这里我发现了一个看起来像Unity的工作解决方案 - [如何使用着色器动态交换精灵的颜色] [2]
如何将它移植到cocos2d-x?有人可以帮助代码示例吗?
我正在寻找cocos2d-x v3代码片段.真的很期待一些帮助.