【发布时间】:2010-10-21 04:22:30
【问题描述】:
我正在尝试使用以下代码让手指拖动 CCSprite:
-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint location = [touch locationInView: [touch view]];
CGPoint convertedCoordinate = [[CCDirector sharedDirector] convertToGL:location];
CGRect redCircleRect = CGRectMake(redCircle.position.x, redCircle.position.y, redCircle.contentSize.width, redCircle.contentSize.height);
CGRect redCircle2Rect = CGRectMake(redCircle2.position.x, redCircle2.position.y, redCircle2.contentSize.width, redCircle2.contentSize.height);
if(CGRectContainsPoint(redCircleRect, convertedCoordinate)) {
//redCircle.position = ccp(convertedCoordinate.x, convertedCoordinate.y);
NSLog(@"Touched");
spriteIndex = 1;
}
else if(CGRectContainsPoint(redCircle2Rect, convertedCoordinate)) {
//redCircle2.position = ccp(convertedCoordinate.x, convertedCoordinate.y);
NSLog(@"Touched2");
spriteIndex = 2;
}
else {
spriteIndex = 0;
}
return YES;
}
-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event {
CGPoint location = [touch locationInView: [touch view]];
CGPoint convertedCoordinate = [[CCDirector sharedDirector] convertToGL:location];
if (spriteIndex == 1) {
redCircle.position = ccp(convertedCoordinate.x, convertedCoordinate.y);
}
else if (spriteIndex == 2) {
redCircle2.position = ccp(convertedCoordinate.x, convertedCoordinate.y);
}
//CGRect RedCircleRect = CGRectMake(redCircle.position.x, redCircle.position.y, redCircle.contentSize.width, redCircle.contentSize.height);
//CGRect RedCircle2Rect = CGRectMake(redCircle.position.x, redCircle.position.y, redCircle.contentSize.width, redCircle.contentSize.height);
}
我的逻辑如下:
在ccTouchesBegan 中,我得到了触摸的位置,将其转换为正确的坐标,然后制作了两个 CGRect,据说它们与我声明的两个精灵的尺寸和位置相同。然后,我检查手指是否使用CGRectContainsPoint 触摸这两个矩形之一。在那里,我有一个名为 spriteIndex 的全局 int,我根据所触摸的圆圈分配一个值。
接下来,在ccTouchesMoved 中,我检查是否为spriteIndex 提供了我要移动的两个精灵之一的“索引”,如果是,则设置所选精灵的位置以进行触摸位置。
问题:
此代码仅能正常工作。它允许我拖动 CCSprites,但前提是我单击中心。而且精灵是 40 x 40 像素,所以一点也不小。
【问题讨论】:
标签: iphone cocos2d-iphone collision-detection