![]() |
Kollision/Abschuss
ich hab schon viele themen dazu in euerm forum gesehn
nun aber mein problem ich versteh es nicht richitg ich feuer eine kugel ab und die soll solange zu sehn sein bis sie auf ein raumschiff trifft, außerdem sollen mindesten 5 kugeln gleichzeitig unterwegs sein |
Re: Kollision/Abschuss
wie wäre es denn mit ein wenig code???
ich kann mir leider gerade gar nicts vorstellen. wie löst du denn das bisher? |
Re: Kollision/Abschuss
also ich hab das mal mit Threads gelöst..
ein kleines Spiel mit Panzern.. allerdings fängt es ab 100 Panzern an zu ruckeln. Du erzeugst für jede Kugel einen Thread und übergibts die Startposition und die Richtung. Dieser erzeugt wiederum ein TBitmap, wo du die Kugel drauf zeichnest.. ein einfacher Punkt sollte genügen. Jetzt gehst du im Thread.Execute hin und verschiebst alle 100ms oder so deine Kugel von der aktuellen position um ein paar Pixel in die Richtung. wenn das ganze kollidiert gibst du das Bitmap frei. |
Re: Kollision/Abschuss
Zitat:
|
Re: Kollision/Abschuss
jo also hier ist mein bisheriger quellcode
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus, Buttons; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; MainMenu1: TMainMenu; Datei1: TMenuItem; Start1: TMenuItem; Beenden1: TMenuItem; Timer1: TTimer; Timer2: TTimer; Image4: TImage; Image5: TImage; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Beenden1Click(Sender: TObject); procedure Start1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; a,b,i,x,y:integer; implementation {$R *.dfm} procedure TForm1.Start1Click(Sender: TObject); begin form1.doublebuffered:=true; x:=0; y:=0; image1.picture.loadfromfile('space4.bmp'); image2.picture.loadfromfile('player1.bmp'); image3.picture.loadfromfile('ufo5.bmp'); image5.picture.loadfromfile('red02.bmp'); image2.Left:=x; image2.Top:=y; image4.Left:=a; image4.Top:=b; timer1.Enabled:=true; timer2.Enabled:=true; end; procedure Feuern(c,d:integer); begin form1.image4.picture.loadfromfile('bullet1.bmp'); c:=0; if c<>0 then begin end; end; procedure Tform1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var h: integer; begin form1.Caption:=inttostr(key); if key=37 then begin x:=x-5; a:=a-5; end; if key=38 then begin y:=y-5; b:=b-5; end; if key=39 then begin x:=x+5; a:=a+5; end; if key=40 then begin y:=y+5; b:=b+5; end; { if key=17 then begin Feuern(c,d); end; } end; procedure Tform1.Timer1Timer(Sender: TObject); begin image2.Left:=x; image2.Top:=y; end; procedure TForm1.Timer2Timer(Sender: TObject); begin image4.Left:=a; image4.Top:=b; end; procedure TForm1.Beenden1Click(Sender: TObject); begin close; end; end. |
Re: Kollision/Abschuss
Zitat:
Delphi-Quellcode:
ist da besser als
halt;
Delphi-Quellcode:
Das mit Images zu lösen ist langsam und unschön
close;
Aber wenn du darauf beharrst könnte man das mit überprüfung von Schuss.Top und Schiff.Top...machen Besser ist jedoch das mit ![]() |
Re: Kollision/Abschuss
jo kann sein aber das ist nur ein info projekt das ich nächsten mittwoch erstmal abgeben muss
bis dahin muss es mit images gehn wenn ich dann nach dem Abi noch zeit und lust hab befasse ich mich vielleicht mit delphi x könntet ihr mir ein anfang geben im programmcode und wie das aussehn muss ich weiss nähmlich nicht wie die schüsse dann weitelaufen ohne das ich eine taste drücke??? |
Re: Kollision/Abschuss
Off-Topic: Jetzt weiß ich, warum uns in der Uni immer eingeprügelt wird sprechende Variablenbezeichnungen zu nutzen...
|
Re: Kollision/Abschuss
Die unsaubere methode:
Delphi-Quellcode:
if (Schuss.Left < (Schiff.Left+Schiff.Width)) and ((Schuss.Left+Schuss.Width)>Schiff.Left) and (Schuss.Top < (Schiff.Top+Schiff.Height)) and ((Schuss.Top+Schuss.Height)> Schiff.Top) then Collision
|
Re: Kollision/Abschuss
danke erstmal dazu aber es gibt noch ein problem: er schiesst einfach nicht, ausserdem bewegt sich mein schiff nicht mehr was kann der fehler sein
-> die procedure mit der Kollision ist noch nicht eingefügt
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ExtCtrls, Menus, Buttons; type TForm1 = class(TForm) Image1: TImage; Image2: TImage; Image3: TImage; MainMenu1: TMainMenu; Datei1: TMenuItem; Start1: TMenuItem; Beenden1: TMenuItem; Timer1: TTimer; Timer2: TTimer; Image4: TImage; Image5: TImage; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); procedure Beenden1Click(Sender: TObject); procedure Start1Click(Sender: TObject); procedure Timer2Timer(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; a,b,i,x,y:integer; implementation {$R *.dfm} procedure TForm1.Start1Click(Sender: TObject); begin form1.doublebuffered:=true; x:=0; y:=0; image1.picture.loadfromfile('space4.bmp'); image2.picture.loadfromfile('player1.bmp'); image3.picture.loadfromfile('ufo5.bmp'); image4.picture.loadfromfile('bullet1.bmp'); image4.Visible:=false; image5.picture.loadfromfile('red02.bmp'); image2.Left:=x; image2.Top:=y; form1.image4.Left:=a; form1.image4.Top:=b; timer1.Enabled:=true; timer2.Enabled:=false; end; procedure Feuern; begin form1.image4.visible:=true; form1.timer2.enabled:=true; end; procedure Tform1.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); var h: integer; begin //form1.Caption:=inttostr(key); if key=37 then begin x:=x-5; end; if key=38 then begin y:=y-5; end; if key=39 then begin x:=x+5; end; if key=40 then begin y:=y+5; end; if key=17 then begin Feuern; end; end; procedure TForm1.Timer2Timer(Sender: TObject); begin a:=a+1; end; procedure TForm1.Beenden1Click(Sender: TObject); begin close; end; end. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:05 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz