2015-01-18 9 views
0

Я работаю над игрой в XNA, и я не хочу продолжать класть кучу кода в основной файл внутри методов Draw и Update. Есть ли способ, которым я мог бы просто запустить один «мастер» метод внутри одного, например:Как «перехватить» методы?

protected override void Draw(GameTime gameTime) 
    { 
     // Instead of having to do Tools.DrawModel() for every model 
     // I have to draw, can I do this? 
     Tools.MasterDraw(); 
    } 
// Inside MasterDraw: 
public static void MasterDraw() 
{ 
     // A bunch of Tools.DrawModel() goes here, but instead of repeating 
     // it every time for every model, how would I make a function 
     // to auto-add a line to draw itself inside this function???? 
} 
+0

Похоже, вы хотите, чтобы цикл, который повторяется во всех моделях, вызывает ваш метод draw на них. – OMGtechy

ответ

0

С XNA, вы можете определить один Draw метод для каждого объекта, который вы имеете, если они вытекают из DrawableGameComponent, который будет автоматически.

Так в основном ваш класс инструмента должен выглядеть следующим образом:

public class Tool : DrawableGameComponent 
{ 
    public Tool(Game game) : base(game) 
    { 
     game.Components.Add(this);   
    } 

    public override void Draw(GameTime gameTime) 
    { 
     base.Draw(gameTime); 

     // Put draw logic for your tool here 
    } 
} 

Вы должны реализовать конструктор (который получает Game) и добавить свой материал в Game.Components список. Добавление вашего объекта в компоненты - это то, что запускает автоматические вызовы Draw.

Вы также можете переопределить Update, чтобы избежать пометок в петлю Game1.

Вы также должны хорошо взглянуть на MSDN's Starter Kit: Platformer, так как вы действительно не знакомы с XNA. Этот шаблон реализован в основном учебнике.

+0

Не могли бы вы объяснить мне, что делает «общественная Инструментальная (игровая игра): база (игра)»? Что в скобках и как они работают? Извините, я довольно новичок в C#, и последний язык, который я узнал, был Lua, и мне понадобилось некоторое время, чтобы понять эту концепцию «объектно-ориентированного программирования». – user3841476

+0

@ user3841476 Это конструктор класса, который вызывается при создании вашего класса. «Материалы в скобках» - это переданные аргументы. Поскольку этот класс получен из DrawableGameComponent, и этому классу нужен экземпляр Game, вы должны передать его ему. Вы получите более подробные объяснения по MSDN. Учебник Starter Kit также необходим, если вы хотите сделать более серьезную XNA. –

+0

Когда я создаю новый экземпляр класса с кодом, который вы мне дали, он просит меня аргумент (который является классом игры). Что я могу дать? – user3841476

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