2013-10-14 6 views
1

Я пытаюсь создать простой класс достижений в C# + XNA, и я хочу реализовать очередь, чтобы, когда вы получаете несколько достижений быстро после eachother, последний будет добавлен к список очередей.Добавить объект, который вызвал метод, в список

Вот метод, который вызывается, чтобы получить определенное достижение:

//This is the list that I want to add the achievements to be queued to 
static List<Achievement> queueList; 

public void GetAchievement() 
{ 
     //If the player hasn't got the achievement yet and another achievement is NOT being drawn, get the achievement 
     if (!got && !drawing) 
      get = true; 
     //If the player hasn't got the achievement yet and another achievement IS being drawn, add the achievement to the queue list 
     else if (!got && drawing) 
      queueList.Add(); //What do I do here? 
} 

Так это будет называться как: exampleAchievement.GetAchievement(); с примеромAchievement является объектом класса Achievement.

Я просто не могу понять, как узнать, какой объект вызывает GetAchievement(), поэтому я не знаю, что добавить в queueList.

Любая помощь была бы принята с благодарностью!

~ Лука

EDIT: я использовал:

queueList.Add(this); 

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

+3

Почему бы не просто добавлять достижения в очередь, даже если это только один? –

ответ

1

Похоже, вы просите this, который ссылается на текущий объект, на который вызывается метод экземпляра.

0

Если ExampleAchievement получает этот метод из базового класса Achievement, то просто это сделать:

queueList.Add(this); 

и экземпляр ExampleAchievement будет добавлена ​​в очередь. Однако при его использовании вам нужно будет проверить тип как-то , если есть специальные свойства, которые не видны в базовом контракте, который вам нужно получить.

Если все свойства просто переопределяют свойства в дочернем классе, вам не нужно будет беспокоиться об этом, потому что вы получите обратную реализацию ребенка при доступе к ним.

2

Вы ищете exampleAchievement экземпляр?

queueList.Add(this);// is this you're looking for? 

Я что-то упустил?

0

Можно ли передать параметр, который может идентифицировать себя как то, что его вызывает?

Так

public void GetAchievement(string caller) 
{ 

if(caller == "Something") 
{ 
//Do Something 
} 
else 
{ 
//Do Something else 
} 
    //If the player hasn't got the achievement yet and another achievement is NOT being drawn, get the achievement 
    if (!got && !drawing) 
     get = true; 
    //If the player hasn't got the achievement yet and another achievement IS being drawn, add the achievement to the queue list 
    else if (!got && drawing) 
     queueList.Add(); //What do I do here? 
} 

, а затем вызвать его с помощью exampleAchievement.GetAchievement (this.name);

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