1

我的游戏存在严重的性能问题。我正在开发一个拼图游戏。我将图像切割成更小的图像,为每个拼图块创建一个 UIView,并将每个图像分配到它自己的 UIView 的 CALayer 中。

然后,我为形状创建随机 UIBezier 路径作为蒙版,并将它们分配给 CAShapeLayers,然后将形状图层分配给我的 UIView.layer.mask 属性。

当我试图移动拼图碎片时,这一切都像是一种魅力。我检测触摸并移动适当的块的中心属性(CGPoint)。

但是当我将一块移到其他块上时,它是如此缓慢和“滞后”。

我用谷歌搜索了很多,尝试调用 setNeedsDisplayInRect: my container view 等。我还发现,这些方法重绘了整个东西,我不需要重绘,我只需要移动碎片。而且我发现动画是一种很好的方法,因为它使用了基于 OpenGL 构建的方法。所以我尝试在我的拼图块对象(UIView 的子类)中使用 UIView 类的方法为这些块设置动画(移动):

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGPoint touchLocation = [touch locationInView:self.superview];
CGPoint offset = CGPointMake(touchLocation.x - _previousPoint.x, touchLocation.y - _previousPoint.y);
[UIView animateWithDuration:0
                 animations:^(void){
                     self.center = CGPointMake(self.center.x + offset.x, self.center.y + offset.y);
                 }
                 completion:^(BOOL finished){

                 }];
_previousPoint = touchLocation;   
}

但它也没有成功。

有谁知道如何提高这个性能?

我仍然认为“仅移动”方法将是解决方案(不是重绘每一帧,因为重绘非常昂贵)。但我不知道如何实现。

任何想法将不胜感激,在此先感谢。

4

0 回答 0