Я задал вопрос ранее на этой неделе ( здесь ) относительно передачи данных из цели рендеринга в ЦП, чтобы на ней можно было проверять коллизии.Из полученных ответов я решил, что рисование раздела цели рендеринга в меньшую цель рендеринга, а затем извлечение этих данных будет правильным решением, и попытался реализовать это.
После отрисовки полноразмерного рендерацель (1280x1024), я переключаю активную цель рендеринга на меньшую (59X47 - размер столкновения моих игроков) и пытаюсь нарисовать участок большой цели рендера, который падает под игроком, на меньшую цель.Сначала я думал, что это сработало, но потом я заметил, что столкновения иногда бывают совершенно неточными.
Я нарисовал меньшую цель рендеринга на экране, чтобы проверить ее содержимое, и обнаружил, что в ней всего несколько пикселей.заняты в любое время, и что они всегда были в верхнем левом углу.
// Render rectangle under player from foreground to collision layer
Rectangle sourceRectangle = new Rectangle(sourceX, sourceY,
(int)sizeX, (int)sizeY);
gd.SetRenderTarget(collisionLayer[i]);
gd.Clear(Color.Transparent);
spriteBatch.Draw(foregroundLayer, collisionLayer[i].Bounds,
sourceRectangle, Color.White);
gd.SetRenderTarget(null);
Рисование полной большой цели рендеринга на меньшую цель приводит к успешному переносу данных (хотя масштабируется, очевидно),поэтому я не уверен, что происходит не так.
// Render full target onto collision layer
gd.SetRenderTarget(collisionLayer[i]);
gd.Clear(Color.Transparent);
spriteBatch.Draw(foregroundLayer,new Vector2(0.0f),Color.White);
gd.SetRenderTarget(null);
На рисунке ниже показана большая цель с маленькой целью, наложенной в верхнем левом углу.Полные данные большой цели, похоже, отображаются правильно.