2

嗨,我是 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 教程链接,供那些刚接触手机游戏编程的人使用。谢谢!

4

3 回答 3

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;
}

检查语法..这有帮助.. :)

于 2012-05-04T09:03:18.683 回答
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);
于 2012-05-04T07:45:48.327 回答
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));
于 2012-07-11T09:50:46.277 回答