public override void DidMoveToView(SKView view) { // Якорь на середину сцены AnchorPoint = new CGPoint(0.5f, 0.5f); // Подсчитываем рамеры клетки с камешком. Клетки квадратные gemCellWidth = ((float)Size.Width - (Properties.GameFieldPadding * 2)) / Level.ColumnsNumber; gemCellHeight = gemCellWidth; // Устанавливаем бэкграунд из текстуры background.Size = Size; background.ZPosition = 1; AddChild(background); // добавляем на сцену основной нод игры, в который будут добавлены остальные элементы уровня gameLayer.ZPosition = 2; AddChild(gameLayer); // Расчет позиции нода с камешками в зависиомсти от высоты и ширины клетки и колисчества клеток CGPoint layerPosition = new CGPoint(-gemCellWidth * Level.ColumnsNumber / 2.0f, -gemCellHeight * Level.RowsNumber / 2.0f); // добавляем в основной нод нод для камешков gemLayer.Position = layerPosition; gemLayer.ZPosition = 3; gameLayer.AddChild(gemLayer); }
public virtual void Initialize() { Console.WriteLine(IntPtr.Size); Heroes = new List <HeroCharacter> (); players = new List <Player> (NUM_PLAYERS); DefaultPlayer = new Player(); players.Add(DefaultPlayer); for (int i = 1; i < NUM_PLAYERS; i++) { players.Add(null); } world = new SKNode() { Name = "world" }; layers = new List <SKNode> ((int)WorldLayer.Count); for (int i = 0; i < (int)WorldLayer.Count; i++) { var layer = new SKNode { ZPosition = i - (int)WorldLayer.Count }; world.AddChild(layer); layers.Add(layer); } AddChild(world); buildHUD(); updateHUDFor(DefaultPlayer, HUDState.Local); }
public void DidAddNode(ARSKView view, SKNode node, ARAnchor anchor) { if (!this.anchorLabels.TryGetValue(anchor.Identifier, out string labelText)) { throw new Exception("missing expected associated label for anchor"); } node.AddChild(new TemplateLabelNode(labelText)); }
/// <summary> /// Добававляем его спрайт на нод для камешка, с расчетом размера и позиции /// </summary> /// <param name="gem">Камешек которому добавляется спрайт.</param> private void AttachSpriteTo(Gem gem) { SKSpriteNode sprite; // Если разрушитель - открепляем старый спрайт на этом месте от слоя камешков if ((gem.IsALineDestroyer || gem.IsABomb) && Level.GemArray[gem.Row, gem.Column] != null) { sprite = Level.GemArray[gem.Row, gem.Column].Sprite; if (sprite != null && sprite.Parent != null) { sprite.RemoveFromParent(); } } // подготовка спрайта sprite = SKSpriteNode.FromImageNamed(gem.GetSpriteName()); sprite.Size = new CGSize(gemCellWidth, gemCellHeight); sprite.Position = GetPositionFromRowAndColumn(gem.Row, gem.Column); gemLayer.AddChild(sprite); gem.Sprite = sprite; // подготовка к анимации sprite.Alpha = 0; sprite.XScale = 0.5f; sprite.YScale = 0.5f; // Анимация появления камешка sprite.RunAction( SKAction.Sequence( SKAction.WaitForDuration(0.25, 0.5), SKAction.Group( SKAction.FadeInWithDuration(0.25), SKAction.ScaleTo(1.0f, 0.25) ) )); // если разрушитель - заменяем в массиве камешек if (gem.IsALineDestroyer || gem.IsABomb) { Level.GemArray[gem.Row, gem.Column] = gem; } }
public static void LoadSharedAssetsOnce() { #if __IOS__ var whiteColor = UIColor.White; #else NSColor whiteColor = null; new NSObject().InvokeOnMainThread(() => { whiteColor = NSColor.White; }); #endif SKTextureAtlas atlas = SKTextureAtlas.FromName("Environment"); SKEmitterNode fire = GraphicsUtilities.EmitterNodeWithEmitterNamed("CaveFire"); fire.ZPosition = 1; SKEmitterNode smoke = GraphicsUtilities.EmitterNodeWithEmitterNamed("CaveFireSmoke"); var sKNode = new SKNode(); sKNode.Add(fire); sKNode.Add(smoke); SKNode torch = sKNode; sharedCaveBase = SKSpriteNode.FromTexture(atlas.TextureNamed("cave_base.png")); // Add two torches either side of the entrance. torch.Position = new CGPoint(83, 83); sharedCaveBase.AddChild(torch); var torchB = (SKNode)torch.Copy(); torchB.Position = new CGPoint(-83, 83); sharedCaveBase.AddChild(torchB); sharedCaveTop = SKSpriteNode.FromTexture(atlas.TextureNamed("cave_top.png")); sharedDeathSplort = SKSpriteNode.FromTexture(atlas.TextureNamed("cave_destroyed.png")); sharedDamageEmitter = GraphicsUtilities.EmitterNodeWithEmitterNamed("CaveDamage"); sharedDeathEmitter = GraphicsUtilities.EmitterNodeWithEmitterNamed("CaveDeathSmoke"); sharedDamageAction = SKAction.Sequence(new [] { SKAction.ColorizeWithColor(whiteColor, 1, 0), SKAction.WaitForDuration(0.25), SKAction.ColorizeWithColorBlendFactor(0, 0.1), }); }
public static SKLabelNode AddDescription(this SKNode self, string description, CGPoint position) { SKLabelNode label = new SKLabelNode("Helvetica") { Text = description, FontSize = 18, Position = position }; self.AddChild(label); return(label); }
public void ChangePlayerWinsIndicator(int PlayerNo, int Wins) { if (PlayerWinsIndicator[PlayerNo] != null) { Players.PlayerWins[PlayerNo] = Wins; SKNode LifeNoSpot = PlayerWinsIndicator[PlayerNo].Children[1]; LifeNoSpot.RemoveAllChildren(); SKSpriteNode NoNode = new SKSpriteNode("No" + Wins); NoNode.Size = new CGSize(15, 15); LifeNoSpot.AddChild(NoNode); } else { System.Console.WriteLine("Wins Indicators are not initialized yet"); } }
public void ChangeLifeIndicator(int PlayerNo, int Life) { if (LifeIndicator[PlayerNo] != null) { if (Life < 0) { Life = 0; } Players.PlayerLife[PlayerNo] = Life; SKNode LifeNoSpot = LifeIndicator[PlayerNo].Children[2]; LifeNoSpot.RemoveAllChildren(); SKSpriteNode NoNode = new SKSpriteNode("No" + Life); NoNode.Size = new CGSize(15, 15); LifeNoSpot.AddChild(NoNode); } else { System.Console.WriteLine("Life indicators are not initialized yet"); } }
public void Setup() { nfloat w = Bounds.Width; nfloat h = Bounds.Height; if (w < h) { nfloat wTmp = w; w = h; h = wTmp; } // Setup the game overlays using SpriteKit SKScene skScene = SKScene.FromSize(new CGSize(w, h)); skScene.ScaleMode = SKSceneScaleMode.ResizeFill; overlayGroup = SKNode.Create(); skScene.AddChild(overlayGroup); overlayGroup.Position = new CGPoint(0f, h); // The Max icon SKSpriteNode sprite = SKSpriteNode.FromImageNamed("Images/MaxIcon.png"); sprite.Position = new CGPoint(50f, -50f); overlayGroup.AddChild(sprite); sprite.XScale = sprite.YScale = 0.5f; for (int i = 0; i < 3; i++) { flowers [i] = SKSpriteNode.FromImageNamed("Images/FlowerEmpty.png"); flowers [i].Position = new CGPoint(110f + i * 40f, -50f); flowers [i].XScale = flowers [i].YScale = 0.25f; overlayGroup.AddChild(flowers[i]); } // The peal icon and count. sprite = SKSpriteNode.FromImageNamed("Images/ItemsPearl.png"); sprite.Position = new CGPoint(110f, -100f); sprite.XScale = sprite.YScale = 0.5f; overlayGroup.AddChild(sprite); pearlLabel = SKLabelNode.FromFont("Chalkduster"); pearlLabel.Text = "x0"; pearlLabel.Position = new CGPoint(152f, -113f); overlayGroup.AddChild(pearlLabel); // The D-Pad sprite = SKSpriteNode.FromImageNamed("Images/dpad.png"); sprite.Position = new CGPoint(100f, 100f); sprite.XScale = sprite.YScale = 0.5f; skScene.AddChild(sprite); padRect = new CGRect( (sprite.Position.Y - DPAD_RADIUS) / w, 1f - (sprite.Position.Y + DPAD_RADIUS) / h, 2f * DPAD_RADIUS / w, 2f * DPAD_RADIUS / h ); // Assign the SpriteKit overlay to the SceneKit view. OverlayScene = skScene; // Setup the pinch gesture defaultFov = PointOfView.Camera.XFov; var pinch = new UIPinchGestureRecognizer { Delegate = this, CancelsTouchesInView = false }; pinch.AddTarget(() => PinchWithGestureRecognizer(pinch)); AddGestureRecognizer(pinch); }
void buildHUD() { string[] iconNames = new [] { "iconWarrior_blue", "iconWarrior_green", "iconWarrior_pink", "iconWarrior_red" }; #if __IOS__ UIColor[] colors = new [] { UIColor.Green, UIColor.Blue, UIColor.Yellow, UIColor.Red }; #else var colors = new NSColor [] { NSColor.Green, NSColor.Blue, NSColor.Yellow, NSColor.Red }; #endif var hudX = 30.0f; var hudY = Frame.Size.Height - 30; var hudD = Frame.Size.Width / NUM_PLAYERS; hudAvatars = new List <SKSpriteNode> (NUM_PLAYERS); hudLabels = new List <SKLabelNode> (NUM_PLAYERS); hudScores = new List <SKLabelNode> (NUM_PLAYERS); hudLifeHeartArrays = new List <List <SKSpriteNode> > (NUM_PLAYERS); var hud = new SKNode(); for (int i = 0; i < NUM_PLAYERS; i++) { var avatar = new SKSpriteNode(iconNames [i]) { XScale = 0.5f, YScale = 0.5f, Alpha = 0.5f, }; avatar.Position = new CGPoint(hudX + i * hudD + (avatar.Size.Width * 0.5f), Frame.Size.Height - avatar.Size.Height * 0.5f - 8f); hudAvatars.Add(avatar); hud.AddChild(avatar); var label = new SKLabelNode("Copperplate") { Text = "NO PLAYER", FontColor = colors [i], FontSize = 16, HorizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left, Position = new CGPoint(hudX + i * hudD + avatar.Size.Width, hudY + 10) }; hudLabels.Add(label); hud.AddChild(label); var score = new SKLabelNode("Copperplate") { Text = "SCORE: 0", FontColor = colors [i], FontSize = 16, HorizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left, Position = new CGPoint(hudX + i * hudD + avatar.Size.Width, hudY - 40) }; hudScores.Add(score); hud.AddChild(score); var playerHearts = new List <SKSpriteNode> (Player.StartLives); hudLifeHeartArrays.Add(playerHearts); for (int j = 0; j < Player.StartLives; j++) { var heart = new SKSpriteNode("lives.png") { XScale = 0.4f, YScale = 0.4f, Alpha = 0.1f }; heart.Position = new CGPoint(hudX + i * hudD + avatar.Size.Width + 18 + (heart.Size.Width + 5) * j, hudY - 10); playerHearts.Add(heart); hud.AddChild(heart); } } AddChild(hud); }
// All sprites in the scene should be added through this method to ensure they are placed in the correct world layer. public void AddNode(SKNode node, WorldLayer layer) { SKNode layerNode = layers [(int)layer]; layerNode.AddChild(node); }
public void Setup () { nfloat w = Bounds.Width; nfloat h = Bounds.Height; if (w < h) { nfloat wTmp = w; w = h; h = wTmp; } // Setup the game overlays using SpriteKit SKScene skScene = SKScene.FromSize (new CGSize (w, h)); skScene.ScaleMode = SKSceneScaleMode.ResizeFill; overlayGroup = SKNode.Create (); skScene.AddChild (overlayGroup); overlayGroup.Position = new CGPoint (0f, h); // The Max icon SKSpriteNode sprite = SKSpriteNode.FromImageNamed ("Images/MaxIcon.png"); sprite.Position = new CGPoint (50f, -50f); overlayGroup.AddChild (sprite); sprite.XScale = sprite.YScale = 0.5f; for (int i = 0; i < 3; i++) { flowers [i] = SKSpriteNode.FromImageNamed ("Images/FlowerEmpty.png"); flowers [i].Position = new CGPoint (110f + i * 40f, -50f); flowers [i].XScale = flowers [i].YScale = 0.25f; overlayGroup.AddChild (flowers[i]); } // The peal icon and count. sprite = SKSpriteNode.FromImageNamed ("Images/ItemsPearl.png"); sprite.Position = new CGPoint (110f, -100f); sprite.XScale = sprite.YScale = 0.5f; overlayGroup.AddChild (sprite); pearlLabel = SKLabelNode.FromFont ("Chalkduster"); pearlLabel.Text = "x0"; pearlLabel.Position = new CGPoint (152f, -113f); overlayGroup.AddChild (pearlLabel); // The D-Pad sprite = SKSpriteNode.FromImageNamed ("Images/dpad.png"); sprite.Position = new CGPoint (100f, 100f); sprite.XScale = sprite.YScale = 0.5f; skScene.AddChild (sprite); padRect = new CGRect ( (sprite.Position.Y - DPAD_RADIUS) / w, 1f - (sprite.Position.Y + DPAD_RADIUS) / h, 2f * DPAD_RADIUS / w, 2f * DPAD_RADIUS / h ); // Assign the SpriteKit overlay to the SceneKit view. OverlayScene = skScene; // Setup the pinch gesture defaultFov = PointOfView.Camera.XFov; var pinch = new UIPinchGestureRecognizer { Delegate = this, CancelsTouchesInView = false }; pinch.AddTarget (() => PinchWithGestureRecognizer (pinch)); AddGestureRecognizer (pinch); }
void buildHUD() { string[] iconNames = new [] { "iconWarrior_blue", "iconWarrior_green", "iconWarrior_pink", "iconWarrior_red" }; #if __IOS__ UIColor[] colors = new [] { UIColor.Green, UIColor.Blue, UIColor.Yellow, UIColor.Red }; #else var colors = new NSColor [] { NSColor.Green, NSColor.Blue, NSColor.Yellow, NSColor.Red }; #endif var hudX = 30.0f; var hudY = Frame.Size.Height - 30; var hudD = Frame.Size.Width / NUM_PLAYERS; hudAvatars = new List<SKSpriteNode> (NUM_PLAYERS); hudLabels = new List<SKLabelNode> (NUM_PLAYERS); hudScores = new List<SKLabelNode> (NUM_PLAYERS); hudLifeHeartArrays = new List<List<SKSpriteNode>> (NUM_PLAYERS); var hud = new SKNode (); for (int i = 0; i < NUM_PLAYERS; i++) { var avatar = new SKSpriteNode (iconNames [i]) { XScale = 0.5f, YScale = 0.5f, Alpha = 0.5f, }; avatar.Position = new CGPoint (hudX + i * hudD + (avatar.Size.Width * 0.5f), Frame.Size.Height - avatar.Size.Height * 0.5f - 8f); hudAvatars.Add (avatar); hud.AddChild (avatar); var label = new SKLabelNode ("Copperplate") { Text = "NO PLAYER", FontColor = colors [i], FontSize = 16, HorizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left, Position = new CGPoint (hudX + i * hudD + avatar.Size.Width, hudY + 10) }; hudLabels.Add (label); hud.AddChild (label); var score = new SKLabelNode ("Copperplate") { Text = "SCORE: 0", FontColor = colors [i], FontSize = 16, HorizontalAlignmentMode = SKLabelHorizontalAlignmentMode.Left, Position = new CGPoint (hudX + i * hudD + avatar.Size.Width, hudY - 40) }; hudScores.Add (score); hud.AddChild (score); var playerHearts = new List<SKSpriteNode> (Player.StartLives); hudLifeHeartArrays.Add (playerHearts); for (int j = 0; j < Player.StartLives; j++) { var heart = new SKSpriteNode ("lives.png") { XScale = 0.4f, YScale = 0.4f, Alpha = 0.1f }; heart.Position = new CGPoint (hudX + i * hudD + avatar.Size.Width + 18 + (heart.Size.Width + 5) * j, hudY - 10); playerHearts.Add (heart); hud.AddChild (heart); } } AddChild (hud); }
public virtual void Initialize() { Console.WriteLine (IntPtr.Size); Heroes = new List<HeroCharacter> (); players = new List<Player> (NUM_PLAYERS); DefaultPlayer = new Player (); players.Add (DefaultPlayer); for (int i = 1; i < NUM_PLAYERS; i++) players.Add (null); world = new SKNode () { Name = "world" }; layers = new List<SKNode> ((int)WorldLayer.Count); for (int i = 0; i < (int)WorldLayer.Count; i++) { var layer = new SKNode { ZPosition = i - (int)WorldLayer.Count }; world.AddChild (layer); layers.Add (layer); } AddChild (world); buildHUD (); updateHUDFor (DefaultPlayer, HUDState.Local); }