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
Seite 2 von 3     12 3      
mkinzler
(Moderator)

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

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 16:19
Wenn man eine genügend kraftvolle Hardware hat
Markus Kinzler
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#12

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 16:48
Wenn man eine genügend kraftvolle Hardware hat
So langsam sind Floats nun auch wieder nicht... oder nutzt du etwa einen 10Mhz-Prozessor?
Ich habe für solche Zwecke immer Floats genommen und meistens betrug die CPU-Last ohne Grafikausgabe 0%.
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#13

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 16:55
Ich würde auf jedenfall floats nehmen. Sobald man irgendwann mal auf DX / OGL für die Grafik-Ausgabe umsattelt, hat man es eh nur noch mit floats zu tun.
Das Leistungs-Einbruchs-Argument verstehe ich nun jetzt aucc nicht so ganz...
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 17:04
Ich meinte das vor allem in Verbindung mit dem Canvas
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

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

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 17:07
Klasse, Zielsuchende random am Bildschirmrand erscheinende Schiffchen funktioniert.
Nächstes Problem ^^
Wir wollen das die Schiffe sobald sie halt nur noch 100 Pixel vom Ziel entfernt sind auf die Basis (Mitte) schießen.
Am infachsten(so denken wir) ist eine Rote Linie wie einen Laser vom Schiff zur Basis zu zeichnen.
Hier nun die Frage, wie funktioniert das? Ich hatte es schonmal mit canvas beschirben und jemand hat geantwortet lieber open GL zu benutzen. Open Gl ist uns leider nicht möglich, erstens weil wir davon leider keine ahnung haben und weil unser lehrer das ganze lieber mit canvas sehen würde.
Wenn jemand genau beschreiben kann dies mit Open Gl zu verwirklichen wär ich auch dankbar, hauptsache wir bekommen eine Linie gezogen.
Viele Liebe Grüße Dunkelbunt

EDIT: omg sry nächstes mal F5 drücken
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#16

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 17: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 17:23 Uhr)
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 17: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
 
#18

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 17: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 17:36 Uhr)
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#19

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 17: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 17:58 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Dunkelbunt27
Dunkelbunt27

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

AW: Zielsuchende Objekte

  Alt 11. Aug 2010, 17: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 18:08 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


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 18:23 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