1.背景
可见第一篇
上一篇的最后我们说到了试图降低CCMotionStreak类与程序中的其他部分的关联,使之不再向程序的其他模块注入代码。
下面我们开始着手修改。
2.修改
a.将CCMotionStreak的头文件和.cpp文件分别拷贝出来,修改类名及类名的引用CCMotionStreak--->MyCCMotionStreak.
b.增加新的字段
//added properties
CCNode *m_parentNode; //the parent node used for hold this streak to render.
bool m_isSetFollowNode;
CCPoint m_followPoint; //this is a local point in the follow node space;
CCNode *m_followNode; //this is the node which our motion streak wants to follow.
c.增加新的方法
void MyCCMotionStreak::setFollowNode(CCNode *parentNode, CCNode *node, CCPoint point)
{
if(node != NULL && m_parentNode != NULL)
{
m_parentNode = parentNode;
m_followNode = node;
m_followPoint = point;
m_isSetFollowNode = true;
m_parentNode->addChild(this);
}
}
void MyCCMotionStreak::DestroySelf()
{
this->m_parentNode->removeChild(this);
}
d.对update方法的修改
<pre name="code" class="cpp">void MyCCMotionStreak::update(float delta)
{
if(m_isSetFollowNode)
{
m_bStartingPositionInitialized = true;
m_tPositionR = m_parentNode->convertToNodeSpace(m_followNode->convertToWorldSpace(m_followPoint));
}
/*
*/
}
如果不使用的setFollowNode方法的话,用起来还是和以前一样。
思考:
1.也许cocos2dx自带的CCMotionStreak本来就不是看上去那么简单的用法, 它也许要各其他的一些特效类组合起来,做为一个新的效果类,然后由这个新的类来提供管理。
2.原有的CCMotionStreak类是使用setPosition方法来提供顶点信息, 也许可以使用一些算法来固定的生成一些顶点来供CCMotionStreak使用,创造一些更漂亮的效果。
自己又欢天喜地的造了个的轮子。。。