0

私は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);

    }
}

私が犯す一般的な間違いもある場合は、それらを指摘してください。私はまだ学んでいるので、できる限りすべてを良くしたいと思っています。前もって感謝します!

4

1 に答える 1

1

あなたの召し public void Update(GraphicsDevice graphics)

しかし、移動コードはpublic void Update()

私が提案するのは、これです。virtualキーワードとoverrideキーワードを使用します。

エンティティクラスでは、次のようになります。

 public virtual void Update(GraphicsDevice graphics) {

    }

そしてあなたのプレーヤークラスで

public override void Update(GraphicsDevice graphics) {
//ADD MOVEMENT CODE HERE
    }
于 2013-01-26T21:34:19.637 に答える