![]() |
Jump"n"run
hallo,
Ich möchte ein Jumpnrungame im stil von super mario programmieren.Mein Problem ist, dass ich nicht weiß, wie er diagonal( nach oben und zur seite gleichzeitig) springen kann und wie man die Scrollbar programmieren muss, dass die Figur immer in der mitte der Form ist. :gruebel: Ich habe 3 timer, 1 shape, und 2 textboxen(zur überprüfung der Variablen). Hier mein Quellcode bis jetzt:
Delphi-Quellcode:
unit Unit1;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls; type TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; Timer1: TTimer; Edit1: TEdit; links: TTimer; Edit2: TEdit; rechts: TTimer; procedure linksTimer(Sender: TObject); procedure rechtsTimer(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form1: TForm1; y : integer; // für den Sprung t : integer = 0; // für den Sprung d : integer = 7; // für den Sprung k : integer = 3; // Für den Turbo zr : integer = 0; // Zeit für Timer: Rechts zl : integer = 0; //Zeit für Timer: Links implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin close; end; procedure TForm1.Button2Click(Sender: TObject); begin t := 0; if timer1.Enabled = false then timer1.Enabled := true; end; procedure TForm1.Timer1Timer(Sender: TObject); var yy : integer; v : integer; begin t := t + 1; v := 50 div d; yy := abs(round(100*sin(t/v))); edit1.Text := inttostr(yy); shape1.Top := y - yy; if round(100*sin(t/v)) <= 0 then timer1.enabled := false; If g = 1 then shape1.Left := shape1.Left + 5; end; procedure TForm1.FormCreate(Sender: TObject); begin y := shape1.top; end; procedure TForm1.FormKeyPress(Sender: TObject; var Key: Char); begin if key = #119 then begin //Sprung t := 0; if timer1.Enabled = false then timer1.Enabled := true; end; if key = #100 then begin //Laufen nach rechts zr:= 0; if rechts.Enabled = false then rechts.Enabled := true; end; if key = #97 then begin //Laufen nach links zl:= 0; if links.Enabled = false then links.Enabled := true; end; end; :coder2: Danke im Voraus!!! |
DP-Maintenance
Dieses Thema wurde von "Christian Seehase" von "Datenbanken" nach "Sonstige Fragen zu Delphi" verschoben.
Kein Datenbank-Problem |
Re: Jump"n"run
da würde ich dir jetzt fast dazu raten, alle x millisekunden den tastaturstatus mit
![]() Natürlich kannst du auch im OnKeyDown Variablen setzen und im OnkeyUP wieder entsetzen :zwinker:
Delphi-Quellcode:
Das ganze musst du dann natürlich im Timer-Event auswerten.
//global:
type TKeys = (left,right,up,down); //das hier ist ein aufzählungstyp var keysdown = set of TKeys; //das hier ist eine Menge procedure TForm1.OnkeyDown(Sender: TObject, var Key: Integer); begin case Key of vk_left: keysdown = keysdown + left; // hier fügst du der menge eine wert hinzu //etc. end; // dasselbe für onkeyup, nur dann mit - EDIT: ach ja übrigens, ich hab jetzt glaub ich schon 6 threads von dir gesehen, und in zwei geantwortet... meinst du nicht, das reicht jetzt dann mal wieder ;) ? im übrigen kann ich dir empfehlen, da du in Delphi neu scheinst, die mal die Tutorial auf ![]() |
Re: Jump"n"run
Danke erstmal für deine Hilfe! (also 6 Threads warns nich, sondern 2) - Ich habe mit Delphi erst neu angefangen und deswegen kenne ich mich noch nicht so gut aus - Die Community ist aber super hier!!! Ich werde mir das Tutorial jetzt mal anschauen.Ich hoffe,dass das dann auch mit dem JumpnRun klappt. :mrgreen:
|
Re: Jump"n"run
jo, sorry, hab dich wohl mit Erdnusslocke verwechselt... :oops:
|
Re: Jump"n"run
np, aber ich dachte, dass es für Fragen das Forum gibt :wink: . Ich wüsste nämlich noch gerne, ob man einem TImage während der Laufzeit des Programms z.B. per Buttonklick ein anderes Picture verpassen kann (Das habe ich leider nicht in den Tutorials gefunden), damit wäre es dann möglich eine kleine einfache Animation zu erstellen. Falls da jemand etwas weis, bitte melden (ohne OpenGL oder DirectX zu benutzen)
|
Re: Jump"n"run
könnte mir vllt jemand mit diesem Problem helfen oder Tipps geben etc. plz :hi:
|
Re: Jump"n"run
Du kannst andere TBitmaps per TImage.Canvas.Draw (= TImage.Picture.Bitmap.Canvas.Draw) auf das OffScreenBitmap des Images zeichnen.
|
Re: Jump"n"run
Aha, vielen Dank :!: Soweit so gut, nur jetzt kommt ein Problem auf - Ich weis jetzt nicht, wie ich ein anderes Bild da rein zeichnen soll, den Befehl dazu habe ich ja schon mal :wiejetzt: . Aber muss man jetzt in der ...Canvas.Draw() <--Klammer den Pfad des Bildes angeben, das er laden soll ?? Vllt. könnte mir ja jemand freundlicherweise :cheers: ein kleines Beispiel geben. :coder: :-D
|
Re: Jump"n"run
Also ich verstehe einfach nicht, wie das mit Onkeyup und Onkeydown gehen soll, denn wenn ich z.B. das hier schreibe :
Delphi-Quellcode:
tut sich einfach gar nichts.
unit Unit2;
interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, System.ComponentModel, Borland.Vcl.StdCtrls; type TForm2 = class(TForm) Edit2: TEdit; procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } public { Public-Deklarationen } end; var Form2: TForm2; implementation {$R *.nfm} procedure TForm2.FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState); begin // Schießen if key =VK_SPACE then form2.Width := 300; end; end. Das war ja jetzt für Keydown,aber für OnkeyUP,Onkeydown und Keydown find ich einfach nix ALso brauch man da noch eine Prozedur oder so.Vllt könnte Jemand einfach nen kleinen Quellcode hier rein posten. Ich weis, das es bestimmt einer weis, also wäre es gut,wenn mir jemand mit dem eigentlich kleinen Problem weiter helfen würde. |
Re: Jump"n"run
Dein letzter Quelltext ist VCL.NET, hast du dich vielleicht bei den Projekten verklickt?
|
Re: Jump"n"run
Nein, ich hab das so gelernt, mit VLC anwendungen zu arbeiten. Ist das schlecht und kann mir Jemand die oben genannte Frage beantworten bitte.
|
Re: Jump"n"run
Also ich hab mit OnKeyDown und Leertaste keine Probleme... eventuell mal die Eigenschaft KeyPreview des Forms auf True setzen?! Hat mir bei meinen Anfängen meistens geholfen :-D
Nur warum machst du eigentlich einmal ein .NET Projekt (siehe #10) und einmal ein normales (siehe #1)?! Oder irre ich mich da?! :gruebel: |
Re: Jump"n"run
ouu...ich finde, das ist doch jetzt egal zum Verständnis.
--------------> Bitte schreib mir doch mal ein kleines Beispiel und tus in den Anhang oder poste es hier rein, es wäre mir wirklich sehr hilfreich, ich selbst bekomme es einfach nicht hin, obwohl ich keypreview auf true gesetzt habe, ein kleines Progrämmchen mit Onkeyup würde mir doch schon ausreichen. BITTTTTEE helft mir :coder2: |
Re: Jump"n"run
Man ist ja ein freundlicher Mensch :-D
Also: Zieh ein Memo aufs Form und stell ReadOnly auf TRUE; Setze KeyPreview des Forms auf TRUE und erstell die Events OnKeyUp und OnKeyDown des Forms. Hier der Code:
Delphi-Quellcode:
Dann kompiliere und drücke ein wenig auf der Tastatur rum... es müsste dann die Nummer der Taste und ob losgelassen oder gedrückt angezeigt werden... :-D
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState); begin Memo1.Lines.Add(Format('Taste %d gedrückt',[Key])); end; procedure TForm1.FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); begin Memo1.Lines.Add(Format('Taste %d losgelassen',[Key])); end; |
Re: Jump"n"run
Mmh, scheint gut zu sein, aber wenn ich Memo in die Form ziehe, KeyPreview und Readonly umstelle und schließlich noch das oben stehende hereinkopiere markiert er [...].FormKeyUp und FormKeyDown rot,also sie sind rot unterstrichen (???)
Wenn ich mit der Maus darüberfahre erhalte ich die Meldung : "TFormX(x ist bei mir 2) enthält kein Element namens "FormKeyUp" " Fehlt da noch irgendwas oder ist es so , weil ich VLC Formularanwendung benutze??? Irgendwie muss er das ja erkennen. Muss man da vllt. noch procedur... unter type schreiben. Hmm...ich bin ratlos |
Re: Jump"n"run
du musst einmal bei deiner Form OnKeyDown bzw OnKeyUp erstellt haben (doppelt darauf klicken) und bei dem Beispiel die Zahl der form natürlich durch die deiner Form ersetzen
|
Re: Jump"n"run
@inherited: Da war jmd schneller als ich... :mrgreen:
@hans101: Ich dachte ich hätte das mit Zitat:
|
Re: Jump"n"run
ja, aber ich bin eben ein Anfänger in Delphi und habe keine Ahnung, was mit "erstell die Events OnkeyUP etc." gemeint ist :?:
|
Re: Jump"n"run
Wie kann man diese Events erstellen?
|
Re: Jump"n"run
Also: Du hast links doch den ObjektInspektor, wo du auch zB des KeyPreview setzen kannst... dort gibt es oben die beiden Felder "Eigenschaften" und "Ereignisse" (bzw. "Properties" und "Events" bei der Englischen Version). Du klickst bei angewählten Form auf Ereignisse und suchst in der Liste dann nach dem gewünschten Ereignis. Rechts neben dem Ereignis vollführst du einen Doppelklick und die Prozedur für das Eregnis müsste im Quelltext erscheinen.
Voila! :-D |
Re: Jump"n"run
Zitat:
|
Re: Jump"n"run
:mrgreen: Also ich danke 1000mal für die hilfreichen Antworten, echt super! Jetzt funktioniert alles
- bis jetzt, ich freue mich schon bald auf neue Beantwortungen meiner Fragen :wink: Einfach eine suuper Community :dancer2: :hello: :hello: |
Re: Jump"n"run
Ich hätte mal wieder eine Frage:
Kharbarakh hat mal gesagt, dass man eine Animation über TImages erstellen kann: "Du kannst andere TBitmaps per TImage.Canvas.Draw (= TImage.Picture.Bitmap.Canvas.Draw) auf das OffScreenBitmap des Images zeichnen" Doch jetzt kenne ich zwar den Befehl, aber ich weis noch nicht, wie ich das Bild dann hinein laden kann oder welchen Pfad man dann angeben muss. :?: :cry: Vllt. könnt Ihr mir ja dazu etwas sagen??? |
Re: Jump"n"run
Kann mir bitte jemand bei diesem Problem helfen :lol:
|
AW: Jump"n"run
Wenn du das Bild, das im Image angezeigt wird ändern willst kannst du das über folgenden Befehl
Delphi-Quellcode:
.
image1.picture.loadfromfile('dateiname');
Wichtig: -Der Dateiname muss auch die Dateiendung (z.B. .jpg ) enthalten und in '...' stehen. -Nach obiger Schreibweise muss die Bilddatei im gleichen Verzeichnis wie die Projektdatei und die units sein. Falls die zu ladende Bilddatei woanders gespeichert sein sollte, musst du den kompletten Pfad angeben Hoffe ich hab dein Problem richtig verstanden p.s. hatte irgendwer jetzt eine Idee wie das mit dem srollen der map funktioniert? |
AW: Jump"n"run
Ob ihm das nach fast 8 Jahren weiterhilft?
|
AW: Jump"n"run
Zitat:
|
AW: Jump"n"run
Zitat:
Und die Projektdatei (dpr/dpk) ist nicht die Programmdatei (exe), welche nach dem Kompilieren auch nicht im selben Verzeichnis liegen muß. (jenachdem, was als Ausgabeverzeichnis angegeben wurde) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 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 by Thomas Breitkreuz