Autor Beitrag
joh88
Hält's aus hier
Beiträge: 10


Delphi 5
BeitragVerfasst: 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

ausblenden volle Höhe Delphi-Quelltext
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>=0and (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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10


Delphi 5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: So 16.07.06 12:59 
Bitmaps (ich mache gerade alles ausm Kopf, also icuh bitte um Endschuldigung bei Fehlern (Schreibweise etc.) ;) ):

global Definieren:
ausblenden Delphi-Quelltext
1:
2:
3:
MainBmp: TBitmap;
MoorhuhnBmp: TBitmap
Huehner: array of TPoint;


im OnCreate:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
MainBmp:=TBitmap.Create;
MainBmp.Width:=Form1.Width; //wenn sich die Formulargröße deiens Forms ändern kann, dann musst du im OnResize-Ereignis die größen neu setzten und die Paint-Procedur erneut aufrufen ;).
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:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
procedure TForm1.FormPaint(Sender: TObject);
begin
 BitBlt(Form1.Canvas.Handle, 00, MainBmp.Width, MainBmp.Height, MainBmp.Canvas.Handle, 00, SrcCopy); //zeichnet das Bild in dien obere linke Ecke (0|0)
end;


Zeichenroutine (zeichnet nur die Hühner ;) );

ausblenden 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, 00, 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, 00, SrcCopy);
  end;
  BitBlt(Form1.Canvas.Handle, 00, MainBmp.Width, MainBmp.Height, MainBmp.Canvas.Handle, 00, SrcCopy); //aufs Form zeichnen
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 Threadstarter
Hält's aus hier
Beiträge: 10


Delphi 5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: So 16.07.06 14:02 
Kleiner Tipp: Benutz Suche in: Delphi-Forum, Delphi-Library 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 user profile iconFearoftheDark besser kann ...

_________________
>+++[>+++[>++++++++<-]<-]<++++[>++++[>>>+++++++<<<-]<-]<<++
[>++[>++[>>++++<<-]<-]<-]>>>>>++++++++++++++++++.+++++++.>++.-.<<.>>--.<+++++..<+.
F34r0fTh3D4rk
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10


Delphi 5
BeitragVerfasst: 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 :D 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: So 16.07.06 15:25 
alles mögliche wurde bereits genannt :lol:
joh88 Threadstarter
Hält's aus hier
Beiträge: 10


Delphi 5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2195

XP
D3Prof, D6Pers.
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2971

Windows Vista Ultimate
D7 Enterprise
BeitragVerfasst: 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 Threadstarter
Hält's aus hier
Beiträge: 10


Delphi 5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mo 17.07.06 19:55 
ein template ist dabei und eine ausführliche anleitung doch auch :roll:

user profile iconBlackheart666 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 Threadstarter
Hält's aus hier
Beiträge: 10


Delphi 5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mo 17.07.06 20:21 
de.wikipedia.org/wiki/Template

mit delphi die projekt datei öffnen
joh88 Threadstarter
Hält's aus hier
Beiträge: 10


Delphi 5
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 5284
Erhaltene Danke: 27

Win Vista (32), Win 7 (64)
Eclipse, SciTE, Lazarus
BeitragVerfasst: Mo 17.07.06 20:46 
ja kein ding, ist kein fehler, kannst weiter machen
joh88 Threadstarter
Hält's aus hier
Beiträge: 10


Delphi 5
BeitragVerfasst: 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?