我正在开发一款游戏,我想在其中添加一个合适的切片功能..所以当精灵切片时,应该创建2个新的精灵..请检查
here
目前,我只是缩小尺寸并复制精灵..这样的东西..在此先感谢..
- (BOOL) sliceSprite: (Sprite *) sprite withPath: (UIBezierPath *) slicePath { CGSize size = sprite.size; size.width /= 2; size.height /=2; sprite.size = size; sprite.sliced = YES; Sprite *newSprite = [[Sprite alloc] initWithImage: sprite.image]; newSprite.position = sprite.position; newSprite.size = size; newSprite.sliced = YES; newSprite.inView = YES; newSprite.xVelocity = SLICE_SPEEDUP * sprite.yVelocity; newSprite.yVelocity = SLICE_SPEEDUP * sprite.xVelocity; newSprite.angularVelocity = -SLICE_REVUP * sprite.angularVelocity; [sprites addObject: newSprite]; [newSprite release]; sprite.angularVelocity = SLICE_REVUP * sprite.angularVelocity; sprite.xVelocity = -SLICE_SPEEDUP * sprite.xVelocity; sprite.yVelocity = -SLICE_SPEEDUP * sprite.yVelocity; return YES; } - (void) sliceSpritesInSwipePath { CGRect swipeRect = [swipePath bounds]; for (NSUInteger i = 0; i < [sprites count]; i++) { Sprite *sprite = [sprites objectAtIndex: i]; if ([sprite intersectsWithPathInArray: swipePoints inRect: swipeRect]) if ([self sliceSprite: sprite withPath: swipePath]) { [self resetSwipe]; if (![sliceSound isPlaying]) [sliceSound play]; break; } }
}
解决方法
既然你在这里使用CoreGraphics,为什么不在绘制精灵时简单地使用剪切路径呢?
复制要切片的精灵,然后应用将两半遮盖的简单多边形作为各自的剪切路径.您需要的功能称为CGContextClip
,可以找到简短的教程here.
编辑:教程列出了这个例子:
CGContextBeginPath (context); CGContextAddArc (context,w/2,h/2,((w>h) ? h : w)/2,2*PI,0); CGContextClosePath (context); CGContextClip (context);
这会将当前路径设置为圆,然后将当前路径应用为剪切区域.