我刚刚回到游戏开发阶段,我对XNA印象非常深刻.我唯一的问题是我想要一个基于免费社区的2D游戏引擎,以便我可以利用社区的力量.有没有人知道目前正在支持的XNA 2d游戏引擎还是我必须自己编写一个?
我不知道这是一个奇怪的问题,但我怎么能在iPhone/iTouch上运行用XNA制作的游戏?应该使用哪些步骤/工具(现有的或想象的......)?
注意:目标是避免修改现有的C#代码
更新:
如果我理解正确,我必须能够:
1)在Mono上运行我的XNA代码(monoxna或SilverSprite,承诺?)
2)在iPhone上运行Mono(MonoTouch)
Windows游戏库和类库之间有什么区别?是否只是通过包含XNA框架开始?
此外,Windows/Xbox360/Zune游戏库之间的差异在哪里?他们似乎都从相同的参考文献(Microsoft.Xna.Framework,Microsoft.Xna.Framework.Game)开始.
我计划发布一个开源(MIT).NET库,但也包括DLL,以方便人们使他们不必自己编译所有内容.
我的库在它引用的类型中非常简单,唯一真正的依赖似乎是.NET 3.0或更高版本(因为它指的是Func<T>等等).
我希望我的库可以被多个目标使用,包括.NET 4.0服务器,.NET 3.5服务器,Windows Phone 7 Silverlight,普通Silverlight,XNA(电话),XNA(Windows)和XNA(XBox 360).
我确保不使用我所针对的平台上没有的任何类型,例如HashSet<T>在Windows Phone 7上不可用,所以我没有使用它.
我是否需要为这些目标制作不同的项目,因此需要多个DLL,或者是否有某种方法可以为它们生成一个共同的DLL?
我已经开发了一段时间在XNA中称为"体素"的小游戏.一个.NET C#像Minecraft游戏.我使用一个简单的概念来保存和读取我的游戏中的数据来构建世界地图.一切都存储在xml文件中.
现在我正在尝试加载更大的地图,并且在生成地图期间会出现'paf'异常:
[ 系统内存不足异常 ]
我不明白为什么,因为在异常被提出后我的文件不是很重,它大约是70 MB.在生成高达70 mb的XML文件期间看到异常引发是否正常?

private XmlTextWriter myXmlTextWriter ;
#region prepareNewWorldXmlFIle
private void PreparedNewWorldXmlFile()
{
Stream fs = new FileStream(currentPath + "World\\world.xml", FileMode.Create);
myXmlTextWriter = new XmlTextWriter(fs,Encoding.ASCII);
myXmlTextWriter.Formatting = Formatting.Indented;
myXmlTextWriter.WriteStartDocument(false);
myXmlTextWriter.WriteComment("World Map ID:");
//World and his attribute
myXmlTextWriter.WriteStartElement("World");
myXmlTextWriter.WriteStartElement("Matrix", null);
myXmlTextWriter.WriteStartElement("Regions");
}
#endregion
Run Code Online (Sandbox Code Playgroud)
//Octree calcul and generate map to xml file
foreach (Region …Run Code Online (Sandbox Code Playgroud) 我在这里没有看到这个问题的答案,这让我害怕它非常简单而且我只是遗漏了一些东西,但是这里有.
背景,随意跳过:几年前我跳过了我的学士学位需要一门课程.理论上它是计算机图形学,但自从我离开它以后,它变得更加游戏开发.这很好,因为对我而言,它比填充算法和翻译更有趣,以及它曾经是什么.这是一个每隔一年才提供的第四年课程,但我已经成功地与该部门进行了交谈,让我对同一主题进行了第四年的独立研究并称之为足够好.
"运行"独立研究的教授没有教授实际的计算机图形学课程,所以虽然他是一个聪明的家伙,但这不是他的领域.所以我的大部分问题留给我,一本教科书和互联网.你知道......就像一个独立的研究应该.:)
/背景
我有一个喜欢开发游戏系统以获得乐趣的伙伴.我计划参加他的一款桌面游戏并将其变成使用XNA的电脑游戏.
我没有预见到游戏机制会遇到任何难以克服的挑战,但我很好奇的是大多数游戏如何保存他们的内容?我的意思是在几个方面,希望我可以清楚地表达它们.
以您曾经玩过的任何RPG为例.您可以点击"保存"按钮并保存世界,您的角色信息以及其他必要信息.然后,您可以点击"加载"按钮并将其恢复.
或者是全国人大对话的情况.当我碰到Merchant#853时,他随机吐出3个不同的问候之一.
还有其他我能想到的,但它们实际上只是同一主题的变体.即使有这两个例子,在我看来也可以使用相同的机制,但那个机制是什么?
我已经做了多年的网络开发,所以我的脑海里会自动跳到"数据库!".数据库是解决任何问题的方法.我可以看到它在这里如何工作,但开销似乎很陡峭."这是我的6mb编译游戏......哦和68mb MySQL安装." 或者甚至更糟,因为我正在使用XNA,也许我需要找到一种捆绑SQL Server的方法.:)
我想也许是XML,但这对我来说也不合适.如果我想在XBox上运行它会如何工作?还是Zune?(这些对于我正在做的事情来说不是必需的,但必须有一个解决方案,将其考虑在内.)
谁知道秘密?或者还有一些想法?
谢谢Jeff
我写了一个组件来显示当前的FPS.
其中最重要的部分是:
public override void Update(GameTime gameTime)
{
elapseTime += (float)gameTime.ElapsedRealTime.TotalSeconds;
frameCounter++;
if (elapseTime > 1)
{
FPS = frameCounter;
frameCounter = 0;
elapseTime = 0;
}
base.Update(gameTime);
}
public override void Draw(GameTime gameTime)
{
spriteBatch.Begin();
spriteBatch.DrawString(font, "FPS " + ((int)FPS).ToString(), position, color, 0, origin, scale, SpriteEffects.None, 0);
spriteBatch.End();
base.Draw(gameTime);
}
Run Code Online (Sandbox Code Playgroud)
在大多数情况下它工作正常,但最近我遇到了问题.
当我把下面的代码放入游戏的更新方法时,奇怪的事情开始发生.
if (threadPath == null || threadPath.ThreadState != ThreadState.Running)
{
ThreadStart ts = new ThreadStart(current.PathFinder.FindPaths);
threadPath = new Thread(ts);
threadPath.Priority = ThreadPriority.Highest;
threadPath.Start();
}
Run Code Online (Sandbox Code Playgroud)
这段代码的主要思想是始终在不同的线程中运行pathFinding算法.
奇怪的是,我的意思是有时FPS急剧下降,这是显而易见的,但显示FPS变化的频率超过每秒一次.如果我理解这段代码,FPS每秒钟的变化不会超过一次.
有人可以解释一下发生了什么吗?
编辑26.03.2010 …
我已经安装了.net 4.0以及XNA 4.0.前段时间我使用Microsoft.DirectX播放一些音乐,现在当我尝试重做工作时,我找不到参考.平台上的新更改是否修改或移动了引用中的某些内容?
此致,Alexandru Badescu
我知道XNA游戏没有VB.Net项目类型,但作为一个简单的测试,我将VB解决方案汇总在一起Microsoft.XNA.*.它有一个实现的类Microsoft.XNA.Framework.Game.然后在C#中Game1.cs,我只是删除了所有样板代码并将其修改为继承自我的VB类...
namespace MyGame {
public class Game1 : GameEngine.Engine {
}
}
Run Code Online (Sandbox Code Playgroud)
哪个继承......
Public Class Engine
Inherits Microsoft.Xna.Framework.Game
Protected Overrides Sub Update(GameTime As Microsoft.Xna.Framework.GameTime)
If GamePad.GetState(PlayerIndex.One).Buttons.Back = ButtonState.Pressed Then
Me.Exit()
End If
For Each Element In Elements
Element.Update(GameTime)
Next
MyBase.Update(GameTime)
End Sub
...
Run Code Online (Sandbox Code Playgroud)
这似乎工作,我已经能够加载内容,渲染模型,采取游戏手柄输入等...
所以我要问的是......由于VB.Net不支持某些高级功能,是否真的存在限制,或仅仅是没有项目模板/支持可用?
在编译为MSIL时,VB编译器是否缺少某些性能优化?
有没有一种简单的方法可以将文本对齐到右边和中心(而不是默认左边)?
xna ×10
c# ×5
.net ×4
2d ×1
alignment ×1
clr ×1
database ×1
directx ×1
drawstring ×1
frame-rate ×1
iphone ×1
silverlight ×1
text ×1