Example #1
0
 internal Sprite(SpriteMap spriteMap, int spriteXIndex, int spriteYIndex)
 {
     _spriteMap    = spriteMap;
     _spriteXIndex = spriteXIndex;
     _spriteYIndex = spriteYIndex;
 }
Example #2
0
		internal Sprite(SpriteMap spriteMap, int spriteXIndex, int spriteYIndex)
		{
			_spriteMap = spriteMap;
			_spriteXIndex = spriteXIndex;
			_spriteYIndex = spriteYIndex;
		}
		public override void Run()
		{
			// A big thanks to Johan Vinet, pixel artist and animator, for the Mario animation! :-)
			// http://johanvinet.tumblr.com/
			// Twitter handle: @johanvinet
			var imageUri = new Uri("ms-appx:///Assets/MiniMario.png");

			// Get the pixels of the animation frames.
			Color[,] pixels = PixelSupport.GetPixels(imageUri).Result;

			// Create a sprite map from the pixels.
			var spriteMap = new SpriteMap(pixels);

			// Keep track of the animation frame...
			int animationIndex = 0;
			Sprite sprite = spriteMap.GetSprite(animationIndex);

			// ...and when it's time to update it.
			TimeSpan frameDuration = TimeSpan.FromMilliseconds(70);
			DateTime nextAnimationUpdateTime = DateTime.Now.Add(frameDuration);

			// Keep track of the location and orientation of the sprite.
			int spriteX = 0;
			int spriteY = 0;
			DisplayDirection direction = DisplayDirection.Deg0;
			bool flipHorizontal = false;
			bool flipVertical = false;

			while (true)
			{
				bool redrawSprite = false;

				//Is it time to update the animation ?
				if (DateTime.Now >= nextAnimationUpdateTime)
				{
					// Yes. The next time to update is:
					nextAnimationUpdateTime = DateTime.Now.Add(frameDuration);

					// Needs to redraw the sprite.
					redrawSprite = true;

					// Select the next sprite index.
					animationIndex++;
					if (animationIndex >= 6)
					{
						animationIndex = 0;
					}

					// Pick out the sprite.
					sprite = spriteMap.GetSprite(animationIndex);
				}

				if (SenseHat.Joystick.Update()) // Has any of the buttons on the joystick changed?
				{
					UpdatePosition(ref spriteX, ref spriteY); // Move the sprite.

					UpdateDrawingDirection(ref direction, ref flipHorizontal, ref flipVertical); // Re-orientate the sprite.

					// Needs to redraw the sprite.
					redrawSprite = true;
				}

				if (redrawSprite)
				{
					SenseHat.Display.Clear(); // Clear the screen.

					// Draw the sprite.
					sprite.Draw(SenseHat.Display, spriteX, spriteY, true, direction, flipHorizontal, flipVertical);

					SenseHat.Display.Update(); // Update the physical display.
				}

				// Take a short nap.
				Sleep(TimeSpan.FromMilliseconds(2));
			}
		}