AGB  ·  Datenschutz  ·  Impressum  







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

Zielsuchende Objekte

Ein Thema von Dunkelbunt27 · begonnen am 10. Aug 2010 · letzter Beitrag vom 12. Aug 2010
Antwort Antwort
blackfin
(Gast)

n/a Beiträge
 
#1

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 16:15
Zitat:
Wenn jemand genau beschreiben kann dies mit Open Gl zu verwirklichen wär ich auch dankbar, hauptsache wir bekommen eine Linie gezogen.
Naja, so einfach ist das ja nun nicht, einfach mal für den Laser OpenGL zu verwenden
Wenn, dann wäre ALLES OpenGL und der Canvas wäre auch für die Schiffe erstmal Essig.
OpenGL ist keine Zusatzkomponente, sondern eine generelle Grafik-Library, die du aber mit einem Canvas / GDI nicht mischen kannst (zumindest für die Elemente im OGL-Context). Dazu musst du auch erstmal einen OpenGL-Context erstellen und ab da hast du es nur noch mit Vektoren und Matrizen zu tun.
Deinen Canvas-Code kannst du dann erstmal komplett in die Tonne kloppen, da OpenGL gänzlich anders funktioniert.
Also würde ich das erstmal lassen und mich vielleicht parallel in das Konzept von OpenGL oder auch alternativ Direct3D einlesen.
Die Lernkurve ist hier ziemlich steil. Allerdings, sollte daraus wirklich mal ein Spiel werden, würde ich den Canvas eh vergessen, weil viel zu langsam.
Ist es nur ein Projekt für den Lehrer, dann ist es ja egal. Aber ein richtiges Spiel wird da wohl nicht draus
Andererseits würdest du den Lehrer mit OpenGL sicherlich beeindrucken , ich vermute nämlich mal, dass er selbst keine Ahnung davon hat...
Allerdings schreibt man nicht "mal eben" ein Spiel mit OpenGL, da man erstmal (relativ lange) kapieren muss, wie da der Hase läuft.
Das ist ungefähr so, als könntest du BobbyCar fahren und sattelst dann auf einen 40-Tonner um

Was bekommst du denn dann mit dem Canvas nicht hin?
Du weisst ja, wann die Schiffe an ihrem Zielpunkt angelangt sind, dann feuer doch ein Event, der dann mit LineTo oder sonstwas die Linie zeichnet?

Geändert von blackfin (11. Aug 2010 um 16:23 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.874 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 16:16
Oder man verwendet etwas "Fertiges" wie Andora2D usw
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#3

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 16:30
"Dann feuer doch ein Event" xD fand ich grad geil ^^
naja also es ist so ich habe LEIDER zu hause nur Lazarus... Ich habe folgendermaßen versucht eine linie zu ziehen:
moveto zum schiff und lineto zur base, ich fand es klingt logisch, dann aber kam statt der line ein ständig komplett schwarz weiß flackernder bildschirm.
Vllt kannst du ja mal einen kurzen quellcode ausschnitt aufschreiben der das schiff schiffx und schiffy (koordinaten) mit Mittex und mittey durch eine linie verbindet.
wäre zur fehlerfindung sehr hilfreich =)
Dunkelbunt

Edit: gerade nochmal ausprobiert, wieder flackern:
Hier der Quelltext:

Delphi-Quellcode:
if laenge = 100 then
 begin
      image1.canvas.moveto(shape1.left, shape1.top);
      image1.canvas.lineto(shape1.left, shape1.top);
  end;

Geändert von Dunkelbunt27 (11. Aug 2010 um 16:36 Uhr)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#4

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 16:55
Zitat:
image1.canvas.moveto(shape1.left, shape1.top);
image1.canvas.lineto(shape1.left, shape1.top);
Öhm...du zeichnest eine Line auf den gleichen Punkt wie den Startpunkt? Das ergibt nicht soviel Sinn

Ich kenne jetzt deinen Code nicht, aber ich schätze mal, dass das Flackern daher kommt, dass das Shape das Image überlappt...?

Edit:
Das ist generell keine gute Idee. Wenn du eine Zeichenfläche hast, dann sollte die auch für sich alleine stehen und nicht durch andere Objekte überlagert werden, das gibt sonst Chaos bei den Repaint-Zyklen der einzelnen Objekte.
Sinnvoller wäre es doch, die Schiffe auch auf den Canvas zu zeichnen, anstatt dafür jeweils ein einzelnes Shape zu nehmen.


Poste mal bitte ein wenig mehr code.

Geändert von blackfin (11. Aug 2010 um 16:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#5

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 16:58
Hab einen fehler gemacht:
so ist mein eigentlicher Quelltext:
Delphi-Quellcode:
if laenge = 100 then
 begin
      image1.canvas.moveto(shape1.left, shape1.top);
      image1.canvas.lineto(round(mittex), round(mittey));
  end;
und das image ist bildschirmfüllend, also kann das shape das image nicht überlappen

Edit: du wolltest etwas Quelltext^^ Hier hast du =)

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
n : integer;
begin
shape1.visible := True;

  Timer1.enabled := True;
    randomize;
    n := random(4)+1;

  if (n=1) or (n=2) or (n=3) then
  begin
  randomize;
   shape1.left:= 5;
   shape1.top:= random(775+1);
 end;

  if n=2 then
  begin
   randomize;
   shape1.left:= random(1320+1);
   shape1.top:= 5;
 end;

 if n=1 then
  begin
   randomize;
   shape1.left:= 1300;
   shape1.top:= random(775+1);
 end;

   if n=2 then
  begin
   randomize;
   shape1.left:= random(1320+1);
   shape1.top:= 775;
 end;
end;

procedure TForm1.Image1Click(Sender: TObject);
begin

end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
 mittex := shape2.Left;
 mittey := shape2.top;
 schiffx := shape1.left;
 schiffy := shape1.top;
 vx := mittex-schiffx;
 vy := mittey-schiffy;
 

 laenge := sqrt(sqr(vx)+sqr(vy));
 if laenge >100 then
 begin
 vx := vx/laenge;
 vy := vy/laenge;
 
 schiffx :=round(schiffx+vx*1);
 schiffy := round(schiffy+vy*1);
 
 shape1.left := round(schiffx);
 shape1.top := round(schiffy);
 
 if laenge = 100 then
 begin
      image1.canvas.moveto(shape1.left, shape1.top);
      image1.canvas.lineto(round(mittex), round(mittey));
  end;

Geändert von Dunkelbunt27 (11. Aug 2010 um 17:08 Uhr)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#6

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 17:03
Zitat:
und das image ist bildschirmfüllend, also kann das shape das image nicht überlappen
Ähh..doch? Es liegt ja wohl über dem Image, oder? Wenn du dann aufs Image was zeichnest und das Shape überlappt, dann kommt es zu einem Refresh des Shapes und das flackert dann.

Kannst du dein Projekt mal anhängen? Ich fürchte irgendwie, dass es konzeptionell überdenkbar ist bzw. ich hab da so ein "Sackgassen"-Gefühl gerade in der unteren Bauchgegend

Geändert von blackfin (11. Aug 2010 um 17:15 Uhr)
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.688 Beiträge
 
Delphi 2007 Enterprise
 
#7

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 17:59
Dann solltest du GANZ dringend einen Arzt aufsuchen!
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

Registriert seit: 10. Aug 2010
232 Beiträge
 
Delphi XE Professional
 
#8

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 18:05
Okay mein Projekt im Anhang =)
Deine Idee mit:
Zitat:
Sinnvoller wäre es doch, die Schiffe auch auf den Canvas zu zeichnen, anstatt dafür jeweils ein einzelnes Shape zu nehmen.
ist gar nicht schlecht. So lässt es sich auch leichter realisieren mehrere Schiffe gleichzeitig zu starten.
Schau dir das projekt an ^^

Anhang jetz da =O
Hoffe die unit datei reicht =O weil alles andere irgendwie bei hochaden eine fehlermeldung bekam (auch ne 2 teilige rar datei)
Angehängte Dateien
Dateityp: pas unit1.pas (1,7 KB, 2x aufgerufen)

Geändert von Dunkelbunt27 (11. Aug 2010 um 18:26 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


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 08:37 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