您的位置:首页 > 移动开发 > Cocos引擎

cocos2d-x问题记录:只在回调函数中执行动作会导致终端

2016-01-13 21:30 363 查看
今天写一个Demo,犯了一个容易疏忽的错误,记录于此。

角色类:Actor

#ifndef __ACTOR_H
#define  __ACTOR_H

#include "cocos2d.h"

USING_NS_CC;

typedef enum _ActorState
{
MoveLeft,
MoveRight,
Stand,
}ActorState;

class Actor : public Sprite
{
public:
Actor();
~Actor();

virtual bool init();

CREATE_FUNC(Actor);

void MoveRight();
void MoveLeft();
void StopMove();

private:
void changeActorState(ActorState state);
Action *m_MoveLeftAction;
Action *m_MoveRightAction;
ActorState m_actorState;

};
#endif


在init()方法中完成了m_MoveLeftAction和m_MoveRightAction的初始化,代码略。

在场景类中init()中调用MoveRight() MoveLift()测试正常,在键盘响应事件中调用出错,调用堆栈停在

action->startWithTarget(target);//此处出错

原因:
在Actor对动作变量完成初始化后,未执行此动作,此时在场景的init()中调用是没有问题的,因为此时一帧并未结束,动作变量引用计数大于0。在场景的init()函数结束之后,引擎主循环开始,此时动作因为没有在每一帧被执行,会因为自动释放机制引用计数变为0,此时再执行动作就会引发错误。

解决:

手动retain()和release()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  cocos2d-x