星期四, 五月 24, 2007

XNA开发的首款多人格斗游戏


这款游戏支持两人对战,需要用到USB手柄。这是目前第一个用XNA开发的对战格斗游戏。
开发者的blog
http://www.geekswithblogs.net/gambit_sunob

XNA Exchange

XNA Exchange是给自由职业的开发人员一个合作的平台。开发人员和团体可以提交他们的项目,在这里展开合作,这里目前是完全免费的。
XNA Exchange的链接
http://www.thexnaexchange.com/

一个俄罗斯团队宣布开发XNA物理库


XNA Physics API (XPA) is physics API designed for XNA.

It is based on OPAL (Open Physics Abstraction Layer) [url:http://ox.slug.louisville.edu/~o0lozi01/opal_wiki/index.php/Main_Page]At initial stage it will support ODE (Open Dynamics Engine) http://ode.org but later it will support something else for XBox360 support.
What is XPA?

XPA is a high-level interface for low-level physics engines used in games, robotics simulations, and other 3D applications. Features a simple C# API, intuitive objects (e.g. Solids, Joints, Motors, Sensors), and XML-based file storage for complex objects.
XPA Mission

Our common goal is to create a set of open source physics tools for the development of virtual environments.
XPA Philosophy

XPA has two main goals:1. to provide a high-level physics interface, and2. to provide an abstract interface that is independent of the underlying physics engines.Although some similar libraries focus mainly on #2, XPA is more focused on #1. Even though #2 is important for comparing physics engines or using multiple physics engines in the same application, XPA’s primary concern is giving developers a simple, powerful interface with high-level constructs.

东京电玩展游戏数量超记录

这次的东京电玩展向公众展示了573款游戏,比去年多了57款游戏。
在2002年由一年一次改为一年两次后,东京电玩展在最近几年有衰弱之势。然而经过日本电子游戏产业的复苏,E3展览宣布缩写展览规模后,东京电玩展也开始复苏。
这573款游戏中有,127款PC游戏,125款手机游戏,100款PS2游戏,52款NDS游戏,33款PSP游戏,20款Xbox 360游戏,18款PS3游戏,仅5款Wii游戏。
东京电玩展将于9月22日-24日进行。
消息来源
http://www.gamasutra.com/php-bin/news_index.php?story=10873

Wii 日本发售细节披露

在日本的Wii发布会上透露的新消息,Wii将以25000日元(213美元)的含税价格在12月2日在日本正式发售,比索尼的PS3晚3个星期。
和美国的发售不一样的是,日本的发售将不会捆绑Wii Sport。将单独以4800日元(41美元)出售。塞尔达传说:黎明公主的定价是6800日元(58美元)
任天堂表示将有30款游戏在发售时候同时发行。
消息来源
http://www.gamasutra.com/php-bin/news_index.php?story=10871

跑跑卡丁车同时在线超过70万人

跑跑卡丁车的运营商世纪天成星期一宣布,Q版3D赛车游戏跑跑卡丁车峰值同时在线人数在9月10日超过70万人。世纪天成从今年的3月7日代理运营跑跑卡丁车。目前已经有7000万注册用户。跑跑卡丁车中的人物也是Nexon的炸弹人游戏泡泡堂的人物。盛大在2003年开始代理这个游戏。在顶峰时期,盛大宣布泡泡堂同时在线70万人。世纪天成是上海邮电公司的子公司。
消息来源
http://www.pacificepoch.com/newsstories?id=74998_0_5_0_M

UBI发布Wii的首款外设


最近UBI公布了即将面市的Wii外设Wii Steering Wheel 。它将作为Wii大作GT Pro Series的附件有著名的外设提供商Thrustmaster开发的。
这个方向盘其实没有着地的部分,仅仅是把Wii 的遥控器放入其中作为控制器。
很显然Wii Steering Wheel 兼容UBI即将发布的大作怪物四驱:世界巡回赛(Monster 4X4: World Circuit)和其他的UBI发行的Wii游戏。
消息来源http://www.gamasutra.com/php-bin/news_index.php?story=10818

XBox 360 秋季Dashboard界面预览


这是首次泄露的XBox 360 秋季Dashboard界面更新,其中引人注目的就是新增加的XNA Lanch pad,通过这里就可以玩到那些游戏爱好者自己开发的游戏了。新的白色的 Xbox Live arcade LOGO取代了原来的LOGO。全新的界面将和一些新的特征和游戏在今年11月正式发布。
消息来源http://www.maxconsole.net/?mode=news&newsid=9846

星期三, 五月 23, 2007

XNA也可以使用C++

XNA除了可以用M$说的VC#EE开发,还可以用C++,以及一切CLR语言(VB,Iron Python等等)来开发。
我之前只有猜想应该是可以这样,现在已经看到老外朋友可以做到了,他的文章在http://mawsoft.com/blog/?p=31
源码下载地址http://mawsoft.com/blog/XNATest.zip
在运行代码前你需要安装了VS2005和XNA Game Studio Express beta。那些不想用vc#ee开发的朋友,在装好XNA Game Studio Express beta后就可以卸载VC#EE了,只是在建立工程时需要手动添加对XNA的引用,当然,你也可以自己建立一个工程模版,那样就和用VC#EE无异了。不过安装XNA时还是需要先安装好VC#EE:(

XNA GSE入门(三) 2d图像基本特效

XNA GSE入门(一) 显示图片一文中只是简单的把图片显示出来了,现在,我们在那个程序的基础上添加一些新的功能1. 添加透明效果
你需要先准备一张带alpha通道的图片,jpg是不支持透明色的,png图片可以支持,也比较小。(这里是我用的实验图片)
将编辑好的图片保存,并修改Construct函数里面载入图片的地方
ObjectTexture = Texture2D.FromFile(graphics.GraphicsDevice, “logo_head_transparency.png”);在draw函数里面做如下修改,设置绘制模式为alphablend
ObjectBatch.Begin(SpriteBlendMode.AlphaBlend); Vector2 pos = new Vector2(0, 0); ObjectBatch.Draw(ObjectTexture, pos, Color.White); ObjectBatch.End();这样图片中透明的部分将不会画出来了。

2. 半透明效果
在原先的绘制中,SpriteBatch的Draw函数第三个参数一直是设置成Color.White,就是让所有的颜色都绘制出来。其实Color出来包括RGB,还有一个A,就是Alpha值。如果我们设置Color的Alpha为0~1之间,就可以半透明的绘制图片了。
创建一个Color:
Color color = new Color(new Vector4(1.0f,1.0f,1.0f,0.5f));Color构造函数里面的向量的第4个参数就是Alpha值了,这里我们设成0.5,就是50%的透明,你也可以设置成其他的值。将绘制函数的第3个参数设置成我们的color
ObjectBatch.Draw(ObjectTexture, pos, color);就是半透明效果了



3. 反转图片颜色效果
ObjectBatch.Begin(SpriteBlendMode.InverseColor);这个就可以反转图片颜色了



这些是2d游戏里面常用的一些效果,SpriteBlendMode结构还有一个参数是Additive,也是一种特效,但是我怎么也试不出来如何使用,如果你知道请告诉我ledwinka@gmail.com


XNA GSE入门(二) 在三维世界中显示图片

上一篇文章中讲叙了如何在2d的世界中显示一张图片。我们知道XNA是支持3D的,这一篇和上一篇一样,显示一张图片,不过是在3D世界中。本文中需要牵涉一些基本的3D数学,比如世界矩阵,视矩阵,投影矩阵,纹理坐标,HLSL等等,如果不明白这些概念的读者,请先补充以下相关知识。接着我们进入正题。
建立一个工程,取名DisplayPicture3D,并保存工程。(方法同上一篇,点击这里看上一篇)
在Game1类文件中添加如下代码
//texture and effect object纹理对象和shader对象 private Texture ObjectTexture; private static Effect effect; //view projection matrix and view point投影矩阵和视矩阵,以及视点坐标,世界矩阵在这个程序中不改变,所有没有定义了 public static Matrix Projection; public static Matrix View; private static Vector3 ViewPosition = new Vector3(0.0f, 1.8f, 5f); //record last mouse wheel state记录鼠标滚轮的位置,用来控制视点的移动 private static int mouseWheelValue = 0; //vertex array顶点数组,这个程序中没有用复杂的模型,所以直接将顶点数据写在程序中了 VertexPositionTexture[] nonIndexedCube; 这些就是我们建立3D世界需要的元素的了
和上一个例子一样,我们用Construct函数初始化我们的资源
protected virtual void Construct() { IGraphicsDeviceService graphicsService = (IGraphicsDeviceService)this.GameServices.GetService(typeof(IGraphicsDeviceService)); //Inital textures, 从文件中创建纹理 ObjectTexture = Texture.FromFile(graphics.GraphicsDevice, “logo_head.png”);//从DisplayPicture3d.fx文件中创建效果对象 CompiledEffect compiledEffect = Effect.CompileEffectFromFile(”DisplayPicture3d.fx”, null, null, CompilerOptions.None, TargetPlatform.Windows); effect = new Effect(graphicsService.GraphicsDevice, compiledEffect.GetShaderCode(), CompilerOptions.None, null); //init vertex,初始化顶点 nonIndexedCube = new VertexPositionTexture[6]; Vector3 topLeft = new Vector3(-1.0f, 1.0f, 1.0f); Vector3 bottomLeft = new Vector3(-1.0f, -1.0f, 1.0f); Vector3 topRight = new Vector3(1.0f, 1.0f, 1.0f); Vector3 bottomRight = new Vector3(1.0f, -1.0f, 1.0f); Vector2 topLeftT = new Vector2(0.0f, 0.0f); Vector2 bottomLeftT = new Vector2(0.0f, 1.0f); Vector2 topRightT = new Vector2(1.0f, 0.0f); Vector2 bottomRightT = new Vector2(1.0f, 1.0f); nonIndexedCube[0] = new VertexPositionTexture(topLeft, topLeftT); nonIndexedCube[1] = new VertexPositionTexture(bottomLeft, bottomLeftT); nonIndexedCube[2] = new VertexPositionTexture(topRight, topRightT); nonIndexedCube[3] = new VertexPositionTexture(topRight, topRightT); nonIndexedCube[4] = new VertexPositionTexture(bottomLeft, bottomLeftT); nonIndexedCube[5] = new VertexPositionTexture(bottomRight, bottomRightT); //compute Porjection matrix and apply texture,计算投影矩阵,设定纹理对象 Projection = Matrix.CreatePerspectiveFieldOfView((float)Math.PI / 2.0f, (float)Window.ClientWidth / (float)Window.ClientHeight, 0.1f, 1000.0f); effect.Parameters[”UserTexture”].SetValue(ObjectTexture); }添加Construct函数后,在Game1()中调用它public Game1() { InitializeComponent(); Construct(); }
在Update函数中添加如下代码
protected override void Update() { …… //move camera according wheel state,根据鼠标滚轮位置移动摄像机 MouseState currentMouseState = Mouse.GetState(); int mouseoffset = mouseWheelValue - currentMouseState.ScrollWheelValue; mouseWheelValue = currentMouseState.ScrollWheelValue; if (mouseoffset != 0) { ViewPosition.Z += (float)mouseoffset / 5000; } …… }
在Draw函数中添加如下代码
protected override void Draw() { …… //设置顶点格式和消隐模式 using (VertexDeclaration decl = new VertexDeclaration(graphics.GraphicsDevice, VertexPositionTexture.VertexElements)) graphics.GraphicsDevice.VertexDeclaration = decl; graphics.GraphicsDevice.RenderState.CullMode = CullMode.CullClockwiseFace; //update camera position更新视矩阵,重新计算转换矩阵,并通过effect设置它 View = Matrix.CreateLookAt(ViewPosition, Vector3.Zero, Vector3.Up); Matrix matrix = View * Projection; effect.Parameters[”WorldViewProj”].SetValue(matrix); //开始应用效果 effect.Begin(EffectStateOptions.Default); effect.Techniques[0].Passes[0].Begin(); //绘制三角型 graphics.GraphicsDevice.DrawUserPrimitives (PrimitiveType.TriangleList, 2, nonIndexedCube); effect.Techniques[0].Passes[0].End(); effect.End(); …… }
和上一篇一样,添加logo_head.png到工程中来
新建一个DisplayPicture3D.fx文件,并添加到工程中,这个文件将用HLSL语言将纹理应用到我们的顶点模型上来。Fx文件的内容如下
uniform extern float4×4 WorldViewProj : WORLDVIEWPROJECTION;uniform extern texture UserTexture;struct VS_OUTPUT{ float4 position : POSITION; float4 textureCoordinate : TEXCOORD0;};sampler textureSampler = sampler_state{ Texture = ; mipfilter = LINEAR;}; VS_OUTPUT VS( float4 Position : POSITION, float4 TextureCoordinate : TEXCOORD0 ){ VS_OUTPUT Out = (VS_OUTPUT)0; //转换顶点 Out.position = mul(Position, WorldViewProj); Out.textureCoordinate = TextureCoordinate; return Out;}float4 PS(float2 textureCoordinate : TEXCOORD0) : COLOR{ //将纹理应用于顶点 return tex2D(textureSampler, textureCoordinate).rgba;}technique TransformAndTexture{ pass P0 { vertexShader = compile vs_1_1 VS(); pixelShader = compile ps_1_1 PS(); } }
Ctrl+F5,就可以看到运行效果了,用鼠标滚轮控制图片的远近 ,




欢迎与我交流分享ledwinka@gmail.com

XNA GSE入门(一) 显示图片






一 最简单的图片显示
在Visual C# 2005 Express Edition(以下简称VCSEE)里新建一个XNA工程,取名DisplayPicture
点击ok,生成一个xna的工程。在菜单中选择View->Class View,打开类视图,双击Game1类
在打开的Game1.cs文件中添加下列语句(红色部分为添加的)
partial class Game1 : Microsoft.Xna.Framework.Game { //the sprite to be displayed private SpriteBatch ObjectBatch; private Texture2D ObjectTexture;为Game1添加一个新的成员变量ObjectBatch,(用来显示精灵对象),一个纹理对象ObjectTexture
添加一个新函数Construct(),用来初始化精灵对象和纹理对象,
protected virtual void Construct() { //Inital textures, SpriteBatch here. ObjectBatch = new SpriteBatch(graphics.GraphicsDevice); ObjectTexture = Texture2D.FromFile(graphics.GraphicsDevice, ” logo_head.png”); }并在Game1()函数里面调用Construct函数。public Game1() { InitializeComponent(); Construct();
}

在Draw函数中DrawComponents();语句的后面添加如下代码,绘制我们的图片
ObjectBatch.Begin(); Vector2 pos = new Vector2(0, 0); ObjectBatch.Draw(ObjectTexture, pos, Color.White); ObjectBatch.End();选择File->Save All将整个工程保存。然后将logo_head.png文件(也可以是任意其他图片文件,只要是和Construct函数里面写的文件同一个名字就可以)拷到工程所在目录。选择Project->Add Exist Item,将这个文件添加到工程,并修改文件的Copy to Output Directory属性为Copy if newer。按Ctrl+F5,就可以看到我们的程序效果啦。


星期五, 五月 11, 2007

EA预计Madden NFL 将打破销售记录

EA宣布八月22号发布的《Madden NFL 07》已经销售了大约二百万份,是这款游戏的新的销售记录。
这款游戏目前在Xbox 360, Xbox, PlayStation 2, GameCube, PC, Nintendo DS and PSP,都可以玩到,Wii和PS3的版本也将在今天这2个平台发布是放出

WowMapViewer的sourceforge点被关掉了

今天在linghuye’s blog 上看到了wowmapviewer已经被关掉了,不免感到惋惜,在那个项目开始没有多久我就关注了。这是继blizzardhack网站后又一家被关闭的网站了。linghuye的blog上说最新的版本是0.47,我记得好像我硬盘上有0.5的,不过linghuye blog里面的wowmapviewer的wiki是很有用的。

XNA GSE beta中的载入3D模型

今天我在查看XNA GSE beta文档是发现最开始的FAQ有这样一段话

How do I import complex 3D objects into my XNA Game?

The XNA Framework will provide a content pipeline to make it easy to get rich content (3D, 2D, sound, etc.) from content creation sources into a game. The XNA Framework Content Pipeline is a large feature; in an effort to make sure we provide a usable end-to-end experience, we have decided to hold back this feature from the beta release.

顿时觉得有不详预感,作为XNA大势鼓吹的Content Pipeline在我们现在手上的beta版本中还是hold back的。也就是说,XNA对于资源管理的很大一部分功能,我们现在还无法接触到,其中就包括3D模型的载入。我当时作一个最坏的猜测,基于directX的XNA,总应该可以载入XFile的吧。


在文档关于3d图形部分,我们看不到任何关于3D模型载入的部分,在API的文档里面,我也没有发现任何关于mesh管理的参考。

打开昨天编译的SpaceWar游戏,其中管理3D模型的类是工程里面的SimpleMesh,也就是说,这个并不属于XNA的一部分。到此,基本可以认为XNA根本还没有提供如何载入3D模型的方法。

我转到XNA GSE beta的官方论坛,里面有位老兄说到

Those are big words but it does mean nothing else than having to program all the mesh functionality and animated mesh functionality Managed Directx supported all by myself now?It confuses me a little because it was said that XNA takes away all that overhead programming stuff and gets you started writing your game without worrying about anything else.

So in the current version of the framework, is the only way to use “mesh” functionality to define a 3d file format (or use the already existing .x format for example) and then write an a tool that loads that data into a vertexbuffer and material- and texturelist which i then can use to render the whole thing?

原贴地址

http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=686368&SiteID=1

他也发现,除非自己写3D文件的载入方法,XNA是没有办法读取任何3D文件的,就是XFile也不行。晕倒……

为了验证他的说法和我的猜测是否正确,我又仔细查看了SpaceWar游戏里面的模型载入方法,果然,在SimpleMesh类里面有载入模型的代码

public static SimpleMesh Load(string fileName)
{
Stream stream = File.OpenRead(fileName);
BinaryReader reader = new BinaryReader(stream);
SimpleMesh mesh = new SimpleMesh();
// Version
Version meshVersion = new Version(reader.ReadString());
if (meshVersion != SimpleMesh.Version)
{
throw new InvalidOperationException(”Mesh ‘” + fileName + “‘ has version ” + meshVersion.ToString() + “. Expected version ” + SimpleMesh.Version.ToString() + “.”);
}
// Source File mesh.SourceFile = reader.ReadString();
// TriangleCount mesh.TriangleCount = reader.ReadInt32();
// VertexSizeInBytes mesh.VertexSizeInBytes = reader.ReadInt32();
……
}
在SpaceWar中用到的模型文件为*.swm。很明显就是Space War Mesh的缩写,具体的文件结构是这样的

数据类型
描叙

string
1.0.0.0v,文件的版本号

string
源文件地址,保存了转换成*.swm文件前的全文件名

int32
文件中三角形的数量

int32
顶点的大小,以字节记

int32
顶点数量

string
顶点格式

int32
顶点集合数量


顶点集合数据
(我自己分析的,可能有纰漏)
Space War这个例子就完全是自己定义的3D数据文件格式,如果需要给这个游戏添加新的模型,需要参考上面的文件格式,并做一个工具将3d建模软件生成的模型文件转为*.swm文件。Space War是不能直接使用XFile文件的,当然,如果你打算自己写XFile文件的分析器,另当别论。
基本上这次算是大家被ms忽悠一下,就凭我们现在手头的XNA,开发一个3d游戏,比我们直接用directX SDK开发更麻烦。不过2d游戏方面,还是值得参考一下的,下篇我将对2d部分做一下介绍。

IMGUI教程

新的IMGUI教程发布在http://iki.fi/sol/imgui/
IMGUI是一个非常适合实时运行程序的用户界面程序,非常容易使用

APOCALYX v 0.8.9 发布

APOCALYX 是一个基于Lua的3D引擎,在最新的v0.8.9版本中增强的3D硬件加速方面的控制能力,可以使用高级Shader语言
其他的新增功能包括
完全支持 GLSL,
内建人工智能算法 (寻路, FSM, 等等),
简单的 TTS引擎

APOCALYX官方网站Apocalyx Sourceforge site.

XNA GSE beta上手

一 首先安装XNA需要的环境,包括
  • DirectX SDK 点击这里下载

  • Visual C# Express Edition(必须是Express Editon,其他版本比如Team Suite,professional都不行)
    点击这里下载Visual C# Express Edition英文版
    如果你已经安装了vs2005的其他正式版本,也可以安装,他们可以共存,但测试版不行。我和中国 XNA 研发小组群中的琅轩已经做过小白鼠了,可以放心安装。
    如果已经安装vs2005,在安装过程中将不能改变安装路径,如图

  • 一块支持DirectX9.0c 和Shader Model 2.0的显卡,否则无法运行编译后的程序。

二 创建第一个xna程序

  • 打开VC#,在File菜单里选New Project,出现new Project对话框,选择Windows Game(XNA),点击OK。



  • Ctrl+F5,如果没有发生错误,第一个XNA程序就编译完成并运行出来了

一个蓝色背景的窗口,而且不能被缩放
三 编译XNA自带的范例spacewar
XNA Game Studio Express里面自带一个例子,你可以很容易编译这个游戏


  • 打开VC#,在File菜单里选New Project,出现new Project对话框,选择Space War Starter Kit,点击OK。


  • Ctrl+F5,即可以看到游戏的标题画面



这个时候的游戏还不能控制,除非你有xbox 360的手柄。我们需要修改一下才可以用键盘来操作

  • 双击打开GamePadHelper.cs这个文件
将文件头的
// #define USE_KEYBOARD
改为
#define USE_KEYBOARD
Ctrl+F5,这个时候就可以用键盘来控制游戏了,在开始画面按B键进入Retro的版本
按Home回到开始画面,再按A键进入Evolved的3d版本
按Home回到开始画面,按X键进入信息画面



Vista 将支持全面支持OpenGL的玻璃效果

gamedev消息来源
Khronos在最近的发布的一则报告上面表明,Vista将原生支持OpenGL API。通过安装用户驱动(ICD),OpenGL将可以得到完全的硬件加速,并且完全兼容Windows Vista的玻璃透明效果。Khronos还声称当Vista发布时,玻璃透明效果在OpenGL上的效果将会比Direct3D的更好。
此前的7月31号,Khronos宣布接管了OpenGL 规范的定制,相关链接http://www……_khronos_group/

Garage Games 展示基于XNA的Torque引擎

来自gamedev.net的消息,August 15, 2006 8:55:52 AM
2006年8月14号,GarageGames,业内领先的独立开发游戏引擎提供商,宣布发布Torque X引擎.包括新一代的Torque游戏引擎和基于XNA游戏开发平台的工具.这次发布和微软的公告表明XNA Game Studio Express将在这个暑期正式可用.
XNA Game Studio Express 可以让用户通过managed c#开发游戏,并且同时可以在windows PC和零售的Xbox360游戏机上运行.GarageGames的Torque 游戏开发包工具被很多商业化的游戏工作室,独立开发者和游戏爱好者使用,在全球100多所大学和学校里面的游戏开发课程中都有用到.Torque X室GarageGames Torque技术到C#的移植,可以运行在XNA平台上.Torque X是一个全功能的2d,3d游戏引擎,支持Torque游戏构建器里使用的直观的编辑器,还有曾获奖的Torque引擎的shader发生系统,对美术人员非常友好.
在西雅图今天微软主持的Gamefest的展示上面,GarageGames总裁Mark Frohnmayer展示了Torque开发包,展示了Xbox 360 Live上的街街大作Marble Blast Ultra,运行在XNA平台上.”今天,微软公司跨出了革命性的一步,让游戏爱好者和学生们都可以创作新一代游戏机上面的游戏”Frohnmayer先生说”让XNA Game Studio Express和我们的工具连接起来,为每个有创新和动力的人提供快速和容易的解决方案,让他们可以为Windows和Xbox360开发游戏,没有什么可以比这更让人高兴的了”