示例#1
0
 internal void Draw(DrawSpec spec)
 {
     if (spec.transform != null)
     {
         var transform = spec.transform.Value;
         Html5.Context.SetTransform(transform.M11, transform.M12, transform.M21, transform.M22, transform.M41, transform.M42);
     }
     foreach (var sprite in spec.spriteSpecs)
     {
         Html5.Context.Save();
         Html5.Context.Translate(sprite.position.X, sprite.position.Y);
         Html5.Context.Rotate(sprite.rotation);
         if (sprite.text == null)
         {
             if (sprite.color.PackedValue != Color.White.PackedValue) //Save some CPU/GPU resource
             {
                 Html5.Context.GlobalAlpha = (float)sprite.color.PackedValue / (float)Color.White.PackedValue;
             }
         }
         float dx = -sprite.origin.X * (sprite.useVScale ? sprite.vScale.X : sprite.scale);
         float dy = -sprite.origin.Y * (sprite.useVScale ? sprite.vScale.Y : sprite.scale);
         if (sprite.rectangle == null)
         {
             if (sprite.text == null) //texture
             {
                 float dw = sprite.texture.Width * (sprite.useVScale ? sprite.vScale.X : sprite.scale);
                 float dh = sprite.texture.Height * (sprite.useVScale ? sprite.vScale.Y : sprite.scale);
                 if (sprite.effects == SpriteEffects.FlipHorizontally)
                 {
                     Html5.Context.Scale(-1, 1);
                     Html5.Context.Translate(-dw, 0f);
                 }
                 else if (sprite.effects == SpriteEffects.FlipVertically)
                 {
                     Html5.Context.Scale(1, -1);
                     Html5.Context.Translate(0f, -dh);
                 }
                 Html5.Context.DrawImage(sprite.texture.Image,
                                         dx, dy, dw, dh
                                         );
             }
             else //font
             {
                 Html5.Context.TextAlign = CanvasTypes.CanvasTextAlign.Start;
                 var color = sprite.color;
                 Html5.Context.FillStyle = string.Format("rgba({0},{1},{2},{3})",
                                                         Convert.ToInt32(color.R),
                                                         Convert.ToInt32(color.G),
                                                         Convert.ToInt32(color.B),
                                                         Convert.ToInt32(color.A)
                                                         );
                 float size = SpriteFont.Size * sprite.scale;
                 Html5.Context.Font = Convert.ToInt32(size) + "px " + SpriteFont.Font;
                 Html5.Context.FillText(sprite.text, Convert.ToInt32(dx), 0);
             }
         }
         else
         {
             var   rec = sprite.rectangle.Value;
             float sx  = rec.X;
             float sy  = rec.Y;
             float sw  = rec.Width;
             float sh  = rec.Height;
             float dw  = rec.Width * (sprite.useVScale ? sprite.vScale.X : sprite.scale);
             float dh  = rec.Height * (sprite.useVScale ? sprite.vScale.Y : sprite.scale);
             if (sprite.effects == SpriteEffects.FlipHorizontally)
             {
                 Html5.Context.Scale(-1, 1);
                 Html5.Context.Translate(-dw, 0f);
             }
             else if (sprite.effects == SpriteEffects.FlipVertically)
             {
                 Html5.Context.Scale(1, -1);
                 Html5.Context.Translate(0f, -dh);
             }
             Html5.Context.DrawImage(sprite.texture.Image,
                                     sx, sy, sw, sh, dx, dy, dw, dh
                                     );
         }
         Html5.Context.Restore();
     }
     if (spec.transform != null)
     {
         Html5.Context.SetTransform(1, 0, 0, 1, 0, 0);
     }
 }
示例#2
0
 public SpriteBatch(GraphicsDevice graphicDevice)
 {
     _graphicDevice        = graphicDevice;
     drawSpecs             = new DrawSpec();
     drawSpecs.spriteSpecs = new List <SpriteSpec>();
 }