我正在尝试像飞行控制游戏那样的效果。用户将手指拖到屏幕上,将数据存储在数组中,然后该项跟随手指抬起的路径。
我有这个工作的代码,我的问题是我希望它在游戏中保持稳定的速度,当我的精灵移动它的速度因你移动手指的速度而变化。
任何帮助将不胜感激。
我相当肯定它与我的CCMoveTo动作有关,但我真的不想到其他任何方法来做这件事。
void WavePrototypeInterface::ccTouchesBegan(CCSet* touches, CCEvent* event)
{
while (movementPath->count() != 0)
{
movementPath->removeControlPointAtIndex(0);
}
index=0;
this->stopAllActions();
}
void WavePrototypeInterface::ccTouchesMoved(CCSet* touches, CCEvent* event)
{
CCTouch* touch = (CCTouch*)( touches->anyObject() );
CCPoint location = touch->getLocationInView();
location = CCDirector::sharedDirector()->convertToGL(location);
movementPath->addControlPoint(location);
int xValue = movementPath->count();
}
void WavePrototypeInterface::ccTouchesEnded(CCSet* touches, cocos2d::CCEvent* event)
{
if(!movementPath->count()<=0)
{
goToPointWithIndex();
}
}
void WavePrototypeInterface::goToPointWithIndex()
{
CCPoint toPoint = movementPath->getControlPointAtIndex(index);
if(index < movementPath->count())
{
index++;
sprite->setPosition(toPoint);
CCDelayTime * delay = CCDelayTime::create(0.1);
CCCallFunc *func = CCCallFunc::create(this, callfunc_selector(WavePrototypeInterface::goToPointWithIndex));
CCSequence * seq = CCSequence::createWithTwoActions(delay, func);
this->runAction(seq);
}
}
答案 0 :(得分:0)
您可以将每个点作为路径记录到数组中。并在更新循环中执行路径。 在这种情况下,我不建议您使用CCMoveTo或其他操作。您应该手动更新商品的位置。 计算每一帧的移动步骤并将其应用于您的项目。
*示例代码*
//example code
void update(delta){
float step = delta*MOVESPEED;
while(step>0){
CGPoint target = getNextPointInPath();
float distance = ccpDistance(target, item.position);
if( distance > step ){
CGPoint dir = ccpSub(target, item.position);
dir = ccpNormalize(dir);
CGPoint newpoint = ccpAdd(item.position, ccpMult(dir, step));
item.position = newpoint;
step = 0;
}else{
item.positon = target;
step -= distance;
}
}
答案 1 :(得分:0)
ccTouchesMoved 。
这意味着如果你的手指移动速度较慢,你会获得更多的分数,如果你的手指移动得更快,你的分数就会减少。
并在函数 goToPointWithIndex()中设置每个点之间的延迟1秒,以便得到结果。
您应该考虑每个点之间的距离。