金桥科普  
设为首页 关于我们 邮箱登录
科普聚焦时代科技科普生活科学技术自然科学航空航天科技博览历史考古电脑IT
您现在的位置: 首页 >> 科普频道 >> 电脑游戏 >> 文章详情
XNA2D入门

tpttpt11 gameres 2006-09-30
XNA2D入门

今天开始看了一下景军老大的教程,开始学习XNA,感觉非常不错,有了教程上手方便多了。

初期先从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<uint>(bytes); //获取图像数据

pTex.SetData<uint>(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、绘制文字

尚未解决,期待高人指教。

 

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


  发表评论 写信给编辑 关闭窗口
同栏目内容
· 瑞典在网游中开设虚拟大使馆 2007-06-06
· 魔兽争霸3秘籍(魔兽无敌秘籍) 2007-03-28
· 第一次Collision AI 2006-09-30
· OpenGL GUI教程(一)2 2006-09-11
· OpenGL GUI教程(一) 2006-09-11
· 动画DirectDraw之旅(1) 2006-09-04
相关内容
近期主推
西藏发现青藏高原最大冰川群
·西藏发现青藏高原最大冰川群
·中日: "月亮女神"携手"嫦娥"
·行星大碰撞砸死恐龙催生人类
·美研制会飞汽车定价9万美元
·美国教授设计出自适应机器人
·银河系可能有20多个黑洞
近期热门
英海域惊现大龙虾为普通龙虾5倍
·英海域惊现大龙虾为普通龙虾5倍
·新物种金蛙体表有剧毒
·我国嫦娥工程计划测量月球
·精神病药物可治多种癌症
·视觉震撼:来自海底的精灵
·能删除不良记忆的药物诞生
近期焦点
广西发现罕见溶洞钟乳石有30万年
·广西发现罕见溶洞钟乳石有30万年
·澳大利亚惊现“卡布基诺”海滩
·美国"彩色"瀑布夜幕下震撼游人
·地球上究竟有多少个物种
·英国探险家北极游泳破纪录
·世界之最 世上最小的动物
金桥科普是一个公益性栏目,内容由作者提供或摘自互联网,其目的是向广大网民普及科学技术知识。如果您发现本网站转载或摘编了您拥有著作权的作品,请通知我们(电话:023-63659911),我们立即删除。
关于我们 | 网站地图 | 用户注册 | 广告客户 | 招聘信息 | 业务信息
Copyright@2006-2009 JQInfo.com,WONDER. All Rights Reserved
重庆科技咨询中心.重庆网得信息技术有限公司.版权所有
Email:webmaster@jqinfo.com
重庆数据通信局提供网络带宽. 渝ICP备05002327号