Beliebig viele TImages erzeugen
-
In meinem Programm soll jedes Mal wenn man auf Shift drückt ein neues TImage entstehen. Ich hab es wie in euerem TStringList Beispiel (siehe FAQ) probiert:
if (GetAsyncKeyState(VK_SHIFT) < 0) { TImage *bild[banzahl]; bild[banzahl] = new TImage(); banzahl ++; }Aber wenn ich das das Programm starte mekert C++ Builder :
[C++ Fehler] Unit1.cpp(25): E2313 Konstantenausdruck erforderlich
[C++ Fehler] Unit1.cpp(26): E2285 Keine Übereinstimmung für 'TImage::TImage()' gefunden
-
schau mal in der BCB hilfe, was der Konstruktor von TImage für Parameter benötigt.
wenn du so speicher für ein array reservieren willst, brauchst du eine konstante grösse.
jedoch macht das in deinem code-schnipsel für mich kein sinn.
-
Hallo,
banzahl müsste const sein für ein statisches Array. Für das was du willst ist das sowieso ungeeignet. Ich würd hierfür std::vector nehmen.
// Deklaration irgendwo std::vector<TImage*> imagevect; // Dann deine Funktion if (GetAsyncKeyState(VK_SHIFT) < 0) { imagevect.push_back(new TImage(this)); // arbeiten kannst du mit dem letzten Element mit imagevect.back()->Picture->LoadFromFile("Bild.bmp"); // nur ein Beispiel // weiter }
-
Ich glaube ich habe mich etwas blöd ausgedrückt.
Und der Cod-Schnipsel den ich gepostet habe war auch nicht gerade sinnvoll.Also am besten wird es ein ich erkläre euch was ich programmieren will. Vielleicht habe ich ja völlig falsch angefangen.
Ich bin dabei ein kleines Raumschiffspiel zu programmieren.
Bis jetzt habe ich die Bewegung des raumschiffes programmiert://--------------------------------------------------------------------------- #include <vcl.h> #pragma hdrstop #include "Unit1.h" //--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; int p1b; //--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //--------------------------------------------------------------------------- void __fastcall TForm1::FormKeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if (GetAsyncKeyState(VK_UP) < 0) { P1->Picture->LoadFromFile("o.jpg"); P1->Top = P1->Top - p1b; } if (GetAsyncKeyState(VK_DOWN) < 0) { P1->Picture->LoadFromFile("u.jpg"); P1->Top = P1->Top + p1b; } if (GetAsyncKeyState(VK_RIGHT) < 0) { P1->Left = P1->Left + p1b; P1->Picture->LoadFromFile("r.jpg"); } if (GetAsyncKeyState(VK_LEFT) < 0) { P1->Left = P1->Left - p1b; P1->Picture->LoadFromFile("l.jpg"); } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { p1b = 4; Form1->DoubleBuffered=true; } //---------------------------------------------------------------------------(l.jpg zeigt das Raumschif bei dem Vorne auf der linken Seite ist)
(r.jpg zeigt das Raumschif bei dem Vorne auf der rechten Seite ist)
(o.jpg zeigt das Raumschif bei dem Vorne auf der oberen Seite ist)
(u.jpg zeigt das Raumschif bei dem Vorne auf der unteren Seite ist)Jetzt soll bei drücken der Schift-Taste ein Schuss ausgelöst werde.
Dazu habe ich mir folgendes überlegt:
Bei drücken der Schift-Taste wird ein neues TImage-Objekt erzeugt und ihm das Bild schuss.bmp zugewiesen.
Ein Timer prüft alle 10 Millisekunden jedes der schon erstellten Schuss Bilder durch.
Er prüft ob es vorhanden ist.
Wenn ja dann bewegt er es und frägt ab ob es ein Raumschiff getroffen hat.
Wenn ja dann zieht er dem Raumschiff Lebensenergie (in einer Variable
gespeichrt) ab un löscht das Schuss-Objekt.
Wenn nein dann fragt er ab ob es vielleicht den Rand der Form erreicht hat.
Wenn Ja dann löscht er es.