AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kollision/Abschuss

Ein Thema von Koki · begonnen am 7. Mär 2006 · letzter Beitrag vom 20. Mär 2006
Antwort Antwort
Seite 1 von 2  1 2      
Koki

Registriert seit: 11. Jan 2006
16 Beiträge
 
Delphi 2005 Personal
 
#1

Kollision/Abschuss

  Alt 7. Mär 2006, 09:36
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
  Mit Zitat antworten Zitat
mgubler

Registriert seit: 14. Jul 2002
Ort: Krefeld
115 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Kollision/Abschuss

  Alt 7. Mär 2006, 10:21
wie wäre es denn mit ein wenig code???
ich kann mir leider gerade gar nicts vorstellen.
wie löst du denn das bisher?
Gruß,
mgubler
  Mit Zitat antworten Zitat
Angel4585

Registriert seit: 4. Okt 2005
Ort: i.d.N.v. Freiburg im Breisgau
2.199 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Kollision/Abschuss

  Alt 7. Mär 2006, 10:27
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.
Martin Weber
Ich bin ein Rüsselmops
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Kollision/Abschuss

  Alt 7. Mär 2006, 16:11
Zitat:
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
Nimmst du DX, DelphiX, Canvas, OpenGL...??? tut mir leid aber damit können wir nichts anfangen,
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Koki

Registriert seit: 11. Jan 2006
16 Beiträge
 
Delphi 2005 Personal
 
#5

Re: Kollision/Abschuss

  Alt 13. Mär 2006, 13:05
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.
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Kollision/Abschuss

  Alt 13. Mär 2006, 15:38
Zitat von Koki:
Delphi-Quellcode:
procedure TForm1.Beenden1Click(Sender: TObject);
 begin
  close;
 end;
halt; ist da besser als
close; Das mit Images zu lösen ist langsam und unschön
Aber wenn du darauf beharrst könnte man das mit überprüfung von Schuss.Top und Schiff.Top...machen
Besser ist jedoch das mit Hier im Forum suchenDelphiX zu machen
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Koki

Registriert seit: 11. Jan 2006
16 Beiträge
 
Delphi 2005 Personal
 
#7

Re: Kollision/Abschuss

  Alt 14. Mär 2006, 09:10
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???
  Mit Zitat antworten Zitat
mquadrat

Registriert seit: 13. Feb 2004
1.113 Beiträge
 
Delphi XE2 Professional
 
#8

Re: Kollision/Abschuss

  Alt 14. Mär 2006, 09:55
Off-Topic: Jetzt weiß ich, warum uns in der Uni immer eingeprügelt wird sprechende Variablenbezeichnungen zu nutzen...
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#9

Re: Kollision/Abschuss

  Alt 14. Mär 2006, 15:50
Die unsaubere methode:
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
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Koki

Registriert seit: 11. Jan 2006
16 Beiträge
 
Delphi 2005 Personal
 
#10

Re: Kollision/Abschuss

  Alt 15. Mär 2006, 10:16
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz