Вы не должны использовать их больше, чем необходимо, потому что Begin () означает подготовку устройства к визуализации спрайта, а End () означает восстановление его предыдущего состояния.Это может варьироваться в зависимости от некоторых флагов в Begin (), говорящих о том, что вы не хотите изменять состояние, и может усложнить ваш код, потому что вам придется вручную устанавливать некоторые состояния.
Изменения состояния устройства часто бывают медленными, и вы должны избегать их выполнения, если они не требуются, они также могут мешать всему, что вы делаете, поэтому, если вы хотите визуализировать что-то не в SpriteBatch, вы должны вызвать End (),но если вы рендерите спрайты, вы должны вызывать его один раз для всех спрайтов.
Чтобы предотвратить вызов End () для изменения состояний, которые не отображаются на предыдущем спрайте, вы должны вызвать Flush () вместо End ().Это делает спрайты в очереди с текущими преобразованиями и состояниями устройства, но оставляет состояния нетронутыми.Функция End () выполняет вызов Flush () и сбрасывает определенные состояния, установленные Begin ().