在我的一个项目中使用'cocos2d-iphone'之后,我正在尝试决定我应该为Android游戏使用哪种Cocos2d.我个人的利弊清单:
的Cocos2D-X
专业人士:将游戏带入iOS后应该更容易,也可能是其他平台
缺点/疑惑:在Android上调试c ++代码(简单与否?),NDK应用程序与各种Android设备的兼容性(有多少问题?),访问特定于平台的功能(应用程序内购买等)
的cocos2d-机器人
优点:所有Java,更易于设置和访问特定于平台的功能
缺点:必须从Java转换为c ++或Objective-C用于其他平台
我没有想到的任何一个选项是否存在其他问题?如果有人必须做出这个选择,你选择了什么?为什么?
正如我在标题中提到的那样,我的应用程序构建成功但显示空白屏幕,并在我在设备上运行它几秒后退出(SS GLX Tab3 Intel).logcat显示
error opening cache file /data/data/com.abc.testapp/cache/com.android.opengl.shaders_cache: Permission denied (13)
带libEGL
标签.
有谁知道这意味着什么以及如何解决它?
任何帮助将不胜感激谢谢
我有一些精灵,玩家角色面向右边.我可以从那些精灵中创建一个动画就好了.问题是,如果我想让精灵面向左边.
我做以下事情:
Sprite* p = Sprite::createWithSpriteFrameName("Jumping");
p->setPosition(Vec2(_visibleSize.width/2,_visibleSize.height/2));
this->addChild(p);
p->setFlippedX(true);
Vector<AnimationFrame*> animFrames;
float frameRate = 0.32f;
std::vector<std::string> frameNames = {"Running 0","Running 1","Running 2"};
for (int i =0; i<3;i++){
auto frameName = frameNames.at(i);
auto spriteFrame = SpriteFrameCache::getInstance()->getSpriteFrameByName(frameName);
ValueMap userInfo;
userInfo["frame_index"] = Value(i);
auto animFrame = AnimationFrame::create(spriteFrame, frameRate, userInfo);
animFrames.pushBack(animFrame);
}
auto animation = Animation::create(animFrames, frameRate);
auto animationAction = Animate::create(animation);
p->runAction(RepeatForever::create(animationAction));
p->setFlippedX(true);
Run Code Online (Sandbox Code Playgroud)
动画运行,但动画仍显示面向右侧的玩家.问题是什么?为什么setFlippedX
在这种情况下不起作用?
我正在使用Cocos2d-x 3.13.1.我找不到任何错误,所以我认为我做错了什么.
现在这是一个奇怪的问题.我两天前编码并停止,然后继续.在我的头文件(Fruit.h
)上,我添加了一个名为animateGrow()
like 的方法:
Fruit.h:
class Fruit {
private:
// Member variables here
public:
// Other methods here
void animateGrow( );
};
Run Code Online (Sandbox Code Playgroud)
但是当我尝试在CPP文件中添加相同的方法时,我收到Out-of-line definition of 'animateGrow' does not match any declaration in 'Fruit'
错误.它在标题中声明,但Xcode似乎无法找到该方法.
Fruit.cpp:
#include "SimpleAudioEngine.h"
#include "Fruit.h"
#include "Tree.h"
using namespace cocos2d;
using namespace CocosDenshion;
Fruit::Fruit( ) {
// Constructor
}
// Getter Methods
// Setter Methods
// Other Methods
void Fruit::animateGrow( ) {
// I get an error here when I type it.
} …
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个方法来检查需要Context参数的Internet连接.JNIHelper允许我用参数调用静态函数,但我不知道如何"检索"Cocos2d-x Activity类以将其用作参数.
public static boolean isNetworkAvailable(Context context) {
boolean haveConnectedWifi = false;
boolean haveConnectedMobile = false;
ConnectivityManager cm =
(ConnectivityManager) context.getSystemService(
Context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfo = cm.getAllNetworkInfo();
for (NetworkInfo ni : netInfo) {
if (ni.getTypeName().equalsIgnoreCase("WIFI"))
if (ni.isConnected())
haveConnectedWifi = true;
if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
if (ni.isConnected())
haveConnectedMobile = true;
}
return haveConnectedWifi || haveConnectedMobile;
}
Run Code Online (Sandbox Code Playgroud)
和c ++代码是
JniMethodInfo methodInfo;
if ( !JniHelper::getStaticMethodInfo( methodInfo,
"my/app/TestApp", "isNetworkAvailable", "(Landroid/content/Context;)Z")) {
//error
return;
}
CCLog( "Method found and loaded!");
methodInfo.env->CallStaticBooleanMethod( methodInfo.classID,
methodInfo.methodID);
methodInfo.env->DeleteLocalRef( methodInfo.classID);
Run Code Online (Sandbox Code Playgroud) 我一直在使用cocos2d-x编写游戏,并遇到了改变背景颜色的问题.我在cocos2d中找到了一个例子,但显然这仅适用于用Obj-c编写的cocos2d.基本上这个想法是使用CCLayerColor而不是CCLayer,当构造函数被触发时设置颜色.
有谁知道如何更改cocos2d-x中的背景颜色?看起来很简单,我很确定我错过了一些明显的东西.
我正在尝试遵循本指南,该指南经常被引用为Cocos2d-x的优秀教程.
问题是我对Cocos2d-x(2.2和3.0 alpha0)的下载不包括教程指示的文件install-templates-xcode.sh.
知道这里发生了什么吗?我搜索了那个词,没有出现任何内容,所以我假设它没有隐藏在文件中更深层次.
出于沮丧,我下载了cocos2d-iphone,该文件夹显然有install-templates.sh文件.我宁愿为多平台开发,但这个简单的问题真的让我烦恼.我只是希望能够创建一个Xcode项目并选择cocos2d-x模板(如上面链接的教程中所示).
请参阅github存储库:
请注意,iPhone存储库具有install-templates文件.
也许我错过了一些明显的东西,通常就是这种情况.无论如何,非常感谢帮助.
如何在eclipse的cocos2d-x场景中为" 是否添加精灵 "编写TDD .这是我的代码
CCSprite *sprite =null;
//adding sprite code
sprite = new CCSprite();
sprite->initWithSpriteFrameName(“abc.png");
this->addChild(sprite);
Run Code Online (Sandbox Code Playgroud)
任何博客或正确方向的帮助将不胜感激.谢谢
刚刚宣布了具有强大功能的新firebase,但根据文档(https://firebase.google.com/docs/android/setup#prerequisites),现在需要android studio(以及gradle).目前在我的cocos2d-x应用程序中,我必须使用ADT/Eclipse来构建应用程序,因为还没有支持gradle(但是cocos2d-x团队正在开发它).我现在使用的是旧版本的sdk,它只是一个jar文件.有没有办法在eclipse中使用新的firebase?让我最担心的是插件:
apply plugin: 'com.google.gms.google-services'
Run Code Online (Sandbox Code Playgroud) 我有一个"舞台选择"场景和一个"游戏"场景.然而,当用户按下按钮以开始游戏场景时,在按下和场景显示之间存在延迟(在旧设备上大约2秒或更多).所以我认为我应该创建一个加载场景.
所以我现在正在做的是将"加载"场景传递给一个std :: function,它在加载场景出现后0.1秒被调用.此函数具有启动"游戏"场景的代码,如下所示:
用于创建加载场景.
auto loading_scene = LoadingScene::createLoadingScene([stage_course]() {
Director::getInstance()->replaceScene(Game::createScene(stage_course->course_id));
});
Director::getInstance()->replaceScene(loading_scene);
Run Code Online (Sandbox Code Playgroud)
加载游戏场景.
void LoadingScene::onEnter()
{
Node::onEnter();
call_after(0.1, callback_start);
}
Run Code Online (Sandbox Code Playgroud)
结果是加载场景显示了一个正在运行的字符的简单动画精灵.起初我尝试在回调之前延迟1.0秒来检查精灵是否正常工作(确实如此,角色运行).但是当执行回调时(加载新场景的那个)它会停止移动并且在这样的情况下保持大约1-2秒,直到场景加载然后呈现它为止.
有没有人知道如何在场景加载时保持精灵动画,以便在显示"游戏"场景之前它永远不会停止运行?
编辑:
我正在使用cocos2d-x-3.8.
我的加载场景在其init函数中具有以下代码,用于创建用于为尖顶设置动画的动画:
// Create the sprite animation
Animation *animation = Animation::create();
for (int i = 0; i < INT16_MAX; i++)
{
string frame_sprite_name = StringUtils::format("Interface/loading/0_%d.png",i);
auto frame = SpriteFrameCache::getInstance()->getSpriteFrameByName(frame_sprite_name);
if (frame) {
animation->addSpriteFrame(frame);
} else {
break;
}
}
animation->setDelayPerUnit(0.15f);
Animate *animate = Animate::create(animation);
// Create a temporal sprite to run the animation
auto …
Run Code Online (Sandbox Code Playgroud)