问题标签 [cocos2d-x-3.x]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
170 浏览

android - Genymotion 与 Cocos2d-x v3.11

我在 mac 上使用 cocos2d-x v3.11 并使用 Genymotion 虚拟设备。

在我的/jni/Application.mk,我放了,

但总是会出现同样NO_MATCHING_ABIS的错误,并且应用程序不会在 genymotion 上启动。

虽然可能不需要错误日志,但这里是:

D/dalvikvm( 1893): Late-enabling CheckJNI I/ActivityManager( 587): Start proc org.company.numbergame for activity org.company.numbergame/org.cocos2dx.cpp.AppActivity: pid=1893 uid=10060 gids={50060, 3003} D/dalvikvm( 1893): Trying to load lib /data/app-lib/org.company.numbergame-1/libMyGame.so 0xa4fe4688 E/dalvikvm( 1893): dlopen("/data/app-lib/org.company.numbergame-1/libMyGame.so") failed: dlopen failed: library "/system/lib/libhoudini.so" not found D/AndroidRuntime( 1893): Shutting down VM W/dalvikvm( 1893): threadid=1: thread exiting with uncaught exception (group=0xa4d17b20) E/AndroidRuntime( 1893): FATAL EXCEPTION: main E/AndroidRuntime( 1893): Process: org.company.numbergame, PID: 1893 E/AndroidRuntime( 1893): java.lang.UnsatisfiedLinkError: dlopen failed: library "/system/lib/libhoudini.so" not found E/AndroidRuntime( 1893): at java.lang.Runtime.loadLibrary(Runtime.java:364) E/AndroidRuntime( 1893): at java.lang.System.loadLibrary(System.java:526) E/AndroidRuntime( 1893): at org.cocos2dx.lib.Cocos2dxActivity.onLoadNativeLibraries(Cocos2dxActivity.java:246) E/AndroidRuntime( 1893): at org.cocos2dx.lib.Cocos2dxActivity.onCreate(Cocos2dxActivity.java:260) E/AndroidRuntime( 1893): at android.app.Activity.performCreate(Activity.java:5231) E/AndroidRuntime( 1893): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) E/AndroidRuntime( 1893): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2148) E/AndroidRuntime( 1893): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2233) E/AndroidRuntime( 1893): at android.app.ActivityThread.access$800(ActivityThread.java:135) E/AndroidRuntime( 1893): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) E/AndroidRuntime( 1893): at android.os.Handler.dispatchMessage(Handler.java:102) E/AndroidRuntime( 1893): at android.os.Looper.loop(Looper.java:136) E/AndroidRuntime( 1893): at android.app.ActivityThread.main(ActivityThread.java:5001) E/AndroidRuntime( 1893): at java.lang.reflect.Method.invokeNative(Native Method) E/AndroidRuntime( 1893): at java.lang.reflect.Method.invoke(Method.java:515) E/AndroidRuntime( 1893): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:785) E/AndroidRuntime( 1893): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:601) E/AndroidRuntime( 1893): at dalvik.system.NativeStart.main(Native Method) W/ActivityManager( 587): Force finishing activity org.company.numbergame/org.cocos2dx.cpp.AppActivity D/dalvikvm( 587): GC_FOR_ALLOC freed 856K, 19% free 8972K/10964K, paused 11ms, total 11ms D/MobileDataStateTracker( 587): default: setPolicyDataEnable(enabled=true) W/ActivityManager( 587): Activity pause timeout for ActivityRecord{529f9534 u0 org.company.numbergame/org.cocos2dx.cpp.AppActivity t8 f} W/EGL_genymotion( 763): eglSurfaceAttrib not implemented D/MobileDataStateTracker( 587): default: setPolicyDataEnable(enabled=t

eclipse 模拟器真的很慢,我还需要使用 Genymotion 进行多设备分辨率测试。

编辑: 一个奇怪的问题,我在重新启动 Eclipse 后注意到。(我不会更改我的 Application.mk)。当我使用它构建项目时,cocos compile -p android 它开始为 x86 构建并在安装在 genymotion 设备上时工作,但不适用于我的实际设备。当我删除 x86 时,它是为 armeabi 构建的。但它不能在两种设备(armeabi 和 x86)上同时工作。

有谁知道,我该如何解决?

0 投票
1 回答
32 浏览

cocos2d-x-3.x - cocos2d-x FIXED_WIDTH 不工作

我有一个 700x1280 的图像,我的设计分辨率是 700x1280。我不会为我定位的每个设备提供单独的资产,而是我将使用一个包含我所有资产的资源。

问题:

当我设置我的设计分辨率时,我传递了一个 ResolutionPolicy::FIXED_WIDTH,据我所知,它将缩放宽度而没有边界,但高度可能有边界。但我看到的只是一个固定的宽度,但图像的高度超出了屏幕,即它没有像 FIXED_WIDTH 那样使高度适合屏幕?

0 投票
1 回答
202 浏览

animation - cocos2dx 3.13 - 带动画的 DrawNode

我是 cocos2d-x 3.13 的新手,我想在 DrawNode 中使用动画进行绘制,例如视频:Art Gurus。手工绘制时,它会画一条相同的线。对此解决方案有什么建议吗?谢谢

0 投票
1 回答
1292 浏览

cocos2d-x - 如何在 cocos2d-x 中制作包装的、可滚动的文本?

我有一个ui::Textui::Layout根据内容,它会溢出。我已经查看Label::setOverflowLabel::setWrap关闭了ui::Text's virtualRenderer Label,但我没有看到使其可滚动和换行的方法。

如何ui::Text在确保正确包装文本的同时制作可滚动的?

0 投票
2 回答
205 浏览

cocos2d-x - 如何创建一个白色方块作为精灵,而无需加载图像文件?

通常,我们可以通过执行以下操作从 sprite 帧、文件或纹理创建 sprite:

如何在不使用 DrawNode 或将文件传递给 sprite 的情况下创建指定尺寸的白色正方形?

我知道这是可能的,因为我偶然发现了另一篇描述如何做到这一点的帖子,但忽略了给它添加书签,并且该帖子没有出现在搜索结果中。

0 投票
1 回答
827 浏览

php - 如何将 cocos2dx 中的 png 文件上传到 php 服务器

我需要将 .png 文件从 cocos2dx 上传到 php 服务器。(.txt 可用于测试目的)

我编辑了这里描述的引擎:

http://discuss.cocos2d-x.org/t/upload-file-with-httpclient-solved/18028/4 和这里: https ://github.com/FenneX/FenneX/commit/134e9433c1dbc3ca6f772ce4c149bf911275a7e9

那么现在怎么办?如何将文件上传到服务器?

这是我的尝试,但我是一个 http/network 菜鸟,所以我不知道我在做什么......我只需要一个简单的工作示例即可开始。

cocos2dx 上传按钮源码:

php服务器端代码:

0 投票
0 回答
27 浏览

cocos2d-x - 如何从 cocos2d-x v3 的 C++ 代码中访问 Spidermonkey VM?

Cocos2d-x v3 似乎内置了 Spidermonkey VM。

在 Cocos2d-x c++ 项目中,如何访问 VM 以评估其中的 javascript 表达式?

我找不到任何关于此的文档 - 有关于如何创建 javascript 项目的文档,但没有关于如何在与 C++ 项目隔离的情况下访问 VM 的文档。

0 投票
0 回答
199 浏览

c++ - 为什么这种缩小算法会产生伪影?

我有一个缩放算法,它似乎可以将图像缩放到正确的大小,但会在图像的右半部分产生伪影(轻微的图像损坏)。由于我没有使用指针的经验,我怀疑我的指针算术可能出错了!

要在 OSX 上运行项目: 1. 从以下位置下载:https ://www.dropbox.com/s/myme1z1mkxjwyjf/artifact.zip?dl=0

  1. 打开在 proj.ios 中找到的 xcodeproj 文件

  2. 所有相关的代码都在 HelloWorldScene.cpp 中

在函数 test() 中,您可以注释掉/取消注释我们希望测试的方法。:

测试副本,是我尝试只复制缓冲区的内容而不做任何不好的事情,如内存损坏、泄漏等......图像出现在屏幕上看起来不错!

}

现在注释掉 testCopy(); 并取消注释 testScale(); 在这种情况下,图像会出现,但图像右侧有一些损坏!

我怀疑我的缩减算法(sprshrink)有效(因为它是别人的!:D),并怀疑我在 testScale() 中使用指针时犯了错误!你怎么看 ?我是否正确分配和使用我的指针?我究竟做错了什么?

图片:

清除:

图片清晰

运行 testScale() 而不是 testCopy() 时的伪影(注释掉 testCopy)。 运行缩放方法后的神器!

0 投票
1 回答
698 浏览

cocos2d-x - 我们是否需要将纹理添加到纹理缓存中才能获得自动批处理的好处?

通常,当通过调用从文件加载精灵帧缓存时:

在内部,通过调用将对应于该文件的纹理添加到纹理缓存中:

这基本上是从该图像创建一个 Texture2D 对象并将其存储在 unordered_map 中。


当我动态生成纹理并通过在循环中调用以下代码将精灵帧添加到帧缓存时,这不会在内部发生:

我动态生成纹理,并通过执行以下操作将精灵帧添加到 SpriteFrameCache:

当我以这种方式添加帧(通过调用 addSpriteFrame())时,似乎没有在纹理缓存中对 addImage() 进行内部调用,即使所有精灵帧都使用相同的纹理。

左下角显示 openGL 调用次数的计数器显示只有 2 个调用,无论我在屏幕上添加了多少帧。

打电话时

p Director::getInstance()->getTextureCache()->getCachedTextureInfo()

我得到输出:

(std::__1::string) $0 = "\"/cc_fps_images\" rc=4 id=254 999 x 54 @ 16 bpp => 105 KB\nTextureCache dumpDebugInfo: 1 个纹理,用于 105 KB (0.10 MB)\n "

哪个是显示 fps 速率的纹理......所以没有我的纹理的迹象,但同时添加使用该纹理的帧没有问题。

所以我的问题是:以后会不会因此而出现性能问题?我应该手动将纹理添加到纹理缓存吗?通过这种方式添加我的精灵帧,我可能会遇到任何其他问题吗?

此外,我的纹理是通过使用 Texture2D* tex = new Texture2D(),然后使用 initWithData() 创建的。那么我应该保留对这个指针的引用,然后再调用 delete 吗?还是只调用 removeUnusedTextures 就足够了?

0 投票
0 回答
141 浏览

c++ - 如何有效地覆盖精灵的绘制方法来改变单个像素?

显然在 cocos2d-x 中,你可以重写 sprite 的 draw 方法,来做一些有趣的事情。不幸的是,我没有 OpenGL 经验,所以我很难弄清楚这种方法发生了什么:

给定像素,我知道如何转换我的图像(单个像素)以获得我想要的结果,但这涉及迭代图像中的所有像素并根据需要进行更改,此外,我可以在运行时间之前执行此操作(离线,之前构建我的应用程序)来创建我在应用程序中使用的静态图像。我试图弄清楚如何在运行时(有效地)做同样的事情,因为我猜我用于生成图像的相同技术使用大量 CPU(因为我正在迭代像素而不使用 OpenGL) .

有人能指出我正确的方向吗?我不是在尝试构建图形引擎或任何东西......我只是想在运行时快速修改像素......