0

我使用以下代码在我的应用程序中移动一个精灵:

- (void) ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{

    UITouch *touch = [touches anyObject];

    CGPoint touchLocation = [self convertTouchToNodeSpace:touch];

    CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];
    oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];
    oldTouchLocation = [self convertToNodeSpace:oldTouchLocation];

    CGPoint translation = ccpSub(touchLocation, oldTouchLocation);
    CGPoint newPos = ccpAdd(self.position, translation);

    self.position = newPos;
}

它工作正常,但是当取景器在屏幕上时,精灵会移动。

我想要实现的是滑动后的某种动力,例如在 iOS 中的内置应用程序中。

谁能给我一个提示如何做到这一点?

4

1 回答 1

0

当您放开物体时,您可以简单地获得速度(以每秒像素为单位),

(thisTouchPosition.x - lastTouchPosition.x) / (thisTouchTime - lastTouchTime)

然后为您希望对象在释放时具有的“减速”(也以 px/秒 0.0-1.0 为单位)制作比例因子。SLOWDOWN 越低,减速越快。并且在您的渲染循环中,对于您的位置来说,这样的东西应该可以工作。FPS 是您的循环率。

SPEED *= SLOWDOWN
x = x + SPEED / FPS

如果您没有渲染循环(您应该这样做),那么您将需要创建一个 NSTimer 并在其完成时使其无效或生成另一个线程来执行此操作。

这是未经测试的,但应该让你去。

于 2013-01-08T17:33:43.627 回答