嗨,我是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也有一些很好的教程链接。谢谢!
答案 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));