Questions tagged «xna»

XNA是Microsoft的一种游戏框架,允许部署Windows,Windows Phone和Xbox 360。

2
如何在XNA 4.0中正确设置Alpha透明度?
好的,我已经阅读了几篇文章,教程以及与此有关的问题。大多数人都指向不能解决我的问题的相同技术。我需要能够创建半透明的精灵(确实是texture2D)并使其覆盖另一个精灵。 我可以通过找到的代码示例来实现这一点,但是我对结果不满意,而且我知道有办法做到这一点。在移动编程(BREW)中,我们采用老式方法,并在渲染之前实际检查了每个像素的透明度。 在这种情况下,似乎将其下方的精灵与其上方的alpha混合在一起。这可能是我如何渲染纹理的产物,但是,正如我之前说的,所有示例都指向这一技术。在继续之前,我将继续粘贴示例代码。 public void Draw(SpriteBatch batch, Camera camera, float alpha) { int tileMapWidth = Width; int tileMapHeight = Height; batch.Begin(SpriteSortMode.Texture, BlendState.AlphaBlend, SamplerState.PointWrap, DepthStencilState.Default, RasterizerState.CullNone, null, camera.TransformMatrix); for (int x = 0; x < tileMapWidth; x++) { for (int y = 0; y < tileMapHeight; y++) { int tileIndex = …
14 xna  2d  c#  rendering  transparency 

4
更快的2D碰撞检测
最近,我一直在研究快节奏的2D射击游戏,但遇到了一个大问题。碰撞检测。当然可以,但是速度很慢。我的目标是:屏幕上有很多敌人,并且让他们彼此不接触。所有的敌人都在追逐玩家实体。他们中大多数人或多或少都拥有相同的速度,所以迟早他们都在追逐玩家时占据了相同的空间。这确实降低了娱乐性,因为对于玩家而言,似乎您只被一个敌人追赶。为了防止它们占据相同的空间,我添加了一个碰撞检测(一种非常基本的2D检测,这是我所知道的唯一方法)。 Enemy class update method Loop through all enemies (continue; if the loop points at this object) If enemy object intersects with this object Push enemy object away from this enemy object 这很好。只要我只有<200个敌方实体。当我靠近300-350个敌方实体时,我的帧频开始大幅下降。首先,我认为渲染效果很差,因此我取消了他们的平局。这一点都没有帮助,所以我当然意识到这是更新方法。它们更新方法中唯一重要的部分是每个敌人循环通过每个敌人的部分。当我接近300个敌人时,游戏会执行90000(300x300)步发信号。我的我的〜 我确信必须有另一种方法来解决这种冲突检测。虽然我不知道如何。我发现的页面涉及如何实际执行两个对象之间的碰撞或如何检查对象与图块之间的碰撞。我已经知道这两件事。 tl; dr?如何在实体的LOTS之间进行冲突检测? 快速编辑:如果有任何帮助,我正在使用C#XNA。

1
平滑体素地形
作为个人项目,我正在尝试制作一个地形生成器,以创建看起来像《城堡物语》平滑地形的地形。 如果您以前没有看过,请在这里: 如您所见,它是块和“平滑”块的组合。 我试图模仿这种外观的方法是为每个表面块提供一个迷你高度图。通常这是可行的,但存在一些问题,产生如下所示的地形: 问题是每个块都是1x1x1,但是有时特定位置的高度为负或>1。在这种情况下,我将其裁剪并将高度设置为0或1。 为了更好地说明我的意思,下面是一个图: 为了生成高度,我基本上做了: genColumn(int x, int z) { int highestBlockY = (int)noise2d(x, z); bool is_surface = true; for(int y = max_height - 1; y >= 0; y--) { Block b; if(is_surface) { b = Block.Grass; b.HasHeightMap = true; // generate heightmap for(int ix = 0; ix …

2
在XNA中设置效果参数的最佳做法
我想问一下是否有Effect在XNA中设置参数的最佳实践。换句话说,当我打电话时到底发生了什么pass.Apply()。我可以想象多种情况: 每次Apply调用时,所有效果参数都会传送到GPU,因此我对参数的设置频率没有真正的影响。 每次Apply调用时,仅传输已重置的参数。因此,应避免缓存实际上未设置新值的Set-operations。 每次Apply调用时,仅传送更改的参数。因此,缓存Set-operations是没有用的。 这整个问题是没有根源的,因为没有一种提及的方式会对游戏性能产生任何显着影响。 因此,最后一个问题是:实现set操作的某些缓存是否有用,例如: private Matrix _world; public Matrix World { get{ return _world; } set { if (value == world) return; _effect.Parameters["xWorld"].SetValue(value); _world = value; } } 感谢你在期待。
13 xna  directx  effect 

3
偏向保守的随机游走
我有一个精灵,它具有Velocity和Position,它们存储为Vector2。在每个Update循环中,将速度加到该位置。 我想给精灵一个第三向量Target。可以在任何迭代中给出新的目标。我希望子画面本质上以随机行走模式移动,但是必须公开两个参数: 典型的随机游走同样有可能增加或减少到任何给定距离Target(加上切向运动的机会很小)。我必须能够偏向我的随机游走,以便尽管仍然是随机的,但子画面“决定”的方向应该更可能使其接近Target。 随机游走应该是“平稳的”-子画面不应迅速改变方向,因为对玩家而言,这看起来像是“忽悠”或“颤抖”。它应该以这种方式逐渐转向,随机移动,而平均时则逐渐靠近。 有什么好的简单方法呢?如果可能,给出答案作为Vector2 RandomWalk(Vector2 target)方法。 我已经有一个NextGaussian(mean, stdev)可用的方法,如果有帮助的话。


4
如何在Minecraft风格的游戏中实现具有遮挡的基于体素的照明?
我正在使用C#和XNA。我当前的照明算法是一种递归方法。但是,这样做很昂贵,以至于每5秒计算一个8x128x8块。 还有其他照明方法会产生可变暗度阴影吗? 还是递归方法好,也许我只是做错了? 似乎递归的东西从根本上来说是昂贵的(每个块被迫遍历约25k块)。我当时正在考虑使用一种类似于光线跟踪的方法,但是我不知道这将如何工作。我尝试的另一件事是将光源存储在一个列表中,并为每个块获取到每个光源的距离,并使用该光源将其照亮到正确的水平,但随后照明将穿过墙壁。 我当前的递归代码如下。在清除并重新添加阳光和手电筒之后,从不具有零光照水平的块中的任何位置调用此方法。 world.get___at是一个可以在该块之外获取块的函数(该块位于块类内部)。Location是我自己的结构,类似于Vector3,但是使用整数而不是浮点值。light[,,]是该块的光照图。 private void recursiveLight(int x, int y, int z, byte lightLevel) { Location loc = new Location(x + chunkx * 8, y, z + chunky * 8); if (world.getBlockAt(loc).BlockData.isSolid) return; lightLevel--; if (world.getLightAt(loc) >= lightLevel || lightLevel <= 0) return; if (y < 0 || …


3
如何在不使用外部库的情况下在XNA中获得精美的小文本?
在XNA中,spritefont技术太可怕了。Nuclex的工作做得好得多,但我不想有任何外部参考,我的游戏几乎完成了。 当使用Sansation或Quicksand等字体时,较小的字体看起来很糟糕。太糟糕了! 是否有已知的解决方法?我尝试将fontsize设置为极高,然后在spritebatch中按比例缩小它们,但是没有运气。
13 xna  fonts 

3
为什么XNA不被视为游戏引擎?
我只是想知道XNA缺少什么,可以将其视为游戏引擎。它完成了游戏引擎应做的所有事情(物理部分除外);它还支持有关游戏引擎的Wikipedia文章中定义的各个方面。 为什么XNA不被视为游戏引擎?
13 xna 

6
如何在XNA中处理鼠标输入?
我正在XNA中开发纸牌游戏。 OnClickXNA中是否有对象事件? 我试图让玩家点击卡时移动它们。在这个项目中,有一个Sprite类可以绘制卡片,但是我有点不知所措,因为我不知道如何使用OnClick事件或类似的东西。
13 xna  c#  input  mouse 

1
当游戏没有焦点时,XNA捕获鼠标点击
如果我按Alt键并在游戏窗口之外进行操作,则游戏仍会捕获鼠标单击(左键单击和右键单击)。 游戏不会“消耗”点击,因为它们也会发送到具有焦点的应用程序中。 但是每次您在Internet浏览器中单击时听到枪声都是很烦的... 此外,即使将游戏设置为全屏,也会出现问题。
13 xna 

2
播放歌曲,导致WP7在手机上崩溃,但在模拟器上不崩溃
我正在尝试在开始播放的游戏中实现歌曲,并通过XNA 4.0在Windows Phone 7上不断循环播放。在模拟器上,这可以正常工作,但是当部署到手机上时,它只是在返回主屏幕之前仅显示黑屏。这是有问题的恶意代码,将其注释掉可使该应用在手机上正常运行: // in the constructor fields private Song song; // in the LoadContent() method song = Content.Load<Song>("song"); // in the Update() method if (MediaPlayer.GameHasControl && MediaPlayer.State != MediaState.Playing) { MediaPlayer.Play(song); } 歌曲文件本身是2:53长的2.28mb .wma文件,比特率为106kbps。 再次,这在模拟器上完美运行,但根本不在手机上运行。感谢您的任何帮助,您可以提供!

1
仅在XNA中分配某些资源?
XNA 4.0中的ContentManager只有一个Unload()方法可以卸载所有资产。 我想拥有一些始终被加载的“全局”资产,但是随后我希望在更改级别时应该卸载的每级资产。 我是否应该创建第二个ContentManager实例作为Level.cs类的一部分?还是我应该使用Game.Content然后调用.Dispose在加载的资产上?还是我应该在这里概述的ReadAsset函数之上创建自己的ContentManager ?
13 xna  xna-4.0 

1
单元测试C#/ XNA游戏项目
自从开始编程以来,我就一直从事游戏开发,但是从来没有非常认真过。我以业务应用程序开发人员的身份工作,但我在业余时间从事一些游戏的开发。 在商业世界中(在Microsft Web开发堆栈上),ASP.NET MVC变得非常流行,因为它易于对界面的工作方式进行单元测试。 我想知道一种设计模式(MVC,MVP,MVVM等)可以用来编写一款游戏,其中所有游戏逻辑都可以轻松进行单元测试。这可能或可行吗?我是在浪费时间吗,进行完整构建然后运行“集成”类型测试而不是单元测试会更好吗? 示例代码会很棒,但是写起来也很有用。 (我尝试添加一个单元测试标签,但没有必要的代表...)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.