0

所以我在 XNA 中创建了一个小游戏,我正处于编写 AI 的阶段。我目前遇到的问题是我无法加载 redNinja(玩家角色)的 X 位置并让 blueNinja(AI)读取它并走向它。

每次我尝试通过 redNinja.Position.X 引用它时,它都会给我field is never assigned to, and will always have it's default value null.警告。

namespace Ninja_DM
{
class AI
{
    Texture2D blueNinja;
    Ninjas redNinja;
    float timer = 0f;
    float interval = 130f;
    int currentFrame = 0;
    int spriteSpeed = 2;
    int spriteWidth = 32;
    int spriteHeight = 28;
    public Rectangle sourceRect;
    Vector2 position_b;
    Vector2 origin;

    public Vector2 Position
    {
        get { return position_b; }
        set { position_b = value; }
    }

    public Vector2 Origin
    {
        get { return origin; }
        set { origin = value; }
    }

    public Texture2D Texture
    {
        get { return blueNinja; }
        set { blueNinja = value; }
    }

    public Rectangle SourceRect
    {
        get { return sourceRect; }
        set { sourceRect = value; }
    }

    public AI(Texture2D texture, int currentFrame, int spriteWidth, int spriteHeight)
    {
        this.blueNinja = texture;
        this.currentFrame = currentFrame;
        this.spriteWidth = spriteWidth;
        this.spriteHeight = spriteHeight;
    }

    public void AIMovement(GameTime gameTime)
    {
        sourceRect = new Rectangle(30 * currentFrame, 0, 30, 37);

        if (position_b.X > redNinja.Position.X)
        {
            AnimateLeftAI(gameTime);
            if (position_b.X < 20)
            {
                position_b.X += spriteSpeed;
            }
        }

        if (position_b.X < redNinja.Position.X)
        {
            AnimateRightAI(gameTime);
            if (position_b.X < 1100)
            {
                position_b.X += spriteSpeed;
            }
        }

    }

    public void AnimateLeftAI(GameTime gameTime)
    {

        timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;

        if (timer > interval)
        {
            currentFrame++;

            if (currentFrame > 4)
            {
                currentFrame = 3;
            }
            timer = 0f;
        }
    }

    public void AnimateRightAI(GameTime gameTime)
    {

        timer += (float)gameTime.ElapsedGameTime.TotalMilliseconds;

        if (timer > interval)
        {
            currentFrame++;

            if (currentFrame > 4)
            {
                currentFrame = 3;
            }
            timer = 0f;
        }
    }
}
}
4

1 回答 1

1

在调用 AIMovement() 时,您需要将玩家的忍者作为参数,如下所示:

public void AIMovement(GameTime gameTime, Ninjas playerNinja)
{
    sourceRect = new Rectangle(30 * currentFrame, 0, 30, 37);

    if (position_b.X > playerNinja.Position.X)
    {
        AnimateLeftAI(gameTime);
        if (position_b.X < 20)
        {
            position_b.X += spriteSpeed;
        }
    }

    if (position_b.X < playerNinja.Position.X)
    {
        AnimateRightAI(gameTime);
        if (position_b.X < 1100)
        {
            position_b.X += spriteSpeed;
        }
    }

}

请注意,您实际上不需要再声明一个已调用的字段变量redNinja,因为您将要测试的 Ninjas 作为方法的参数/参数引入。

于 2013-01-21T21:03:21.177 回答