X & Y -- Vektor

ComFreek

Mod | @comfreek
Moderator
Hallo @lle,

ich brauche eure Hilfe *!
Ich habe eine Klasse die ein Gegenstand darstellt (Item). So ich habe geschafft dies zu zeichnen (Ich lasse mal den Code dafür aus). Ich will aber es auch wieder verschwinden lassen, indem beim zeichnen die vorherigen Pixel gespeichert werden.

Dazu brauche ich aber ein X & Y--Array, das sich so einfach erweitern lässt wie ein Vektor.

Code:
class TItem
{
  public:
     ......
     TBitmap *BMP;
     void  Draw(int x, int y);
     void Hide();

  private:
     // Hier soll das Array rein
};

Aber kann man ein Vektor-Array machen? Ja, ich weiß ein Array als Typ. Aber das mein ich nicht. Eher so:

Code:
int a[10][10];   // int-Array, aber nicht dynamisch wie ein Vektor
std::vector<TTyp> b;  // Vektor, aber nicht mehrdimensional
std::vector<TTyp>[2] b;   // Mein Vorschlag, geht aber nicht

Bitte helft mir.
Danke im Vorraus!
 
Du kannst einen Vektor aus Vektoren machen. Das wäre in alle Richtungen dynamisch.

So ungefähr:
Code:
std::vector<std::vector<TTyp>> a1;
 
Hallo,

Klappt
std::vector< std::vector<DWORD> > array; ?

Gruß
Anfänger

Edit:
Zu spät
 
Zuletzt bearbeitet:
Hallo,

mein Typ ist TColor (vom Borland C++ Builder).
Wie soll ich dann darauf zugreifen? Ich bitte um ein wenig Hilfe.

Code:
std::vector< std::vector<TColor> > PrevPixels;

int x = PrevPixels.at(0).at(KOORDINATE);
int y = PrevPixels.at(1).at(KOORDINATE);

Schonmal danke.

Edit:
@Anfänger92: Ja, es klappt. Der Typ ist dann einfach noch einmal ein Vektor.
 
Zuletzt bearbeitet:
Ich versteh das Problem jetzt nicht ganz.
Du hast jetzt ein 2D-Feld gefüllt mit TColor-Objekten.

Darauf zugreifen kannst Du folgendermaßen:
Code:
TColor res = PrevPixels.at(XKoordinate).at(YKoordinate);

Zurückgegeben wird natürlich wieder TColor.

Wenn Du wissen willst was Du mit dem TColor-Objekt machen kannst müsstest Du die entsprechende Dokumentation lesen.
 
Nein, das weiß ich was ich da mache.
Also ich will eine BMP-Datei auf dem Bildschirm zeichnen. Da ich aber auch Transparenz haben will, habe ich eine Variabel (TColor) deklariert, die die Farbe der Transparenz beinhaltet. Entschuldigung, habe die Deklaration beim ersten Beitrag entfernt.

Nun zeichne ich in einer for-Schleife jeden Pixel außer wenn es sich um die
transparente Farbe handelt:

Code:
void TItem::Draw(int x, int y)
{
  for (int i=0; i<this->BMP->Height; i++)
  {
    for (int j=0; j<this->BMP->Width; j++)
    {
      if (BMP->Canvas->Pixels[j][i]!=TransparentColor) // Nur wenn die Farbe nicht die transparente ist
      {
        this->Canvas->Pixels[x+j][y+i] = BMP->Canvas->Pixels[j][i];
      }
    }
  }
}

Aber ich will die Figur auch "verstecken", also das zeichnen rückgängig machen.
Dazu brauch ich ein Vektor (oder ein anderer dynamischer Typ), der die Farbinformationen, auf denen drübergemalt wurden, speichert.
Im Prinzip so, ist aber nicht dynamisch:

Code:
TColor VorherigePixel[100][100];

Und beim "verstecken" werden einfach diese Pixel ausgelesen und drüber gemalt.
Mein Problem ist, wie ich in diesen Vektor schreibe und daraus auslese,

Ich hoffe das war verständlich ;)
 
Du kannst dir das auch ein wenig vereinfachen indem du einfach folgendes Tust:

Statt sowas wie: TColor VorherigePixel[width][height]
machst du:
std::vector<TColor> VorherigePixel( width * height );

und zugriff auf den Pixel x/y ist dann:
VorherigePixel[ x * width + x ] = bla; bzw bla = VorherigePixel[ x * width + x ];
 
Zurück