/ / Jak naprawić wektor zmieniający zmienne wszystkich obiektów? - c ++, winapi, visual-c ++, wektor, directx

Jak naprawić wektor zmieniając zmienne wszystkich obiektów? - c ++, winapi, visual-c ++, wektor, directx

Utworzyłem klasę obrazu, która ładuje bitmapę, a następnie rysuje i obsługuje bitmapę, ale kiedy tworzę wektor tej klasy obrazu i ładuję bitmapę 3 obiektów Ostatni obiekt (3.) ustawia wszystkie obiekty na mapę bitową.

Ładowanie bitmap:

PlayerCard[0].GetBitmap(L"program files/Creature Cards/Mana_Wyrm.png");
PlayerCard[1].GetBitmap(L"program files/Creature Cards/Snowchugger.png");
PlayerCard[2].GetBitmap(L"program files/Creature Cards/Water_Elemental.png");

To, co renderuje w oknie, to 3 żywiołaki wody.

GetBitmap (wchar_t * nazwa pliku): Funkcja obrazu

CoCreateInstance(CLSID_WICImagingFactory, 0, CLSCTX_INPROC_SERVER, IID_IWICImagingFactory, (LPVOID*)&wicFactory);

wicFactory->CreateDecoderFromFilename(filename, 0, GENERIC_READ, WICDecodeMetadataCacheOnLoad, &wicDecoder);

wicDecoder->GetFrame(0, &wicFrame);

wicFactory->CreateFormatConverter(&wicConverter);

wicConverter->Initialize(wicFrame, GUID_WICPixelFormat32bppPBGRA, WICBitmapDitherTypeNone, 0, 0.0, WICBitmapPaletteTypeCustom);

graphics.GetRenderTarget()->CreateBitmapFromWicBitmap(wicConverter, 0, &bmp);

if (wicFactory) wicFactory->Release();
if (wicDecoder) wicDecoder->Release();
if (wicFrame) wicFrame->Release();
if (wicConverter) wicConverter->Release();

Nagłówek obrazu: Image.h

public:
void PassGraphics(Graphics gfx);
void Init();
void Unload();
void GetBitmap(wchar_t* filename);
void Draw(float x, float y);
private:
IWICImagingFactory *wicFactory;
IWICBitmapDecoder *wicDecoder;
IWICBitmapFrameDecode *wicFrame;
IWICFormatConverter *wicConverter;
ID2D1Bitmap* bmp;
Graphics graphics;

Odpowiedzi:

0 dla odpowiedzi № 1

Nie jestem pewien dlaczego, ale problemem była pętla for, która została użyta do narysowania obrazów wektorowych.

for (float i = 0; i <= 769; i += 384)
{
for (int c = 0; c < 3; c++)
{
PlayerCard[c].Draw(i, 100);
}
}

Zastąpiłem tę pętlę dla funkcji ręcznego wywoływania losowania.

PlayerCard[0].Draw(0, 100);
PlayerCard[1].Draw(384, 100);
PlayerCard[2].Draw(769, 100);