XNA изменяет состояние смеси с альфа на добавку - PullRequest
0 голосов
/ 28 января 2012

Вот моя проблема: я использую регулятор глубины, но теперь у меня есть разные спрайты, которым нужны разные смешанные состояния. Как я могу изменить это, если я уже запустил spritebatch.begin (...)

Я пыталсяизмените spritebatch.graphicsDevice.blendstate, но он, кажется, не работает

Я не могу превратить черную область в прозрачность

Спасибо

Все еще кажется, что не может сохранить слойпорядок между ними с помощью этого кода ...Я предполагаю, что проблема может быть в использовании object.draw (spritebatch), а затем рисовать внутри метода.Я думаю, что есть проблема, потому что у меня есть 2 класса каждый с методом рисования с входным Spritebatchэто то, что я делаюspriteBatch.Begin (SpriteSortMode.FrontToBack, BlendState.Additive);d.drawAttack (gameTime, spriteBatch);spriteBatch.End ();spriteBatch.Begin (SpriteSortMode.FrontToBack, BlendState.AlphaBlend);drawObjects (gameTime, spriteBatch);charactersDraw (gameTime, spriteBatch);// тот же класс, что и d.drawAttackspriteBatch.End ();они оба рисуют, но слой! Между обеими спрайтбэтч!кажется, не имеет никакого значенияlayerdepth отлично работает с символами и рисует объекты ... только не работает с drawAttack

1 Ответ

0 голосов
/ 28 января 2012

Вам необходимо выполнить несколько вызовов SpriteBatch.Begin () .. End (), каждый с различным BlendState . Вы все еще можете сохранить свой layerDepth среди них.

Например:

batch.Begin(SpriteSortMode.FrontToBack, BlendState.Additive);
batch.Draw(tex1, sprite1, null, Color.White, 0.0f, Vector2.Zero, 1.0f,
SpriteEffects.None, layer1);
batch.Draw(tex2, sprite2, null, Color.White, 0.0f, Vector2.Zero, 1.0f,
SpriteEffects.None, layer2);
batch.End();

//new blend state, new begin...end
batch.Begin(SpriteSortMode.FrontToBack, BlendState.AlphaBlend);
batch.Draw(tex3, sprite3, null, Color.White, 0.0f, Vector2.Zero, 1.0f,
SpriteEffects.None, layer3);
batch.Draw(tex4, sprite4, null, Color.White, 0.0f, Vector2.Zero, 1.0f,
SpriteEffects.None, layer4);
batch.End();
...