Beispiel zum Animieren von mehreren Bitmaps!



  • Also ich hab nun vor einen Space Shooter zu programmieren. Ich hab es soweit hingekriegt das man die Pics die in TImageList sind als TImage per Timer zu aktualisieren. Das funktioniert auch aber nur das erste mal also springt er leider nicht zu Bild 2 rüber sonder zeigt nur immer Bild 1 an. Ich habs per Int weitergeben und der Int zählt auch immer +1 in der schleife (es funktioniert hab sogar als Form1->Caption immer den Wert im Auge). Nur leider will der nicht ganz Animieren. Kennt ihr ne bessere Lösung oder irgendeine Anleitung dafür?

    Danke im Voraus 🙂



  • Hallo,

    es ist schön zu sehen das du dir ein Ziel gesetzt hast, aber du
    wirst kein gutes Resultat erzielen, wenn du nur auf der Suche
    nach "How To´s", Tutorials und fertigen Code bist.
    Nur mit den Standartkomponenten die du auf die Form ziehen kannst,
    kann kein sauberes Spiel entstehen. Um deinem Ziel nähr zu kommen,
    mußt du einiges noch hinzu lernen:

    A. Beschäftige dich mal mit TBitmap und Canvas und dessen Möglichkeiten!

    B. Mache dir ein Bild vom Spielablauf in einer Schleife!

    C. Setzte dich mit Timing innerhalb eines Spiels auseinander, ohne Timer1!

    Z.B.: Dein Spiel soll, wie bei einem Film, mit 25 Bilder pro Sekunde laufen,
    dann könnte es so Aussehen:

    bool GameOver = false;
    int TimeIdle;
    Graphics::TBitmap* puffer = new Graphics::TBitmap;
    while (!GameOver) {
    	TimeIdle = GetTickCount() + 40; //1000ms : 25 = 40
    	Application->ProcessMessages(); // Messages behandeln
    	KollisionAbfrage(); //Versteht sich von selbst
    	PukteLebenErfragen(); //wenn Spielende dann GameOver auf true setzten
    	NeuePositionenSetzten(); //ist auch klar
    	SpielfeldNeuZeichnen(puffer); //Nun das Screen malen, Hintergrund, Schiff, Gegner..
    	while (GetTickCount() < TimeIdle) {
    		::Sleep(0);
    	}
    	Form1->Canvas->CopyRect(TRect ziel,puffer->Canvas,TRect quelle);
    }
    delete puffer;
    

    Um dir nochmal ein weiteres Beispiel zu geben, für eine Animation so wie
    du es gedacht hast, halt nur ohne ImageList:

    //---------------------------------------------------------------------------
    
    #include <vcl.h>
    #pragma hdrstop
    
    #include "Unit1.h"
    //---------------------------------------------------------------------------
    #pragma package(smart_init)
    #pragma resource "*.dfm"
    TForm1 *Form1;
    Graphics::TBitmap* anim[7];
    int picnummer = 0;
    //---------------------------------------------------------------------------
    __fastcall TForm1::TForm1(TComponent* Owner)
            : TForm(Owner)
    {
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Button1Click(TObject *Sender)
    {
            for (int i=0;i<8;i++) {
                    anim[i] = new Graphics::TBitmap();
                    anim[i]->LoadFromFile("d:\\Spiel\\animpic"+IntToStr(i)+".bmp"); //animpic0.bmp,animpic1.bmp...
                    //oder aus Resource: anim[i]->LoadFromResourceName(int(HInstance),"animpic"+IntToStr(i));
            }
            Timer1->Enabled = true;
    
    }
    //---------------------------------------------------------------------------
    
    void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
            Form1->Canvas->Draw(10,10,anim[picnummer]); //->Draw(X,Y,Bitmap)
            picnummer++;
            if (picnummer == 8)
                    picnummer = 0;
    }
    //---------------------------------------------------------------------------
    

    Ich denke du solltest dich erstmal mit allem mehr Vertraut machen, bevor du
    direkt ein Spiel programmierst, sonst sind hier Täglich simple Anfänger fragen.

    gruß Micha



  • Auwaja 🙂

    Erst einmal ein großes Dankeschön für die Code!

    Ich werd den Code jetzt mal Studieren *g* Ich wußte garnicht das ich voll die Flasche in Sachen programmierung bin *g* Naja ist ja auch egal. Ich denke mal du hast recht. Ich sollte mich erstmal mit der Programmierung beschäftigen.

    In einigen Tutorials zum Thema GameDev hab ich gelesen das man als beginn Clone von Spielen erstellen soll, damit man sich mit der programmierung vertraut machen kann, aber mit welchem Spiel soll ich anfangen es soll ja soweit wie möglich einfach bleiben.



  • Schau dir mal auf meiner Homepage das Spiel "PushPuzzle" an. Es ist ziemlich einfach. Sowas ist IMHO ziemlich gut, um ein wenig mit Bitmaps rumzuprogrammieren. Aber bitte frag nicht nach dem Code. Du sollst es selber machen!



  • Alles kloar danke dir 🙂



  • Also für den Anfang hab ich folgendes Programmiert:

    http://ag3nt.funpic.de/myProjects/

    Weil für das andere Projekt kenn ich noch nicht alle Befehle? Wie kann man ein Bild splitten? Muss ich dafür mehrere TPictures erstellen?



  • Ag3nt schrieb:

    Also für den Anfang hab ich folgendes Programmiert:

    http://ag3nt.funpic.de/myProjects/

    Weil für das andere Projekt kenn ich noch nicht alle Befehle? Wie kann man ein Bild splitten? Muss ich dafür mehrere TPictures erstellen?

    Zum einen sollte man immer mit TBitmap arbeiten für Spiele und nicht TPicture
    oder TImage. TImage kannst du halt dann als Endergebniss verwenden.

    Bild splitten?? Also Halbe Halbe?
    Hier ein Beispiel für 50:50

    du mußt 3 TImage auf der Form haben: Image1, Image2, Image3
    Image1 ist das Ausgangsbild

    Image2->Canvas->CopyRect(Rect(0,0,Image1->Width/2,Image1->Height),Image1->Canvas,Rect(0,0,Image1->Width/2,Image1->Height));
    Image3->Canvas->CopyRect(Rect(Image1->Width/2,0,Image1->Width/2,Image1->Height),Image1->Canvas,Rect(0,0,Image1->Width/2,Image1->Height));
    

    schau dir die Canvas Zeichnenoperationen mal an in der Hilfe,Forum-Suche etc.

    gruß Micha

    PS: Dein Projekt schaue ich mir nacher an, zuerst mit dem Hund raus.



  • So ich habe mir den Saft jetzt mal angeschaut.
    Ich kappiere den Sinn des Spiels zwar nicht, aber
    ich sehe du giebts dir Mühe.

    Erkennst du aber die Ähnlichkeit deines Spiels mit einer Anwendung?
    Was fesselt Zocker an einem Spiel, ausser Grafik und Sound?
    Eine gewisse Portion Interessantheit und event. Spannung, oder halt
    Baller Spass etc.

    Ich mach morgen mal ein kleines Spiel zu Demo zwecken, mit nem Space-
    Ship was einfach irgendwas abknallt und der Hintergrund nach unten scrollt,
    so als ob das Shuttle fliegt, oder so.
    Dann siehst du in Etwa mal so einige Punkte und kannst dich mehr damit beschäftigen.

    Ich mach sowas zwar nicht gern, da es zusätzliche Arbeit ist, aber ich
    will diesmal nicht so sein, bevor noch Saft2 rauskommt 😃

    gruß Micha



  • Ich danke dir 🙂

    Saft hab ich programmiert weil es so ein Spiel tatsächlich mal gab. Wir hatten es auf unseren 386'ern in der Handelsschule gehabt 🙂

    Ich bin echt gespannt auf den Code 🙂



  • Der Vollständigkeitshalber hier auch nochmal den Link mit dem MiniProjekt
    hin, da ich in ein anderen Thread ihn bereits gepostet habe.

    BCBGame Beispiel

    gruß Micha



  • Danke nochmals 🙂

    Sag mal darf ich den Code auch in meinem Forum veröffentlichen ???


Anmelden zum Antworten