我在Direct2D中绘制位图时遇到问题。每当我使用HWNDRenderTarget::DrawBitmap
函数时,我都会遇到访问冲突(代码0xc0000005
)。这是有问题的功能。
void Graphics::game() {
mprendertarget->Clear(D2D1::ColorF(D2D1::ColorF::Black));
if (rot > 360) {
rot = 0;
}
if (rot2 > 360) {
rot2 = 0;
}
if (GetKeyState(VK_LEFT)) {
rot--;
}
if (GetKeyState(VK_RIGHT)) {
rot++;
}
D2D1_RECT_F debugarenatextrect = {0.0f, 0.0f, 1000.0f, 6000.0f};
mprendertarget->DrawTextA(P_GAME_DEBUG_ARENATEXT, wcslen(P_GAME_DEBUG_ARENATEXT), mpgenerictextformat, debugarenatextrect, mpsolidbrush, D2D1_DRAW_TEXT_OPTIONS_NONE, DWRITE_MEASURING_MODE_NATURAL);
const D2D1_RECT_F shipimagerect = RectF(0.0f,0.0f,29.0f,29.0f);
mprendertarget->SetTransform(D2D1::Matrix3x2F::Rotation(rot, D2D1::Point2F(29 / 2, 29 / 2)));
//Access Violation! V
mprendertarget->DrawBitmap(ship, RectF(0.f, 0.f, 29.f, 29.f), 1.0f, D2D1_BITMAP_INTERPOLATION_MODE_LINEAR, RectF(0.f, 0.f, 29.f, 29.f));
}
理想情况下,按下左箭头时应该减少rot
(旋转),按下右箭头键时增加rot
。然后它显示一艘船的小图像(29x29),旋转rot
度。 P_GAME_DEBUG_ARENATEXT
是WCHAR *字符串,与问题无关。 mprendertarget
的类型为ID2D1HwndRenderTarget。
答案 0 :(得分:0)
事实证明,有一个函数将船舶图像重写为NULL。我删除了它,并且没有更多的访问冲突。