我在显示要正确加载纹理接缝的精灵时遇到问题(至少即使删除
if
条件,我也没有收到任何错误消息),但是当我显示它时,我看到的都是正方形的颜色Color
参数,而纹理卡在左上角,仅当方块悬停在其上时才可见。
PNG 纹理已使用 Content.mgcb 正确复制到 Content 文件夹中。
public class Entity
{
public Vector2 Position { get; set; }
public Vector2 Diameters { get; set; }
public float Angle { get; set; }
public Texture2D EntityTexture { get; set; }
public int EntityLayer { get; set; }
public Entity(Vector2 position, Vector2 diameters, float angle, string spriteName, int entityTexture)
{
Position = position;
Diameters = diameters;
Angle = angle;
EntityTexture = Holder.content.Load<Texture2D>(spriteName);
EntityLayer = entityTexture;
}
public void DrawEntity()
{
if(EntityTexture != null)
{
Holder.spriteBatch.Draw(EntityTexture, Position, new Rectangle((int)(Position.X), (int)(Position.Y), (int)(Diameters.X), (int)(Diameters.Y)),
Color.White, Angle, new Vector2(EntityTexture.Bounds.Width/2, EntityTexture.Bounds.Height/2), Holder.scale, SpriteEffects.None, EntityLayer);
}
}
}
LoadContent()
主课:
Holder.content = this.Content;
Holder.spriteBatch = new SpriteBatch(GraphicsDevice);
_player = new Player(new Vector2(300, 300), new Vector2(64, 64), 0.0f, "player", 1);
主类中Draw(GameTime gameTime)
内的spriteBatch处理:
Holder.spriteBatch.Begin();
_player.DrawEntity();
Holder.spriteBatch.End();
base.Draw(gameTime);
Holder.spriteBatch
和Holder.content
都在里面class Holder
:
namespace SpaceInvaderPlusPlus
{
class Holder
{
public static SpriteBatch spriteBatch;
public static ContentManager content;
public static float scale = 1.0f;
}
}
我尝试给
Holder.spriteBatch.Begin()
参数SpriteSortMode.Deferred, BlendState.AlphaBlend
,将SpriteEffects.None
更改为new SpriteEffects()
以及给纹理图像透明背景并更改Color.White
->Color.Transparent
,但它所做的只是改变渲染的正方形颜色透明
我认为问题源于 Draw() 的使用方式(在实体类中):
public void Draw(Texture2D texture, Vector2 position, Rectangle? sourceRectangle, Color color, float rotation, Vector2 origin, float scale, SpriteEffects effects, float layerDepth) {...}
这里,position 是指游戏世界中的位置(正如您所做的那样),但 sourceRectangle 的 X 和 Y 是指其源纹理内的精灵/图像/图形位置(如果只有一个精灵/图像/图形)在纹理中,它可能是 0, 0)。相反,您再次使用 Entity.Position,这可能不是有意的。
sourceRectangle 的宽度和高度因此是其源纹理内的精灵/图像/图形的宽度和高度。
sourceRectangle 可以使用,例如与纹理图集(一个大纹理中的多个精灵)或精灵表(精灵动画的帧全部在一个大纹理中)相结合
让我知道这是否有帮助!