Как да създадете клас на игрален обект за игра, която ще бъде разширена с нови методи динамично?

И така, имам клас играч с основни действия. По време на играта той отключва нови способности. Не знам как да съхранявам нови действия в класа на играча. За да бъда точен - знам как, но методът ми е твърде объркан и искам да изчистя кода. Освен това искам да добавя към враговете някои от тези способности. С други думи, всеки обект на игра (очаквайте стени, може би :D) трябва да има колекция, към която мога да добавя методи, които разширяват функционалността на обекта. Как да направя това? Съжалявам, ако въпросът ми е твърде абстрактен


person edwing    schedule 27.01.2013    source източник
comment
Може би enum с атрибута [Flags]. Така че EntityCanDo = Functionality.Jump | Functionality.Run или списък с действия?   -  person Cyral    schedule 27.01.2013


Отговори (1)


Създайте речник на действията:

public Dictionary<string,Action> NameActionDic = new Dictionary<string,Action>();

След това можете да го попълните така:

player.NameActionDic["jump"] = ()=>{ player.velocity.Y -= 5; };

И използвайте така:

if (KeyboardButtonPressed(Keys.ArrowUp))  // this is just an example
    player.NameActionDic["jump"]();

Просто поставете кода на населението някъде в покрайнините (отделен void метод, може би конструктор на играча), или той ще попречи на възможността ви за редактиране и продължаване, защото това е ламбда израз.

person user1306322    schedule 27.01.2013
comment
О, изглежда това, което търся! Благодаря ти! - person edwing; 27.01.2013