![]() |
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. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:31 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