2012-01-27 2 views
0

Вот моя проблема Я использую контроль глубины, но теперь у меня есть разные спрайты, которые нуждаются в различных blendstates , как я могу изменить это, если я уже начал spritebatch.begin (...)XNA изменения blendstate от альфы до аддитивного

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

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

Спасибо

По-прежнему кажется, что он не может сохранить порядок слоев между ними, используя этот код ...
Я предполагаю, что проблема может заключаться в использовании object.draw (spritebatch), а затем рисовать внутри метода.
Я думаю, Theres проблема, потому что у меня есть 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.drawAttack
spriteBatch.End();

они оба рисуют, но слой! МЕЖДУ и spritebatche! не кажется, никакой разницы
layerdepth отлично с персонажами работает и рисовать объекты ... только не работает с drawAttack

ответ

0

Вам нужно сделать несколько SpriteBatch.Begin() .. End() звонки , each with a different 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(); 
+0

Я до сих пор могу показаться, чтобы сохранить порядок слоя между ними с помощью этого кода ... –

+0

Вы используете параметр layerDepth как в моем примере? С FrontToBack значения нижнего уровня (например, 0.3f) будут отображаться перед более высокими (например, 0,9f). –

+0

после некоторых потоков и форумов, я думаю, мне, возможно, придется предварительно рассчитать глубину для каждого объекта, а затем нарисуйте все из них (например, список) ????? my layerDepth вычисляется с помощью функции при рисовании объекта. Глубина слоя отлично работает с объектами и символами ... единственная проблема заключается в spriteBatchs (с d.drawAttack), возможно, это способ заменить черный фон изображения и нарисовать его с помощью alphablend? –

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