현재 내 게임의 트레일 효과로 5 프레임마다 반투명 한 텍스처 복사본이리스트에 추가됩니다 (목록 <).C# XNA 2D 트레일 효과 최적화
이러한 흔적의 알파 값은 프레임마다 감소하고 그리기 기능은 목록을 반복하고 각 텍스처를 그립니다. 알파가 0에 도달하면 목록 <>에서 제거됩니다.
이동하는 엔티티 뒤에는 작은 흔적이 있습니다. 100 개 이상의 엔티티에 문제가있어 프레임 속도가 급격히 떨어지기 시작합니다.
모든 트레일 텍스처는 동일한 스프라이트 시트에서 제공되므로 일괄 처리 문제라고 생각하지 않습니다. 필자는 코드를 프로파일 링하고 CPU 강도가 FPS 드롭 스파이크 동안 낮 으면 일반 FPS에서 GPU 제한이라는 것을 가정합니다.
이 효과를 더 효과적으로 달성 할 수있는 방법이 있습니까? 사용
Heres는 일반 코드 메신저 : 나는주의해야한다 생각
// fade alpha
m_alpha -= (int)(gameTime.ElapsedGameTime.TotalMilliseconds/10.0f);
// draw
if (m_alpha > 0) {
// p is used to alter RGB of the trails color (m_tint) depending on alpha value
float p = (float)m_alpha/255.0f;
Color blend = new Color((int)(m_tint.R*p), (int)(m_tint.G*p), (int)(m_tint.B*p), m_alpha);
// draw texture to sprite batch
Globals.spriteBatch.Draw(m_texture, getOrigin(), m_rectangle, blend, getAngle(), new Vector2(m_rectangle.Width/2, m_rectangle.Height/2), m_scale, SpriteEffects.None, 0.0f);
} else {
// flag to remove from List<>
m_isDone = true;
}
, 흔적 클래스에 주어진 m_texture 모든 산책로가 공유하는 글로벌 조직에 대한 참조입니다. 각 흔적을위한 하드 카피를 만드는 메모.
편집 : SpriteBatch.Draw 호출을 주석 처리하면 수백 개의 개체에 대해 모든 단일 프레임마다 새 트레일을 할당하더라도 프레임을 삭제할 필요가 없습니다. 더 좋은 방법이 있어야합니다. 이.
는 것을? – MichaelHouse
예, 트레일 효과를 제거하면 프레임 속도가 완전히 떨어집니다. 산책로가 GPU를 처리하기에 너무 많은 스프라이트를 추가하는 것일뿐입니다. – kbirk
몇 가지 코드를 게시해야합니다. 분명히 그런 것이 가능합니다. 입자 시스템은 100 개 이상의 입자가 모두 사라지기 쉽게 만듭니다. – MichaelHouse