C# MonoGame 精灵颜色问题

问题描述 投票:0回答:1

我在显示要正确加载纹理接缝的精灵时遇到问题(至少即使删除

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
,但它所做的只是改变渲染的正方形颜色透明

c# draw monogame texture2d spritebatch
1个回答
0
投票

我认为问题源于 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 可以使用,例如与纹理图集(一个大纹理中的多个精灵)或精灵表(精灵动画的帧全部在一个大纹理中)相结合

让我知道这是否有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.