人气 145

[行业观察] XNA2D入门 [复制链接]

九艺网 2017-3-10 17:00:49

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x

初期先从2D开始,一般2D就涉及以下问题,逐一解决:
1、载入图片
Texture2D myPic; //定义一个2D对象
myPic = Texture2D.FromFile(graphics.GraphicsDevice, "Airport.png"); //将图片加入工程即可载入

2、显示图片
SpriteBatch myScr;
myScr = new SpriteBatch(graphics.GraphicsDevice); //这句加在 InitializeComponent(); 初始化后
//以下代码加在 protected override void Draw() 中
myScr.Begin();
myScr.Draw(myPic, new Rectangle(x, y, myPic.Width , myPic.Height), Color.White);
myScr.End();

3、缩放图片
自由修改显示图片代码中的宽高即可。

4、翻转图片
修改显示图片代码中的宽高为负值即可。

5、旋转图片
显示代码改为:
myScr.Draw(myPic, new Vector2(X, Y), new Rectangle(0, 0, myPic.Width , myPic.Height ), Color.White, 3.14f, new Vector2(myPic.Width/2, myPic.Height/2), 1f, SpriteEffects.None, 0f);
//X,Y为图片显示坐标  3.14f为旋转角度(改值为浮点数,从0-2pi为一周,3.14即为旋转180度) myPic.Width/2, myPic.Height/2为定义旋转轴心(这里定义为图片的中心) 1f为图片放缩百分比(1为原大小)

6、裁剪图片
显示代码改为:
myScr.Draw(myPic, new Vector2(X, Y), new Rectangle(cx, cy, myPic.Width-20 , myPic.Height-15 ), Color.White, 0f, new Vector2(0, 0), 1f, SpriteEffects.None, 0f);
//cx,cy为裁减后显示原图片区域的x和y坐标,myPic.Width-20 , myPic.Height-15 设置了从cx,cy开始显示的宽和高

7、Alpha通道显示
显示代码改为:
myScr.Begin(SpriteBlendMode.AlphaBlend);
myScr.Draw(myPic, new Rectangle(x, y, myPic.Width , myPic.Height), Color.White); //在上一句定义SpriteBlendMode.AlphaBlend后,程序就会处理带有通道的图片,比如png或者用DirectX SDK自带的DirectX Texture Tool生成的dds文件,如果是普通图片,周边背景色将会被替换成代码中定义的背景色(呵呵,原来弄错了,改正一下)。
myScr.End();

8、图片整体Alpha透明度调整
修改显示代码中Color参数即可,例如:
myScr.Begin(SpriteBlendMode.AlphaBlend);
myScr.Draw(myPic, new Rectangle(x, y, myPic.Width , myPic.Height), new Color(new Vector4(1, 1, 1, 0.5))) ; //最后一个参数为0-1之间的浮点数,定义了图片显示的透明度,前三个参数也为0-1之间的浮点数,分别定义图片RGB三个通道的透明度。
myScr.End();

9、获取以及设置图片具体坐标像素点的RGB值
Texture2D pTex;
pTex = Texture2D.FromFile(graphics.GraphicsDevice, "Tex.dds");
uint[] bytes = new uint[pTex.Width * pTex.Height];
pTex.GetData(bytes); //获取图像数据
pTex.SetData(bytes); //定义图像数据
//bytes数组中的数据即图像数据,通过GetData和SetData就可以完成图片具体像素点的操作,每个像素数据均包含Alpha值(0xFFFFFFFF  Alpha/R/G/B)

10、绘图函数(画直线、矩形、圆圈等基本绘图函数)
尚未解决,期待高人指教(是否使用GDI+?还是XNA中有自带函数?)。

11、获取FPS
1 / ElapsedTime.TotalSeconds 即可得到fps

12、鼠标坐标以及按钮动作获得
MouseState mouseInfo; //定义鼠标信息变量
mouseInfo = Mouse.GetState(); //获取鼠标信息
然后通过mouseInfo.X / mouseInfo.Y / mouseInfo.LeftButton等属性就可以获得详细的鼠标信息了。

13、绘制文字
尚未解决,期待高人指教。

今天心得基本就这些了,望大家指正、补足,谢谢~~
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|小黑屋|九艺游戏动画论坛 ( 津ICP备2022000452号-1 )

GMT+8, 2024-4-17 02:11 , Processed in 0.072281 second(s), 23 queries .

Powered by Discuz! X3.4  © 2001-2017 Discuz Team.