cocos2d :: CCmoveTO

时间:2012-05-04 07:15:54

标签: cocos2d-x ccaction

嗨,我是cocos2dx编程新手........

我正在尝试制作目标精灵的射弹动作

//在addtarget()部分

int i(0);
while(i<20)
{
p=HelloWorld::nextPoint(p,0.5);//p is a struct see below.

cocos2d::CCFiniteTimeAction* actionMove=cocos2d::CCMoveTo::actionWithDuration(1.0, ccp(p.x,p.y));
target->runAction( cocos2d::CCSequence::actions(actionMove,NULL));
++i;
}
cocos2d::CCFiniteTimeAction* actionMoveDone = cocos2d::CCCallFuncN::actionWithTarget( this,callfuncN_selector(HelloWorld::spriteMoveFinished));

target->runAction( cocos2d::CCSequence::actions(actionMoveDone, NULL) );

nextPoint是一个返回struct p的函数(它有时间,速度和空间坐标t,x,y,vx,vy) 在循环外部,它运行良好,但在里面它没有显示任何东西 调试完成,所有坐标都很好 尝试删除NUll无法做到 最后使用贝塞尔,所以它现在部分工作。 但无法理解为什么CCMoveTo不起作用。它始终显示初始坐标为(60,60) &安培;对于那些刚接触手机游戏编程的人来说,cocos 2dx也有一些很好的教程链接。谢谢!

3 个答案:

答案 0 :(得分:2)

使用此代码...

while(i<20)
{
p=HelloWorld::nextPoint(p,0.5);//p is a struct see below.

cocos2d::CCFiniteTimeAction* actionMove=cocos2d::CCMoveTo::actionWithDuration(1.0, ccp(p.x,p.y));
cocos2d::CCFiniteTimeAction* actionMoveDone = cocos2d::CCCallFuncN::actionWithTarget( this,callfuncN_selector(HelloWorld::spriteMoveFinished));

target->runAction( cocos2d::CCSequence::actions(actionMove,actionMoveDone,NULL));
++i;
}

检查语法..跳这有助于.. :))

答案 1 :(得分:1)

我不完全确定在同一目标上运行多个MoveTo操作是否有意义。实际上,你是说同一个目标同时在不同的位置移动,这不会产生任何可靠的结果。

您可以尝试使用MoveBy,指定增量位移,但很可能您需要重新编写代码的逻辑,如果您想要的是您的目标遵循给定的轨迹。在这种情况下,您可以创建一个更大的序列,其中包含您需要运行的所有MoveTo个操作。例如。 (伪代码):

 cocos2d::CCSequence* actionSequence = <create empty sequence>;
 while(i<20)
 {
     p = HelloWorld::nextPoint(p,0.5);
     cocos2d::CCFiniteTimeAction* actionMove = ...
     <add actionMove to actionSequence>
     ++i;
 }

 target->runAction(actionSequence);

答案 2 :(得分:1)

CCSequence :: actionsWithArray 所以序列20之后的MoveTo和callfunc

CCArray * arr = CCArray::arrayWithCapacity(20);
for(int i = 0; i != 20; i++)
{
    p = HelloWorld::nextPoint(p,0.5);
    arr->addObject(CCMoveTo::actionWithDuration(1.0, ccp(p.x,p.y)));
}

CCFiniteTimeAction * actionMoveDone 
= CCCallFuncN::actionWithTarget(this,callfuncN_selector(HelloWorld::spriteMoveFinished));
target->runAction(CCSequence::actions(CCSequence::actionsWithArray(arr), actionMoveDone, NULL));