对象不更新/不在新位置绘图

时间:2013-01-26 21:17:03

标签: c# xna

我有3节课: - Game1(主要班级) - 实体(基础实体类) - 玩家(玩家类,扩展实体类)

我画了一个玩家类,但之后我似乎无法改变玩家对象的位置。

public class Game1 : Microsoft.Xna.Framework.Game
{
    GraphicsDeviceManager graphics;
    SpriteBatch spriteBatch;

    //Create a list with all the entities
    List<Entity> entityList = new List<Entity>();

    //Player
    Player player;

    public Game1()
    {
        graphics = new GraphicsDeviceManager(this);
        Content.RootDirectory = "Content";
    }

    protected override void Initialize()
    {
        // TODO: Add your initialization logic here

        base.Initialize();
    }

    protected override void LoadContent()
    {
        // Create a new SpriteBatch, which can be used to draw textures.
        spriteBatch = new SpriteBatch(GraphicsDevice);

        //Create player
        Texture2D playertexture = Content.Load<Texture2D>("player/player");
        Rectangle playerrectangle = new Rectangle(10, 10, playertexture.Width, playertexture.Height);

        player = new Player(playertexture, playerrectangle);

        entityList.Add(player);

    }

    protected override void UnloadContent()
    {
        // TODO: Unload any non ContentManager content here
    }

    protected override void Update(GameTime gameTime)
    {
        // Allows the game to exit
        if (Keyboard.GetState().IsKeyDown(Keys.Escape))
            this.Exit();

        //Update players and entities
        player.Update(graphics.GraphicsDevice);

        base.Update(gameTime);
    }


    protected override void Draw(GameTime gameTime)
    {
        GraphicsDevice.Clear(Color.CornflowerBlue);

        spriteBatch.Begin();

        //Draw player
        player.Draw(spriteBatch);

        spriteBatch.End();

        base.Draw(gameTime);
    }
}

class Entity
{

    //Standard variables
    int health;
    int armor;
    float speed;
    float friction;

    //Get graphic and bounding box
    Texture2D texture;
    Rectangle rectangle;

    public Entity(Texture2D newTexture, Rectangle newRectangle){

        texture = newTexture;
        rectangle = newRectangle;

    }

    public void Update(GraphicsDevice graphics) {



    }

    public void Draw(SpriteBatch spriteBatch) {


    }

    /*
     * Modifiers for the variables
     */
    public void modifyHealth(int amount) { health = health + amount; }
    public void modifyArmor(int amount){ armor = armor + amount; }
    public void modifySpeed(float amount) { speed = speed + amount; }

    /*
     * Getters for variables
     */
    public int getHealth() { return health;  }
    public int getArmor() { return armor; }
    public float getSpeed() { return speed; }
    public float getFriction() { return friction; }

    /*
     * Setters for variables
     */
    public void setHealth(int amount) { health = amount; }
    public void setArmor(int amount) { armor = amount; }
    public void setSpeed(float amount) { speed = amount; }
    public void setFriction(float amount) { friction = amount; }

    /*
     * Functions
     */
    public void damage(int damage) {

        /*
         * Calculate health
         * 
         * Armor takes half the damage, if possible
         */
        if (damage / 2 >= armor) {
            damage = damage / 2;
            armor -= damage;
        } else if (armor > 0) {
            damage -= armor;
            armor = 0;
        }

        health -= damage;

        if(health <= 0){
            health = 0;
            //TODO Death
        }
    }
}

class Player : Entity
{

    //Create player
    Entity player;

    //Position and velocity
    Vector2 position;
    Vector2 velocity;

    //Texture and rectangle
    Texture2D texture;
    Rectangle rectangle;

    public Player(Texture2D newtexture, Rectangle newrectangle) : base(newtexture, newrectangle) {

        texture = newtexture;
        rectangle = newrectangle;

        //Set basic variables
        this.setHealth(100);
        this.setArmor(0);
        this.setSpeed(10);
        this.setFriction(1);

    }

    public void Update() {

        //Movement
        if(Keyboard.GetState().IsKeyDown(Keys.Right)){
            rectangle.X += 1;
        }

        rectangle.Y += 4;


    }

    public void Draw(SpriteBatch spriteBatch) {

        spriteBatch.Draw(texture, rectangle, Color.White);

    }
}

如果我也犯了一般性的错误,请指出它们,我想尽我所能,尽我所能,我还在学习。提前谢谢!

1 个答案:

答案 0 :(得分:1)

您的来电public void Update(GraphicsDevice graphics)

但移动代码位于public void Update()

我建议您这样做,使用virtual and override关键字。

在您的实体类中,它应如下所示:

 public virtual void Update(GraphicsDevice graphics) {

    }

在你的播放器课程中

public override void Update(GraphicsDevice graphics) {
//ADD MOVEMENT CODE HERE
    }