Autor |
Beitrag |
joh88
Hält's aus hier
Beiträge: 10
Delphi 5
|
Verfasst: So 16.07.06 12:17
Wir müssen zur zeit für die Schule ein Spiel programmieren Ich und mein Klassenkamerad haben uns für ein Moorhuhn ähnliches spiel entschieden.
-Eine Menge sich bewegender Gifs(wegen der Transparenz) soll per mausklick abgeschossen werden können
-abgeschossene Bilder sollen herunter fallen
Das Spiel läuft soweit fürs erste Problem ist nur das ich eine Menge sich über einen Timer bewegenden Timages habe die unheimlich viel resourcen benötigen.
Hat jemand eine Idee wie man das resourcen schondender Programmieren könnte.
der code für den timer sieht momentan so aus
die Tag eigenschaft gibt an ob ein bild angeklickt wurde oder nicht
die tag eigenschaft wird über eine clickprozedur gesetzt
tag=1-->Bild angeklickt
tag=0-->Bild nicht angeklickt
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| procedure TForm1.Timer1Timer(Sender: TObject); var i:integer; begin i:=0; while i<=high(bildliste) do begin if bildliste[i].tag=1 then begin if (bildliste[i].top<=form1.clientheight) then begin bildliste[i].top:=bildliste[i].top+15; end else begin bildliste[i].tag:=0; bildliste[i].left:=-100; bildliste:=deletearrayeintrag(bildliste,i); dec(i); end; end else if bildliste[i].tag=0 then begin if (bildliste[i].left>=0) and (bildliste[i].left<=form1.ClientWidth) then begin bildliste[i].left:=bildliste[i].left+10; end else begin bildliste[i].left:=-100; bildliste:=deletearrayeintrag(bildliste,i); dec(i); end; end; inc(i);
end;
end; |
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: So 16.07.06 12:31
Also am ressourcensparendsten (höchste Performance, nicht niedrigster RAM-Verbrauch  ) wäre es, mit OpenGL zu arbeiten. Ist auch relativ leicht und kann man schnell erlernen. Am besten lest ihr euch die Tutorials von [url=delphigl.com]delhigl.com[/url] durch. Für euch reicht ja da auch der 2D-Part, womit es sich noch einmal wesentlich vereinfacht  . Falls ihr nicht bereit seit euch dort einzuarbeiten (verbraucht doch eine seie Zeit, bis man richtig drin ist), würde ich euch empfehlen nicht mit Kompos zu arbeiten, sondern mit TBitmaps und auf einem TBitmap dann immer alles zu zeichnen, und das Bild mit einem Schlag zu zeichnen. Hat allerdings den Nachteil, dass ihr keine OnClick-Ereignisse vom jeweiligen Huhn bekommen könnt. Aber das könnt ihr ja eigentlich sowieos nicht, da man ja sonst auch das Huhn trifft, wenn man danaben schießt (in den transparenten Bereich des Bildes  ).
mfg
Heiko
|
|
joh88 
Hält's aus hier
Beiträge: 10
Delphi 5
|
Verfasst: So 16.07.06 12:44
Wie würde man die Sache den mit Bitmaps machen und wie würde man die Abfrage realiseren
damit man weiß welches huhn herunterfallen muss?
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: So 16.07.06 12:59
Bitmaps (ich mache gerade alles ausm Kopf, also icuh bitte um Endschuldigung bei Fehlern (Schreibweise etc.)  ):
global Definieren:
Delphi-Quelltext 1: 2: 3:
| MainBmp: TBitmap; MoorhuhnBmp: TBitmap Huehner: array of TPoint; |
im OnCreate:
Delphi-Quelltext 1: 2: 3: 4: 5:
| MainBmp:=TBitmap.Create; MainBmp.Width:=Form1.Width; MainBmp.Height:=Form1.Height; MoorhuhnBmp:=TBitmap.Create; MoorhuhnBmp.LoadFromFile(...); |
Die transparente Farbe kannste hier auch gleich festlegen (fürs MoorhuhnBmp, aber am bestne erst nachm Laden  )
OnPaint-Ereignis:
Delphi-Quelltext 1: 2: 3: 4:
| procedure TForm1.FormPaint(Sender: TObject); begin BitBlt(Form1.Canvas.Handle, 0, 0, MainBmp.Width, MainBmp.Height, MainBmp.Canvas.Handle, 0, 0, SrcCopy); end; |
Zeichenroutine (zeichnet nur die Hühner  );
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13:
| procedure Draw; var i: integer; begin Pen.Color:=clWhite; Brush.Color:=clWhite; Rectangle(MainBmp.Canvas.Handle, 0, 0, MainBmp.Width, MainBmp.Height); for i:=0 to High(Huehner) do begin BitBlt(MainBmp.Canvas.Handle, Huehner.X, Huehner.Y, MoorhuhnBmp.Width, MoorhuhnBmp.Height, MoorhuhnBmp.Canvas.Handle, 0, 0, SrcCopy); end; BitBlt(Form1.Canvas.Handle, 0, 0, MainBmp.Width, MainBmp.Height, MainBmp.Canvas.Handle, 0, 0, SrcCopy); end; |
Die Procedur rufts du auf, sobald du mit der Berechnujng deiner X und Y-Koordinaten der Hühner fertig bist  .
Und zur Abfrage, auf welches Huhn er gezielt hat, gehst du alle Hühner durch, und guckst obs in dessen Bereich war (vergleich der X und Y-Koordinate des MausKlicks (von OnMouseDown, Up oder sonstewas *g*) mit dem REchteck des Huhnes (bekommste aus den X- und Y-Werten des Huhnes raus und dessen Audehnungen  ) ).
Dürfte das wichtigste gewesen sien. Hier sokllt ja schließlich auch noch etwas zu tun haben  .
|
|
joh88 
Hält's aus hier
Beiträge: 10
Delphi 5
|
Verfasst: So 16.07.06 13:11
Ok check jetzt noch net so ganz alles bin nen Newbie haben noch nicht mit bitmaps und draw und sowas gearbeitet.Haben nur mal einzelene Punkte in ein Formular gemalt (Sierpinski-Dreieck)
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: So 16.07.06 14:02
Kleiner Tipp: Benutz FEAR2D
Das ist eine OpenGL Engine, mit der ich auch mein spielchen gemacht hab .. moment .. *kram* ah hier: www.delphi-forum.de/viewtopic.php?t=62192
Damit kannst du wirklich sehr einfach bewegte Bilder erzeugen (du musst die ApplicationEventsIdle Procedur aber mit einem Timer bzw. mit einem DXTimer ersetzen, um auf allen Computern eine konstante Framerate zu erhalten. Ich würde dir den Source meines Spiels geben, aber da blickst grad nich durch, keine Kommentare und so ... Ich muss mir endlich angewöhnen Kommentare zu schreiben während ich Progge *schimpf*
Also viel Glück für dein Spiel, ich helf gern wenn du auf Probleme stößt.. Vielleicht schreib ich mal ein Fear2D tutorial für die Grundkenntnisse ^^ Wobei das FearoftheDark besser kann ...
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 16.07.06 14:35
ja fear2d ist momentan out of entwicklung ^^ weil gta-place bissl was optimieren wollte, ich bekomme den code heute hoffentlich um daran weiter arbeiten zu können, für ein besseres animationssystem und eine partikel engine. (und hoffentlich auch mal text  )
|
|
joh88 
Hält's aus hier
Beiträge: 10
Delphi 5
|
Verfasst: So 16.07.06 14:42
Mir ist des im Moment alles noch viel zu kompliziert vergesst net bin Newbie
und wir müssen des Programm am Dienstag abgeben  ich bräuchte eine leichte Lösung die dazu Beiträgt die Performence wenn auch nur ein kleines Bischen zu steigern muss nicht Perfekt sein oder so sollte nur nen bischen besser als die alte Lösung und schnell umzuschreiben sein.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: So 16.07.06 15:25
alles mögliche wurde bereits genannt 
|
|
joh88 
Hält's aus hier
Beiträge: 10
Delphi 5
|
Verfasst: So 16.07.06 15:29
Kann mir dann mal jemand leicht und für einen Newbie verständlich erklären wie die Bitmap/Draw geschichte funktioniert
|
|
Heiko
      
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: So 16.07.06 15:58
Guck mal in den Tuts hier im Forum, bzw. bei dsdt.info, denn da wirds bestimmt welche geben. Eine Erklärung wäre sonst jetzt zu aufwendig (da wir nicht wissen, wieviel verständnis ihr für die Arbeitsweise von XP etc. kennt)  .
|
|
Blackheart666
      
Beiträge: 2195
XP
D3Prof, D6Pers.
|
Verfasst: So 16.07.06 23:30
Muss es denn unbedingt Delphi für ein Spiel sein ? Für Spiele gibt es einfachere und machtigere Sprachen zb. Blitz Basic ob 2D oder 3D eine der einfachsten Sprachen überhaupt wenn es um Spiele geht.
|
|
JayEff
      
Beiträge: 2971
Windows Vista Ultimate
D7 Enterprise
|
Verfasst: Mo 17.07.06 01:18
Nun ich kann nur sagen dass Fear2D die einfachste aller genannten Varianten ist. einfacher als jegliche Zeichenroutinen oder mit 1234754 TImage-Komponenten zu arbeiten. Viel Glück bei deinem Projekt... :/
_________________ >+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
|
|
joh88 
Hält's aus hier
Beiträge: 10
Delphi 5
|
Verfasst: Mo 17.07.06 19:42
Also hab mir jetz die Fear2d Dateien und die Bass runtergeladen wie Integrier ich des Jetzt in delphi(Komponente installieren?) und wie benutz ich die Fear2d engine kann mir vielleicht jemand so ne art lösungsansatz geben wie lade ich mein bilder ein und wie bewege ich sie von links nach rechts (kann ich meine onclick Prozedur weiterhin verwenden) wenn ja wie ruf ich sie auf da die Fear2d Engine ja simpleobject oder sowas benutzt.
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 17.07.06 19:55
ein template ist dabei und eine ausführliche anleitung doch auch
Blackheart666 hat folgendes geschrieben: | Muss es denn unbedingt Delphi für ein Spiel sein ? Für Spiele gibt es einfachere und machtigere Sprachen zb. Blitz Basic ob 2D oder 3D eine der einfachsten Sprachen überhaupt wenn es um Spiele geht. |
stimmt nicht
|
|
joh88 
Hält's aus hier
Beiträge: 10
Delphi 5
|
Verfasst: Mo 17.07.06 20:01
Sorry bin ein noob weiß netmal was eine template ist hab inzwischen nen Ordner gefunden der Template heißt weiß aber net was ich damit machen soll
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 17.07.06 20:21
de.wikipedia.org/wiki/Template
mit delphi die projekt datei öffnen
|
|
joh88 
Hält's aus hier
Beiträge: 10
Delphi 5
|
Verfasst: Mo 17.07.06 20:45
Hab die Projektdatei geöffnet und gleich ne Fehlermeldung gekriegt
'Ressourcen Datei Pfadangabe\fear\fear2d\template\template.res kann nicht gefunden werden
neu erzeugt. Danach öffnet er die Datei aber
|
|
F34r0fTh3D4rk
      
Beiträge: 5284
Erhaltene Danke: 27
Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
|
Verfasst: Mo 17.07.06 20:46
ja kein ding, ist kein fehler, kannst weiter machen
|
|
joh88 
Hält's aus hier
Beiträge: 10
Delphi 5
|
Verfasst: Mo 17.07.06 20:55
Ja, wenn ich wüsste wie also hab hier diesen Pfad den muss ich erseimal abändern dahin wo die datei bei mir liegt oder?
UMain in 'L:\Projekte\Delphi\2D-Engine\UMain.pas';
und dann?
|
|