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:50du mußt 3 TImage auf der Form haben: Image1, Image2, Image3
Image1 ist das AusgangsbildImage2->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 rauskommtgruß 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.gruß Micha
-
Danke nochmals
Sag mal darf ich den Code auch in meinem Forum veröffentlichen ???