2

我真的坚持这一点。我的应用程序处于横向视图中,并且在一个屏幕上我希望我的说明图像可以滚动。我已将此图像添加为精灵。首先,我尝试从其他站点获得滚动效果,但很快我发现滚动是针对整个屏幕而不是精灵图像进行的。然后我通过仅在 y 轴(上下)拖动精灵来实现滚动效果。不幸的是,我在某处弄乱了东西,因此只有一部分精灵(仅在屏幕上显示,高度为 320 像素)被拖动,而精灵的其余部分没有显示。代码如下

在我有的初始化层函数中

//Add the instructions image

 instructionsImage = [Sprite spriteWithFile:@"bkg_InstructionScroll.png"];
 instructionsImage.anchorPoint = CGPointZero;
 [self addChild:instructionsImage z:5];
 instructionsImage.position = ccp(40,-580);
 oldPoint = CGPointMake(0,0);
 self.isTouchEnabled = YES;

//The touch functions are as follows
- (BOOL)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
 UITouch *touch = [touches anyObject];

 // Move me!
 if(touch && instructionsImage != nil) {
  CGPoint location = [touch locationInView: [touch view]];
  CGPoint convertedPoint = [[Director sharedDirector] convertCoordinate:location];

  CGPoint newPoint = CGPointMake(40, (instructionsImage.anchorPoint.y+ (convertedPoint.y - oldPoint.y)));
  instructionsImage.position = newPoint;
  return kEventHandled;
 }
 return kEventIgnored;
}

//The other function
- (BOOL)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
 UITouch *touch = [touches anyObject];

 // Move me!
 if(touch && instructionsImage != nil) {
  CGPoint location = [touch locationInView: [touch view]];
  CGPoint convertedPoint = [[Director sharedDirector] convertCoordinate:location];
  oldPoint = convertedPoint;
  return kEventHandled;
 }

 return kEventIgnored;
}
4

1 回答 1

0

您的方法通常是正确的。

代码格式不正确,您不清楚问题的具体症状是什么......

但看起来你在 ccTouchesMoved 中的数学是错误的。锚点不是你关心的,因为这只是图像中位置和旋转锚点出现的比例。像您一样将其设置为构造函数中有意义的任何内容,但之后您不需要引用它。

尝试将您的动作添加到精灵中:

deltaY = convertPoint.y - oldPoint.y;

现在您知道您的手指上下移动了多少像素。

下次重置您的 oldPoint 数据:

oldPoint.y = 转换点.y;

现在将此增量应用于您的精灵:

instrucitonsImage.position = ccp(instructionsImage.position.y,instructionsImage.position.y + delta);

应该这样做。

于 2009-12-08T06:58:16.580 回答