/// <summary> /// Анимация разрушителей. создает спрайт, на месте бонуса, которому придает анимацию /// перемещения к центру (зависит от активированного бонуса - вертикально /// или горизонтально), с одновременным растягиванием, иммитируя лазерныйй луч /// затем удаляет спрайт со сцены /// </summary> /// <param name="destroyer">Активированный онус.</param> public void AnimateLineDestroyer(Gem destroyer) { SKSpriteNode sprite; CGPoint centerPoint; SKAction resizeSprite; // инициализация спрайта, подготовка координат для анимации, размеров if (destroyer.IsHorizontal) { float newWidth = gemCellWidth * Level.ColumnsNumber; sprite = SKSpriteNode.FromImageNamed("destroyer_ray_horisontal"); centerPoint = new CGPoint(gemCellWidth * Level.ColumnsNumber / 2, destroyer.Sprite.Position.Y); resizeSprite = SKAction.ResizeToWidth(newWidth, Properties.LineDestructionDuration / 1000f); } else { float newHeight = gemCellHeight * Level.RowsNumber; sprite = SKSpriteNode.FromImageNamed("destroyer_ray_vertical"); centerPoint = new CGPoint(destroyer.Sprite.Position.X, gemCellHeight * Level.RowsNumber / 2); resizeSprite = SKAction.ResizeToHeight(newHeight, Properties.LineDestructionDuration / 1000f); } SKAction moveToCenter = SKAction.MoveTo(centerPoint, Properties.LineDestructionDuration / 1000f); CGPoint initialPosition = GetPositionFromRowAndColumn(destroyer.Row, destroyer.Column); CGSize initialSize = new CGSize(gemCellWidth, gemCellHeight); sprite.Size = initialSize; sprite.Position = initialPosition; sprite.ZPosition = 110; gemLayer.AddChild(sprite); sprite.RunAction(moveToCenter); sprite.RunAction(SKAction.Sequence(resizeSprite, SKAction.RemoveFromParent())); }