hchchc6016 2016-05-22 15:16 采纳率: 91.2%
浏览 2265
已结题

cocos2d中关于回调函数的pSender参数的问题

运行结果显示,CallBack1和CallBack2产生的效果是一样的,请问CallBack2处的pSender的作用是什么,为什么Sprite* sp = (Sprite*)pSender;后sp与sprite等效了?

cpp中

 void MyScene::goMenu(cocos2d::Ref* pSender)
{
    log("Tag=%i",this->getTag());
    switch (this->getTag())
    {
    case func:
        this->OnCallFunc(pSender);
        break;
    case funcN:
        this->OnCallFuncN(pSender);
        break;

    }
}
void MyScene::backMenu(Ref* pSender)
{
    Scene* scene = HelloWorld::createScene();
    Director::getInstance()->replaceScene(scene);
}

void MyScene::OnCallFunc(Ref* pSender)
{
    FiniteTimeAction* ac1 = MoveBy::create(2,Vec2(100,100));
    FiniteTimeAction* ac2 = ac1->reverse();
    FiniteTimeAction* acf = CallFunc::create(CC_CALLBACK_0(MyScene::CallBack1,this));
    FiniteTimeAction* seq = Sequence::create(ac1,acf,ac2,NULL);
    log("%p", this->sprite);
    this->sprite->runAction(Sequence::create(seq,NULL));
}
void MyScene::OnCallFuncN(Ref* pSender)
{
    FiniteTimeAction* ac1 = MoveBy::create(2, Vec2(100, 100));
    FiniteTimeAction* ac2 = ac1->reverse();
    FiniteTimeAction* acf = CallFuncN::create(CC_CALLBACK_1(MyScene::CallBack2, this));
    FiniteTimeAction* seq = Sequence::create(ac1, acf, ac2, NULL);
    sprite->runAction(Sequence::create(seq,NULL));
}

void MyScene::CallBack1()
{
    sprite->runAction(TintBy::create(0.5, 255, 0, 255));

}
void MyScene::CallBack2(Ref* pSender)
{
    Sprite* sp = (Sprite*)pSender;
    sp->runAction(TintBy::create(0.5, 255, 0, 255));
}

头文件中

 #pragma once
#include "cocos2d.h"

using namespace cocos2d;

class MyScene :public Layer
{
    Sprite* sprite;
public:
    static Scene* createScene();
    virtual bool init();
    CREATE_FUNC(MyScene);

    void goMenu(Ref* pSender);
    void backMenu(Ref* pSender);

    void OnCallFunc(Ref* pSender);
    void OnCallFuncN(Ref* pSender);

    void CallBack1();
    void CallBack2(Ref* pSender);
};

  • 写回答

1条回答 默认 最新

  • devmiao 2016-05-22 15:38
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 #MATLAB仿真#车辆换道路径规划
  • ¥15 java 操作 elasticsearch 8.1 实现 索引的重建
  • ¥15 数据可视化Python
  • ¥15 要给毕业设计添加扫码登录的功能!!有偿
  • ¥15 kafka 分区副本增加会导致消息丢失或者不可用吗?
  • ¥15 微信公众号自制会员卡没有收款渠道啊
  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘