android - 带参数的 CCCallback 的 Cocos2d-x 问题

标签 android c++ callback cocos2d-x

我正在尝试使用 CCSequence 为 Sprite 制作动画,我需要将参数传递给回调,但是当我这样做时我得到了

signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000021

这是我的代码:

void Board::createExplotion(CCPoint boardPosition){
    Mineral* mineralToAnimate = this->boardPieces[(unsigned char) boardPosition.y][(unsigned char) boardPosition.x];
    CCArray* params = CCArray::create(mineralToAnimate, NULL);

    params->retain();

    CCSequence* s1 = CCSequence::create(
                        CCScaleTo::create(0.5f, SELECTED_SCALE),
                        CCScaleTo::create(0.25f, SELECTED_SCALE + 0.1),
                        CCCallFuncO::create(this, callfuncO_selector(Board::test), params )
                        //CCCallFunc::create(this, callfunc_selector(Board::test))
                    );

        mineralToAnimate->runAction(s1);
    }

void Board::test(CCNode* sender, CCObject* data){ ... }

我在没有参数的情况下尝试了相同的代码并且它有效。

我正在使用 eclipse,但调试器并没有多大帮助,或者至少我不知道如何做,adb logcat 显示了这一点:

构建指纹:

'samsung/espressowifixx/espressowifi:4.1.1/JRO03C/P3110XXCLK7:user/release-keys' pid: 4931, tid: 4946, name: Thread-32873 >>> org.cocos2dx.hellocpp <<< signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000021 Stack frame #00 pc 00099ed2 /data/data/org.cocos2dx.hellocpp/lib/libhellocpp.so (cocos2d::CCSequence::initWithTwoActions(cocos2d::CCFiniteTimeAction*, cocos2d::CCFiniteTimeAction*)+93) Stack frame #01 pc 00099fc9 /data/data/org.cocos2dx.hellocpp/lib/libhellocpp.so (cocos2d::CCSequence::createWithTwoActions(cocos2d::CCFiniteTimeAction*, cocos2d::CCFiniteTimeAction*)+44) Stack frame #02 pc 0009a059 /data/data/org.cocos2dx.hellocpp/lib/libhellocpp.so (cocos2d::CCSequence::createWithVariableList(cocos2d::CCFiniteTimeAction*, std::__va_list)+22) Stack frame #03 pc 0009a083 /data/data/org.cocos2dx.hellocpp/lib/libhellocpp.so (cocos2d::CCSequence::create(cocos2d::CCFiniteTimeAction*, ...)+10) Stack frame #04 pc 0008ea5d /data/data/org.cocos2dx.hellocpp/lib/libhellocpp.so (Board::createExplotion(cocos2d::CCPoint)+100)

谢谢。

最佳答案

如果你想用 Action 回调发送数据,那么你必须使用节点和数据选择器而不是对象选择器。因此更改行:

CCCallFuncO::create(this, callfuncO_selector(Board::test), params )

CCCallFuncND::create(this, callfuncND_selector(Board::test), params )

关于android - 带参数的 CCCallback 的 Cocos2d-x 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22919637/

相关文章:

android - 无法将 hydration 数据插入Google Fit

android - 如何安排每月第一天执行的任务并更新 Firebase 实时数据库中的值

c++ - 为什么 GDB(或任何调试器)进入 header ?

c++ - conservativeResize() 新值的值为零

python-2.7 - Tkinter 列表框、箭头键与鼠标单击的行为差异

ios - RemoteIO AudioUnit 播放质量与回调运行时无关,而是与其他因素相关

android - 如何以编程方式更改操作栏项目的背景颜色

android - Crashlytics 不显示 native 崩溃

c++ - 在 C++ 中拆分空分隔字符串序列的简单方法

Python 装饰器作为 Dash 中的回调使用作为实例变量的 Dash 对象 - 失败