2013-04-15 2 views
0

Я изучаю XNA (и вообще C#), и, пытаясь написать собственный маленький прокруткой для обучения, я наткнулся на следующую проблему.Инициализация нестатического класса с помощью переменной texture2d

Уровень построен из плиток, и поскольку я не хочу передавать текстуру на плитку при каждом экземпляре (например, return new Tile(positionVector2, TEXTURE)), класс должен быть сконструирован с этой текстурой по умолчанию.

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

public Tile(Vector2 position) 
{ 
    this.texture = Platformer03.Texture; 
} 

где Platformer03 класс игры и текстуры свойство для загруженного мозаичного текстуры. Теперь, поскольку Platformer03 - это класс, а не экземпляр (его не статический), это явно не сработает, но я даже не могу найти экземпляр Platformer03 (его названный game1, но выходит за рамки).

Итак, я уверен, что я делаю все это неправильно, но как я могу заставить класс Tile использовать определенную текстуру 2d для каждого экземпляра?

Пожалуйста, будьте осторожны, хотя вы, вероятно, не можете представить себе более идиотский вопрос, я могу заверить вас, что в течение последних нескольких часов я искал googled и читал, как сумасшедший, чтобы понять это.

ответ

1

Если вы сделаете Texture переменным под Platformer03 в static переменные, то она будет доступна без экземпляра самого Platformer03 класса (при условии, что это не отмеченные частными или защищенный).

Если вы не можете найти класс Platformer03, возможно, вы не ищете правильное пространство имен?

+0

Эй, делая переменную texture2d и его свойство static работало, спасибо большое! Что касается класса Platformer03: я считаю класс, но не статичным. Поэтому я хотел бы найти экземпляр класса, называемый «игра». Основной метод The Program.cs' звучит следующим образом: 'используя (игра Platformer03 = новый Platformer03()) { game.Run(); } ' Теперь в соответствии с MSDN, используя« Определяет область, за пределами которой объект или объекты будут удалены ». Вот почему я не могу «увидеть» «игровой» экземпляр Platformer03 в других классах? (Пространство имен одинаково везде) Если да, могу ли я изменить использование? –

+0

Сам класс не должен быть статическим, а только переменной. Затем вы можете получить доступ к статической переменной, не зная экземпляра класса (поскольку он является статичным, то есть он разделяется между всеми экземплярами класса).Вы можете только «видеть» экземпляр объекта, если вы передадите его (в данном случае, вашу переменную 'game'). –

+0

До сих пор я использовал только статические переменные в статических классах, спасибо за расширение моего горизонта (если это фраза вообще) !! : D Теперь все в порядке, спасибо еще раз! –

1

Я не уверен, что я понимаю ваш вопрос, но если в вашем конструкторе Platformer03 вы уже загружаете требуемую текстуру, вы можете просто создать экземпляр нового Platformer03 и получить его. Как это:

public Tile(Vector2 position) 
{ 
    Texture = new Platformer03().Texture; 
} 

или если в вашем Plataformer03 вы будете использовать только одно значение в Texture для всех diferents объектов Platformer03, вы можете иметь статический член внутри, не статический класс, как это:

class Platformer03 
{ 
    public static Texture2D Texture = ... ; 
} 
class Tile 
{ 
    public Tile(Vector2 position) 
    { 
     this.texture = Platformer03.Texture; 
    } 
} 

Извините за мой английский.

+0

Да, первый, о котором я тоже думал, но так как «platformer03» - это игра, в принципе, я не хотел бы второй (пока), я думаю, это не было бы чистым решением для создания совершенно нового игровой экземпляр, чтобы получить текстуру «out». Ваше второе предложение - это тот, который я выбрал сейчас, насколько я понял, это то, что предложил Виллем Дункан, не так ли? Последний вопрос, совершенно не связанный с моим главным вопросом: вы используете «this.texture», и, хотя я понимаю, почему вы его используете, нужно ли это? Что касается вашего английского языка: я тоже «иностранец», поэтому не беспокойтесь! Пока мы все понимаем друг друга, все хорошо. –

+0

мы обычно используем 'this' для представления текущего объекта класса (это больше, чтобы код был чистым и приятным, и у него нет проблем с двумя переменными с тем же именем, потому что вы можете создать« текстуру »для класса и другой метод, в этом случае для вызова «Текстуры» класса вам понадобится «this») –