CaliTuner1988 - Fr 30.03.07 12:15
Titel: delphiX-objekt per mausklick steuern
Hallo,
ich bin gerade dabei im Rahmen eines Schulprojekts ein Adventure Game mit Delphi (DelphiX) zu programmieren, bin auch schon recht weit damit gekommen, allerdings lässt sich die Person (das Objekt) bislang nur per Tastatur steuern und ich hätte gerne, dass ich mit der Maus wohin klicke und sich die Person (das Objekt) in Schritten (mit der animation die dabei ist) dorthin bewegt, kann mir jemand sagen wie ich das am besten mache oder hat jemand nen gutes tutorial dafür??
Ich danke schonmal!
Gruß
CaliTuner1988
Moderiert von
Christian S.: Topic aus Delphi Tutorials verschoben am Fr 30.03.2007 um 17:11
CaliTuner1988 - So 01.04.07 21:50
Okay, habe das ganze nun hinbekommen.
Hier noch der Quellcode, vllt. hilfts ja jemandem!
Habe das ganze in einer Klasse:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| type TPlayer = class(TImageSprite) public procedure DoMove(MoveCount: Integer); override; procedure DoCollision(Sprite: TSprite; var Done: Boolean); override; end; |
Wobei wir die procedure DoCollision hierbei ausser acht lassen (am besten auskommentieren mit '//' davor, weil sonst das Programm nicht gestartet werden kann).
nun machen wir uns an die procedure DoMove:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32:
| procedure TPlayer.DoMove(MoveCount: Integer); begin inherited DoMove(MoveCount); AnimStart := 0; AnimCount := 0; If ((isup in Form1.DXInput1.States) and not (isdown in Form1.DXInput1.States)) or (player1.y > spieler2y) then with Player1 do begin y := y - 1; end; If ((isdown in Form1.DXInput1.States) and not (isup in Form1.DXInput1.States)) or (player1.y < spieler2y) then with Player1 do begin y := y + 1; end; If ((isright in Form1.DXInput1.States) and not (isleft in Form1.DXInput1.States)) or (player1.x < spieler2x) then with Player1 do begin image := Form1.Spieler.Items[0]; AnimStart := 0; AnimCount := image.patterncount - 1; x := x + 1; end; If ((isleft in Form1.DXInput1.States) and not (isright in Form1.DXInput1.States)) or (player1.x > spieler2x) then with Player1 do begin image := Form1.Spieler.Items[1]; AnimStart := 0; AnimCount := image.patterncount - 1; x := x - 1; end; end; |
Kurze erklärung dazu:
Die Figur kann mit Tastatur und Maus gesteuert werden - deshalb der DXInput.State für die Tastatur-steuerung und dahinter das, was ich für die maussteuerung benutzt habe.
player1.y ist der y-wert der figur, spieler2y ist eine variable, in der der y-wert des mausklicks drinsteht.
ist die Bewegung auf der y-Achse in die untere Richtung (der Wert 0/0 liegt in der linken oberen Ecke - also je höher die werte, desto weiter liegen sie auf dem desktop unten).
Delphi-Quelltext
1: 2: 3:
| image := Form1.Spieler.Items[1]; AnimStart := 0; AnimCount := image.patterncount -1; |
gehört zur animation - 'image :=' wählt das Bild aus, 'AnimStart := 0' legt fest, mit welchem der in der reihenfolge vorhandenen Bilder angefangen wird, hier 0 (das erste) und 'AnimCount := image.patterncount -1;' bedeutet, dass die Animation gezählt wird - pattern bedeutet, wieviele Bilder zum animieren da sind, bei mir zählt er irgendwie eins mehr und deshalb zieh ich 1 ab, bevor meine animation flackert.
Gruß
CaliTuner1988