2013-02-26 3 views
0

У меня проблема с источником Rectangle, и из-за этого моя текстура не отображается на экране. Когда я использую метод Draw с источником как null, текстура работает.Невозможно установить текстуру в конструкторе

Я понятия не имею, что в этом плохого.

Также, если я поместил это в конструктор: source=new Rectangle((int)position.x,(int)position.Y, texture.Width/frameas, texture.Height). Я получаю ошибку

«использовать новый ключевое слово, чтобы создать объект»

Там нет ошибки в моей Game1 точно, как я только загрузки текстур, обновления и рисовать там.

public class Player 
{ 
    public Texture2D texture; 
    public Vector2 position; 
    public int speed, width,frames, jump; 
    public float scale; 
    public Vector2 velocity; 
    public float gravity; 
    public bool hasJumped; 
    public Rectangle source; 



    public Player(int x, int y) 
    { 
     speed = 5; 
     position.X = x; 
     position.Y = y; 
     scale = 1.8f; 
     frames = 4; 
     source = new Rectangle(x,y, 30,30); 


    } 

    public void LoadContent(ContentManager Content) 
    { 
     texture = Content.Load<Texture2D>("player"); 
    } 
    public void Update(GameTime gameTime) 
    { 
     position += velocity; 
     KeyboardState keyState = Keyboard.GetState(); 
     if (keyState.IsKeyDown(Keys.D)) 
     { 
      velocity.X = 3f; 
     } 
     if (keyState.IsKeyDown(Keys.A)) 
     { 
      velocity.X = -3f; 
     } 
     if (keyState.IsKeyDown(Keys.Space) && hasJumped==false) 
     { 
      position.Y -= 10f; 
      velocity.Y = -5f; 
      hasJumped = true; 
     } 
     if (hasJumped == true) 
      velocity.Y += 0.15f; 
     else 
      velocity.Y = 0f; 
    } 
    public void Draw(SpriteBatch spriteBatch) 
    { 
     spriteBatch.Draw(texture, position, source, Color.White, 0f, Vector2.Zero, scale, SpriteEffects.None, 0f); 
    } 
} 
} 
+0

Не могли бы вы предоставить еще некоторые детали на ошибку, которую вы описали с 'new' ключевое слово в конструкторе? Также укажите размер текстуры игрока и результирующие прямоугольники источника, которые вы ожидаете (и то, что вы на самом деле получаете) в конструкторе проигрывателя. – user1306322

+0

source = new Rectangle ((int) position.x, (int) position.Y, (int) texture.Width/frameas, (int) texture.Height) –

+0

@JackGajanan, который можно найти в вопросе, и я спросил для ** немного подробнее ** на нем. – user1306322

ответ

1

Вы не можете ссылаться на texture в конструкторе, поскольку он еще не существует. Он не установлен на фактическое значение, пока вы не загрузите текстуру в LoadContent(), поэтому, когда вы пытаетесь использовать его для создания своего прямоугольника, он бросает NullReferenceException.

Создайте свой исходный прямоугольник после этой строки:

texture = Content.Load<Texture2D>("player"); 
+0

Вы правы в этом, но все же Он не показывает текстуру на экране. Допустим, мой размер текстуры (плитки) размером 100/50 имеет 2 кадра в нем, и я хочу отобразить первый. Я создал: Rectangle source = new Rectangle ((int) position.X, (int) position.Y, texture.Width/frames, texture.Height) (как в приведенном выше коде) и его не отображают текстуру на экране, который странный, потому что он должен работать – Cam3ll

+0

Какова ценность 'position'? Вы, кажется, используете его для обозначения двух разных вещей: положения спрайта на текстуре и позиции игрока на экране. –

+0

позиция = позиция игроков на экране .. позволяет сказать (100,100) – Cam3ll

Смежные вопросы