示例#1
0
        protected override void Draw(GameTime gameTime)
        {
            Common.UpdateFPS(gameTime);
            GraphicsDevice.Clear(Color.Black);
            u.width   = 100;
            u.height  = 100;
            u.postion = (Common.Resolution - u.Size) / 2;
            u.Update();
            //Window.Title = u.mouseStatus.ToString() + mousePos[0].ToString();

            /*
             * var p = Common.MouseState.position;
             * vertices = new Vertex[]
             * {
             *  new Vertex(new Vector2(0 + p.X , 0f + p.Y), Color.White, new Vector2(0.5f, 0f)),
             *  new Vertex(new Vector2(5f + p.X, 200f + p.Y), Color.White, new Vector2(0.5f, 1f)),
             *  new Vertex(new Vector2(-5f + p.X, 200f + p.Y), Color.White, new Vector2(0.5f, 1f))
             * };
             * var z = Common.MouseState.position.Y / Common.Resolution.Y * 1.15f;
             * vertexBatch.Begin(swordFx.Texture, PrimitiveType.TriangleList);
             * //准备绘制,用到一个材质,顶点的类型是TriangleList
             * var v = new VertexTriangle(vertices).Rotate(timer, TriangleVertexType.A).RotationList(TriangleVertexType.A, 3.1415f).
             *  TransformPosition(Matrix.CreateScale(1f, z, 1f), Common.MouseState.position);
             * //声明新的三角形,将三角形绕点A(第一个点)旋转timer rad,从这个三角形生成RotationList,RotationList包含有序的经过旋转的三角形,索引增加三角形旋转的度数也增加,这里最多转3.1415 rad(也就是半圈)
             * //对Vertex进行变换,每个顶点x不变,y乘以z,这里z是小于1的
             * v = v.Transform(delegate (int index, Vertex vertex)
             * {
             *  return vertex.ChangeColor(vertex.Color * (index * 1f / v.vertex.Length));
             * });
             * //对Vertex进行变换,索引数值小的透明度低
             * vertexBatch.Draw(v);
             * //进行绘制
             * vertexBatch.End();
             * //真正地将它绘制到屏幕上,释放资源
             * vertexBatch.Begin(PrimitiveType.LineStrip);
             * //u.DrawBorder(vertexBatch);
             * vertexBatch.End();
             */
            spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.Additive);
            //Draw Texts
            //dtt.DrawString(spriteBatch, "开始游戏\n啥也开始不了", (Common.Resolution - dtt.MeasureString("开始游戏\n啥也开始不了", 1)) / 2, Color.White, default, 1);
            //Draw Bullets
            EntityManager.Draw(bullets, spriteBatch);
            if (mousePos[0] != mousePos[1])
            {
                float t = (mousePos[0] - mousePos[1]).Angle() + 0.7853f;
                Color c = Color.White.LinearTo(MeteorBullet.drawColor, 1, 2);
                MeteorBullet.flarefx.Draw(spriteBatch, mousePos[0], c, CenterType.MiddleCenter, 2f, t);
                MeteorBullet.flarefxAlt.Draw(spriteBatch, mousePos[0], c * 0.5f, CenterType.MiddleCenter, 5f, t);
                MeteorBullet.flarefxAlt.Draw(spriteBatch, (mousePos[0] + mousePos[1]) / 2, c * 0.5f, CenterType.MiddleCenter, 5f, t);
                MeteorBullet.flarefxAlt.Draw(spriteBatch, mousePos[1], c * 0.5f, CenterType.MiddleCenter, 5f, t);
                MeteorBullet.flarefxAlt.Draw(spriteBatch, mousePos[2], c * 0.5f, CenterType.MiddleCenter, 5f, t);
                MeteorBullet.flarefxAlt.Draw(spriteBatch, mousePos[4], c * 0.5f, CenterType.MiddleCenter, 5f, t);
            }
            else
            {
                MeteorBullet.flarefx.Draw(spriteBatch, mousePos[0], Color.White, CenterType.MiddleCenter, 1.5f, 0.7853f);
            }
            spriteBatch.End();
            //Draw Mouse
            var v = Helper.CatmullRom(mousePos, 3);

            if (Keyboard.GetState().IsKeyDown(Keys.Z))
            {
                throw new Exception(v.ToStringAlt());
            }
            vertexBatch.Begin(tex, BlendState.Additive, PrimitiveType.TriangleStrip);
            vertexBatch.Draw(VertexTriangle.Strip(v, 20, delegate(int index, Vertex vertex)
            {
                return(vertex.ChangeCoord(index * 0.25f / v.Length + (float)(Math.Sin(timer * 2) + 1) / 4, index % 2 == 0 ? 0f : 1f).ChangeColor(MeteorBullet.drawColor.LinearTo(MeteorBullet.drawColor2, index, v.Length * 0.8f) * (-index * 0.5f / v.Length + 1) * (-index * 0.5f / v.Length + 1) * 1.2f));
            }
                                                  ));
            vertexBatch.End();
            vertexBatch.Begin(tex2, BlendState.Additive, PrimitiveType.TriangleStrip);
            vertexBatch.Draw(VertexTriangle.Strip(v, 30, delegate(int index, Vertex vertex)
            {
                return(vertex.ChangeCoord((float)(Math.Sin(timer) + Math.Sin(index * 8f / v.Length) + 2) / 4, index % 2 == 0 ? 0.3f : 0.7f).ChangeColor(MeteorBullet.drawColor.LinearTo(MeteorBullet.drawColor2, index, v.Length * 0.8f) * (-index * 0.5f / v.Length + 1) * (-index * 0.5f / v.Length + 1) * 1.4f));
            }
                                                  ));
            vertexBatch.End();
            base.Draw(gameTime);
        }