4

我正在开发一款游戏,我想在其中添加一个适当的切片功能。所以当一个精灵切片时,应该创建 2 个新的精灵。请检查这里

目前,我只是减小尺寸并复制精灵..像这样的东西..提前谢谢..

 - (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;
                        }
        }

}

4

2 回答 2

1

是否需要特定的分割线?水果忍者只生成两半水果,就好像从中间裂开一样,这很容易做到:

  • 创建两个宽度为原始精灵一半的精灵
  • 将它们放置在原始精灵水平中心线的 1/4 和 3/4 处
  • 添加旋转/加速度等。
  • 修改纹理坐标,使左侧精灵拥有纹理的左半部分,而右侧精灵拥有纹理的右半部分。
于 2012-09-08T18:20:10.230 回答
0

既然你在这里使用 CoreGraphics,为什么不简单地在绘制精灵时使用剪切路径呢?

复制要切片的精灵,然后应用简单的多边形来掩盖两半作为它们各自的剪切路径。你需要的函数被调用CGContextClip,一个简短的教程可以在这里找到。

编辑:本教程列出了这个例子:

CGContextBeginPath (context);
CGContextAddArc (context, w/2, h/2, ((w>h) ? h : w)/2, 0, 2*PI, 0);
CGContextClosePath (context);
CGContextClip (context);

这会将当前路径设置为圆形,然后将当前路径应用为剪切区域。

于 2012-09-10T15:47:53.530 回答