You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法从Enemy列表中绘制出1个以上的敌人?

解决Enemy列表仅能绘制单个敌人的问题

看起来你遇到了列表中多个敌人只显示一个的典型问题,我来帮你排查几个最可能的原因和对应的修复方案:

1. 所有敌人的初始位置完全重叠

这是最常见的情况——你在循环创建Enemy实例时,没有为每个敌人设置不同的坐标,导致10个敌人都挤在同一个位置,视觉上只看到一个。

修复示例:

检查你的创建循环,确保利用循环变量i来区分每个敌人的位置:

List<Enemy> lista = new List<Enemy>();
for(int i = 0; i < 10; i++)
{
    // 给每个敌人设置不同的X坐标(比如横向间隔50像素)
    float enemyX = i * 50f;
    // Y坐标可以固定或也做区分
    float enemyY = 100f;
    lista.Add(new Enemy(texture, delay, elapsedTime, frameX, frameY, enemyX, enemyY, gravity, speedX, speedX2));
}

2. 绘制逻辑没有遍历整个Enemy列表

如果你的主类绘制代码没有遍历lista的所有元素,只绘制了第一个敌人,那自然只能看到一个。

正确的绘制循环:

在主类的Draw方法中,确保遍历列表里的每一个Enemy:

protected override void Draw(GameTime gameTime)
{
    GraphicsDevice.Clear(Color.CornflowerBlue);
    spriteBatch.Begin();
    
    // 遍历所有敌人并绘制
    foreach(var enemy in lista)
    {
        enemy.Draw(spriteBatch);
    }
    
    spriteBatch.End();
    base.Draw(gameTime);
}

3. Enemy类的sourceRect未正确实例化或共享

如果sourceRect是基类的静态字段,或者每个Enemy实例的sourceRect都指向同一个矩形对象,可能导致绘制时覆盖,但这种情况更多会导致动画异常,不过也可能影响显示。

检查Enemy类的sourceRect:

确保每个Enemy实例都有自己的sourceRect实例,比如在构造函数中初始化:

public class Enemy : YourBaseClass
{
    private Rectangle sourceRect;
    private Vector2 enemyPos;

    public Enemy(Texture2D texture, int delay, int elapsedTime, int frameX, int frameY, float X, float Y, float gravity, float speedX, float speedX2) 
        : base(texture, delay, elapsedTime, frameX, frameY, X, Y, gravity, speedX, speedX2) 
    {
        this.enemyPos = new Vector2(X,Y);
        // 初始化当前实例的sourceRect,根据frameX/frameY设置(需替换frameWidth/frameHeight为你的帧尺寸)
        sourceRect = new Rectangle(frameX * frameWidth, frameY * frameHeight, frameWidth, frameHeight);
    }

    public void Draw(SpriteBatch sp) 
    { 
        sp.Draw(texture, enemyPos, sourceRect, Color.Red); 
    }
}

先从第1、2点开始排查,这两个是最容易出现的问题,一般就能解决你的显示问题了。

内容的提问来源于stack exchange,提问作者Elie Jamous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:37:42