У меня есть оператор switch, который берет кортеж и выбирает, какой набор вложенных операторов switch должен входить на основе второго значения кортежа. Все работает достаточно хорошо, но так как мне нужно загрузить 4 карты вокруг центральной карты для плавных переходов каждый раз, когда оператор switch заканчивается тем, что занимает больше места, чем требуется. Итак, я перерабатываю метод, который теперь просто загружает и рисует базовые спрайты. Я столкнулся с несколькими проблемами с исключениями исключения null refrence для менеджера контента при загрузке спрайтов и не знаю, как правильно передать контент методу Load.Оператор переопределения загрузки карты рефакторинга в XNA
Вот мои abreviated Коммутационные заявления в Draw:
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend);
Map.FindLocation(Map.LocationXY, ZoneDecider);
switch (Map.TupleHolder.Item1)
{
case 0:
{
switch (Map.TupleHolder.Item2)
{
case 0:
if (LoadNextMap)
{
if (Right)
{
backgroundCenter.LoadContent(this.Content,"BackgroundBottom");
backgroundCenter.position = new Vector2(0, 0);
}
else if (Left)
{
backgroundCenter.LoadContent(this.Content, "BackgroundBottom");
backgroundCenter.position = new Vector2(0, 0);
}
else if (Top)
{
backgroundCenter.LoadContent(this.Content, "BackgroundBottomRight");
backgroundCenter.position = new Vector2(0, 0);
}
else if(Bottom)
{
backgroundCenter.LoadContent(this.Content, "BackgroundRight");
backgroundCenter.position = new Vector2(0, 0);
}
backgroundWest.LoadContent(this.Content, "BackgroundBottom");
backgroundWest.position = new Vector2(westTransition, 0);
backgroundEast.LoadContent(this.Content, "BackgroundBottomRight");
backgroundEast.position = new Vector2(eastTransition, 0);
backgroundNorth.LoadContent(this.Content, "BackgroundMid");
backgroundNorth.position = new Vector2(0, northTransition);
backgroundSouth.LoadContent(this.Content, "BackgroundBottomRight");
backgroundSouth.position = new Vector2(0, southTransition);
LoadNextMap = false;
}
//new SpriteBatch(graphicsDevice)
backgroundCenter.Draw(this.spriteBatch);
//Drawbackground.drawBackground(backgroundWest, backgroundEast,
// backgroundNorth, backgroundSouth);
backgroundWest.Draw(this.spriteBatch);
backgroundEast.Draw(this.spriteBatch);
backgroundNorth.Draw(this.spriteBatch);
backgroundSouth.Draw(this.spriteBatch);
break;
Это не идеально, поэтому для начала рефакторинга я двигаюсь секции из стороны Ф.О. КРП заявления на новый метод.
Новый метод:
public class DrawNextBackground
{
SpriteBatch spriteBatch;
ContentManager theContentManager;
public void drawBackground(Background backgroundWest,
Background backgroundEast, Background backgroundNorth, Background backgroundSouth)
{
float eastTransition = 1068;
float westTransition = -1068;
float northTransition = -936;
float southTransition = 936;
backgroundWest.LoadContent(this.theContentManager, "BackgroundBottom");
backgroundWest.position = new Vector2(westTransition, 0);
backgroundEast.LoadContent(this.theContentManager, "BackgroundBottomRight");
backgroundEast.position = new Vector2(eastTransition, 0);
backgroundNorth.LoadContent(this.theContentManager, "BackgroundMid");
backgroundNorth.position = new Vector2(0, northTransition);
backgroundSouth.LoadContent(this.theContentManager, "BackgroundBottomRight");
backgroundSouth.position = new Vector2(0, southTransition);
backgroundWest.Draw(this.spriteBatch);
backgroundEast.Draw(this.spriteBatch);
backgroundNorth.Draw(this.spriteBatch);
backgroundSouth.Draw(this.spriteBatch);
}
}
Метод Load:
public void LoadContent(ContentManager theContentManager, string theAssetName)
{
SpriteSize = theContentManager.Load<Texture2D>(theAssetName);
}
Как я могу идти о получении метода Load заметить каждый объект имеет содержание? Все, что я пробовал до сих пор, не сработало.
Как будут выглядеть ваши плавные переходы? ваш спрайт все время находится в центре вашего окна, а ваша карта движется или наоборот, и карта переключается, если вы выходите из нее? – WiiMaxx
Когда я выхожу из карты, следующая карта движется в направлении игрока. Как только следующая карта передает плеер, игрок начинает перемещаться с помощью карты, пока не достигнет противоположной стороны. Переход похож на переключатель карты в Zelda. – ZeroPhase
Это работает сейчас? или нулевой ref все еще остается? что такое тип класса вашего исходного класса и что он наследует? – WiiMaxx