限制在Cocos2dx中拖动精灵的速度

我正在尝试使用ccTouchesMoved拖动一行精灵。 我的意思是说,有一排精灵(他们是彩色的方块)排列在一起,如果我抓住一个触摸,其余的按照它。 如果一个精灵离开了屏幕,我想把它附加到其他精灵身上。 但是,如果精灵的形成速度过快,它会在附加的精灵之间产生一个微小的差距。 如何限制速度,我可以用ccTouchesMoved拖动精灵? 这是我能想到的唯一解决scheme。 如果有人有另一个建议,以防止这种精灵差距发生,我将不胜感激。

在ccTouchesBegin中,我遍历这些精灵,标记被触摸的那个(用于游戏的另一部分),并保存触点和其他精灵之间的距离。

touch = (CCTouch*)(touches->anyObject()); location = touch->getLocation(); for (int i = 0; i < grid->getGridSizeY(); i++) { for (int j = 0; j < grid->getGridSizeX(); j++) { button = grid->button(i, j); button->setDistanceX(location.x-button->getPositionX()); button->setDistanceY(location.y-button->getPositionY()); if (button->boundingBox().containsPoint(location)) { button->setTouched(true); } } } 

然后在ccTouchesMoved我再次循环所有的精灵,并将其设置为始终与触摸点保存的距离相同。

 touch = (CCTouch*)(touches->anyObject()); location = touch->getLocation(); for (int i = 0; i < grid->getGridSizeY(); i++) { for (int j = 0; j < grid->getGridSizeX(); j++) { button = grid->button(i, j); button->setPositionX(touchLocation.x - button->getDistanceX()); button->setPositionY(touchLocation.y - button->getDistanceY()); } } } 

这是更新方法代码,仅适用于离开屏幕左侧的精灵。 没有意义的写下所有的双方,直到我得到一方面的工作:

 for (int i = 0; i < grid->getGridSizeY(); i++) { for (int j = 0; j < grid->getGridSizeX(); j++) { button = grid->button(i, j); //Replaces button if it goes off left side of grid if (button->getPositionX() < grid->button(0, 0)->getPositionX() - button->boundingBox().size.height / 2) { button->setPositionX(grid->button(grid->getGridSizeY() - 1, 0)->getCoord().x + button->boundingBox().size.height / 2); button->setDistanceX(location.x-button->getPositionX()); } } } 

原来这个问题是由于

 button->setDistanceX(location.x-button->getPositionX()); 

由于距离是根据触摸位置而不是精灵本身的位置设置的,所以如果触摸位置移动太快,则由于触摸位置在精灵位置之前更新,所以导致间隙取决于其移动的速度。 我所要做的就是改变相对于精灵位置而不是触摸位置的距离,现在它完美地工作。