Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Ein Image auf ein andere Image zubewegen


twin20 - Mi 29.12.10 16:59
Titel: Ein Image auf ein andere Image zubewegen
Hallo,
Ich habe eine Frage. Wie bewege ich ein Image1 auf ein anderes Image2 zu? Image2 hat z.B. die Werte left=350 top=500 .
Wie kann ich jetzt das Image1 auf das andere zubewegen.


bummi - Mi 29.12.10 17:15

In einem Timer, per Button, per Mousemove .....
Left und/oder Top verändern.


twin20 - Do 30.12.10 12:40

Ja, des ist mir schon klar. Das Image2 bewegt sich aber ist also immer woanders. Gibt es da irgendwie eine allgemeine Formel oder so?


Narses - Do 30.12.10 12:49

Moin und :welcome: im Forum!

Ich werf mal den Bresenham Algorithmus [http://de.wikipedia.org/wiki/Bresenham-Algorithmus] in den Raum, suchst du sowas? :nixweiss:

cu
Narses


twin20 - Do 30.12.10 13:00

Also, Ich muss ein Spiel programmieren. Mein Problem ist das ich meine Spielfigur(Image2) ja bewege. Der Gegenspieler(Image1) soll dann in regelmäßigen Abständen in Richtung Image2 schießen, sodass er auch treffen würde wenn sich image2 nicht bewegt.


Narses - Do 30.12.10 13:54

Moin!

user profile icontwin20 hat folgendes geschrieben Zum zitierten Posting springen:
Mein Problem ist das ich meine Spielfigur(Image2) ja bewege. Der Gegenspieler(Image1) soll dann in regelmäßigen Abständen in Richtung Image2 schießen, sodass er auch treffen würde wenn sich image2 nicht bewegt.
Und was ist jetzt das Problem? :gruebel:

cu
Narses


twin20 - Do 30.12.10 14:34

Ich weiß nicht was für ein Befehl ich verwenden muss ,sodass image1 ,egal wo image2 ist, auf image2 schießt


platzwart - Do 30.12.10 15:04

Dafür gibt es keinen Befehl. Das musst du selbst prgrammieren. Dazu google mal nach: Image, Canvas, MoveTo, LineTo, Pixels[x, y], ...


twin20 - Do 30.12.10 15:09

Ich benutze canvas nicht. Ich wollte nur mal ein Tipp oder einen möglichen Lösungsweg,da ich bei google nichts gefunden habe.


thepaine91 - Do 30.12.10 15:10

Narses hat dir doch einen Tipp gegeben?!


Narses - Do 30.12.10 15:11

Moin!

Wie hast du denn das "Schießen" bisher überhaupt umgesetzt? Davon hängt ab, wie man das machen könnte. :idea:

cu
Narses


platzwart - Do 30.12.10 15:20

Canvas ist doch ein Tipp und die Lösungsstrategie hab ich dir doch auch mit den Befehlen gegeben :roll: Irgendwas muss ja 'als Schuss' zwischen die beiden Images (wieso auch immer Images)...


thepaine91 - Do 30.12.10 15:24

Naja aber am Anfang sollte sich Image1 auf Image2 zubewegen daher ist Image1 der Schuss oder der Schütze? ^^
Und der Quelltext wäre durchaus hilfreich...


twin20 - Do 30.12.10 15:33

Image1 ist die Spielfigur. Der Gegner ist image3 und image2 ist der Schuss. Ich habe einen Gegner der immer gradeaus schießt. Jetz will ich noch einen Gegner der weiter oben steht und auf image1 schießt. Image1 bewegt sich ja logischerweise und mein Problem ist jetzt das ich den Schuss (image2) auf image1 zubewegen will die left und top werte von image1 sich aber ändern können.


Narses - Do 30.12.10 15:41

Moin!

user profile icontwin20 hat folgendes geschrieben Zum zitierten Posting springen:
Image1 bewegt sich ja logischerweise und mein Problem ist jetzt das ich den Schuss (image2) auf image1 zubewegen will die left und top werte von image1 sich aber ändern können.
Insgesamt gesehen ist das so, dass sich Image1 (Spieler) bewegt, aber zum Zeitpunkt des Abschusses nicht, da hat er eine ganz bestimmte Position, und dahin muss dein Schuss fliegen. :idea: Also einfach die Schusskoordinaten per Bresenham (s.o.) in einem Array vorberechnen und dann mit dem Projektil "ablaufen". ;)

cu
Narses


twin20 - Do 30.12.10 15:47

Danke für die Antwort,
Kannst du mir nochmal erklären wie ich die Schusskoordinaten in einem Array vorberechne
Ich hab erst seit kurzem mit Delphi angefangen.


Narses - Do 30.12.10 15:57

Moin!

user profile icontwin20 hat folgendes geschrieben Zum zitierten Posting springen:
Danke für die Antwort,
Gern geschehen. ;)

user profile icontwin20 hat folgendes geschrieben Zum zitierten Posting springen:
Kannst du mir nochmal erklären
Hm, wieso "nochmal"? Habe ich doch noch gar nicht. :P

user profile icontwin20 hat folgendes geschrieben Zum zitierten Posting springen:
wie ich die Schusskoordinaten in einem Array vorberechne
user profile icontwin20 hat folgendes geschrieben Zum zitierten Posting springen:
Ich muss ein Spiel programmieren.
Damit wir uns gleich richtig verstehen: DU sollst ein Spiel programmieren, nicht wir. :D Also machst du mal einen Vorschlag, am besten mit Code, wie man da ran geht, dann verbessern wir das zusammen. Wir werden dir nicht deine Hausaufgaben machen. :idea:

user profile icontwin20 hat folgendes geschrieben Zum zitierten Posting springen:
Ich hab erst seit kurzem mit Delphi angefangen.
Das ist eine Tatsache, aber keine Ausrede. :zwinker:

cu
Narses


twin20 - Do 30.12.10 16:02

Ok Ok ,ich wollt nur fragen nicht gleich den fertigen Quelltext
trotzdem danke für deine Antwort.


Narses - Do 30.12.10 16:05

Moin!

user profile icontwin20 hat folgendes geschrieben Zum zitierten Posting springen:
Ok Ok ,ich wollt nur fragen nicht gleich den fertigen Quelltext
trotzdem danke für deine Antwort.
Kein Thema, und richtig, du hast nicht nach fertigem Quelltext gefragt. ;)

Also, mach einen Code-Vorschlag, dann geht´s hier weiter. :zustimm:

cu
Narses


twin20 - Sa 01.01.11 21:28

Also, Ich hab mir nochmal was überlegt. Die Bahn auf der sich der Schuss(Image2) bewegt ist ja die Hypothenuse des Dreiecks zwischen image1 und der Anfangsposition von image2. Meine Frage ist also ob ich mit delphi irgendwie Satz des Pytagoras machen kann und dann die Hypothenuse ausrechne. Somit hab ich dann die Bahn auf der Image2 sich bewegen muss.


platzwart - Sa 01.01.11 23:02

Das kannst du mit Delphi machen.


Xion - Sa 01.01.11 23:17

Also mal ganz banal:

Du nimmst den Differenzvektor zwischen Figur1 und Figur2. Den normierst du. Diesen normierten Differenzvektor entlang bewegst du jetzt mit jedem Timerintervall deinen "Schuss".


twin20 - So 02.01.11 16:26

Ok ,danke für die Hilfe :D

---Moderiert von user profile iconNarses: Beiträge zusammengefasst---

Ich hab ein Probelem, wenn ich c ausrechen will, das mache ich so:

Delphi-Quelltext
1:
sqrt((601-image1.left)*(601-image1.left)+  185*185):=x;                    
kommt der Fehler Der linken Seite kann nichts zugewiesen werden. Was mache ich falsch?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Stundenplan - So 02.01.11 18:27

Logischer müsste doch x := sqrt((601-image1.left)*(601-image1.left)+  185*185); sein, oder?
Du möchtest doch x etwas zuweisen, nicht dem Term! ;-)

Viele Grüße,
Stundenplan.


twin20 - So 02.01.11 18:40

Ok,ich hab es jetzt anders hinbekommen. Danke für eure Hilfe.