Special Actions
CallFunc / CallBlock 系列动作
CallFunc
CCCallFunc动作允许你调用一个方法作为一个动作。这个在顺序执行动作序列(sequence)的末尾是非常有用的。
例如:
id actionTo = [ CCMoveTo actionWithDuration: 2 position: ccp( s.width- 40, s.height - 40) ] ;
id actionBy = [ CCMoveBy actionWithDuration: 2 position: ccp( 80, 80) ] ;
id actionCallFunc = [ CCCallFunc actionWithTarget: self selector : @selector( doATask) ] ;
id actionSequence = [ CCSequence actions : actionTo, actionBy, actionCallFunc, nil ] ;
- ( void) doATask
{
//some code
}
CallFuncN 和 CallFuncND动作
这里有两个CCCallFunc的变种。就是CCCallFuncN和CCCallFuncND。
CCCallFuncN会将当前节点(Node)作为参数,并且CCCallFuncND会将节点和一些数据的指针作为参数传入。
例如:
id actionCallFuncN = [ CCCallFuncN actionWithTarget : self
selector : @selector( doATaskN : ) ] ; // make sure you notice the trailing :
id actionCallFuncND = [ CCCallFuncND actionWithTarget: self
selector : @selector( doATaskND: data: ) data : pointerToSomeData] ;
- ( void) doATaskN: ( id) node
{
//some code
}
- ( void) doATaskND : ( id) node data: ( void* ) d
{
//some code
}
CallBlock / CallBlockN
v0.99.2版本之后
// BCA is cocos2d macro that means: Block Copy Autorelease
// CCCallBlock (no arguments)
id blockAction = [ CCCallBlock actionWithBlock: BCA ( ^ {
[ label setString: @ "Called Block!" ] ;
} ) ] ;
// CCCallBlockN (passes the Node as an argument)
void ( ^ block) ( CCNode * ) = BCA ( ^ ( CCNode * n ) {
// do something generic with node
CCLOG( @ "called block for %@" , n ) ;
} ) ;
id blockAction2 = [ CCCallBlockN actionWithBlock : block]
CCFollow
v0.99.2版本之后
模拟一个摄像机。被跟踪的节点将会显示在屏幕中央。
// create an sprite
id sprite = [ CCSprite xxxx ] ;
[ self addChild : sprite ] ;
[ self runAction: [ CCFollow actionWithTarget: sprite
worldBoundary : CGRectMake( 0 , 0 , ( winSize.width * 2 ) - 100 , winSize.height) ] ] ;
CCPropertyAction
v0.99.2版本之后
这是一个通用的动作,它可以让你修改objective-c类的任意属性。
// It will modify the "rotation" property from 0 to -270 in 2 seconds, and then it will run the reverse action.
id rot = [ CCPropertyAction actionWithDuration: 2 key: @ "rotation" from: 0 to :-270 ];
id rot_back = [ rot reverse ] ;
id rot_seq = [ CCSequence actions : rot, rot_back, nil ] ;