我开始学习C#和XNA,我想显示一个动画精灵(由我的键盘移动).
我有这个精灵文件:

要仅显示我需要的部分,我使用以下代码:
Rectangle cuttedSprite = new Rectangle(
this.W * (int)this.mCurSprite.X,
this.H * (int)this.mCurSprite.Y,
this.W,
this.H
);
spriteBatch.Draw(this.mSpriteTexture, this.mPosition, cuttedSprite, Color.White);
Run Code Online (Sandbox Code Playgroud)
但我的问题是移动后渲染的图像模糊:

我试图通过改变来解决这个问题SamplerStates,但没有改变.有没有人有想法帮助我?
我正在尝试为我的3D游戏创建一个场景图,其中每个对象的转换都是相对于它的父级.图的每个节点都有一个旋转,缩放和平移向量.
将相对变换矩阵组合起来以获得对象的绝对变换的正确方法是什么?如果你能解释一下你的解决方案,我会很高兴的.
这是一个做错的例子:
这实际上是解决方案:
Matrix GetAbsoluteTransformation()
{
if (!this.IsRoot())
{
return this.Transformation * this.Parent.GetAbsoluteTransformation();
}
else
{
return this.Transformation;
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,当父节点被旋转,缩放或移动时,子节点被转换相同的量,这是正确的行为!
但是孩子只会围绕自己的起源旋转,而不会围绕父母的起源移动.
应用:
有一个四轮车模型.车轮相对定位在汽车原点周围.车轮可以像真正的车轮一样旋转.如果我现在旋转汽车,车轮应始终保持与之相连.在这种情况下,汽车是根,轮子是子节点.
另一个例子是太阳系的模型.行星围绕自己的轴旋转,围绕太阳移动,卫星围绕行星移动.
我面临着许多开发人员可能找到解决方案的问题.我有一个小项目,地板设计有小立方体(100X100).如果我超过这个限制,我的游戏遭遇重大减速和联赛!
这是我如何画地板的:
//Function to draw my ground ( 100 X 100 X 1)
public void DrawGround(GameTime gameTime)
{
// Copy any parent transforms.
Matrix[] transforms = new Matrix[this.model.Bones.Count];
this.model.CopyAbsoluteBoneTransformsTo(transforms);
//loop 1 cube high
for (int a = 0; a < 1; a++)
{
//loop 100 along cube
for (int b = 0; b < 100; b++)
{
//loop 100 cubic wide
for (int c = 0; c < 100; c++)
{
// Draw the model. A model can have multiple …Run Code Online (Sandbox Code Playgroud)