| Autor |
Beitrag |
eindelphinutzer
Hält's aus hier
Beiträge: 1
|
Verfasst: Mo 21.02.05 15:15
Hi,
bin neu in diesem Forum und hoffe inständig auf eure Unterstützung.
Es geht um folgendes:
Mein Programm lässt eine "Rakete" senkrecht beschleunigen, wobei die Beschleunigung in der nächsten Version mithilfe physikalischer Formeln ablaufen sollte.
Mein Hauptproblem besteht darin, dass ich die Rakete mit Hilfe der Pfeiltasten steuern möchte.
Weiterhin würde ich die Shapes durch ein Image einer Rakete ersetzen.
Meine Frage ist nun, wie sich dies bewerkstelligen ließe.
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: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81:
| unit USilvester;
interface
uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, StdCtrls;
type TForm1 = class(TForm) Shape1: TShape; Shape2: TShape; Timer1: TTimer; Button1: TButton; Timer2: TTimer; Image1: TImage; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); procedure Timer1Timer(Sender: TObject); procedure Timer2Timer(Sender: TObject); private public end;
var Form1: TForm1; nr:integer; shape3:Tshape;
implementation
{$R *.DFM}
procedure TForm1.FormCreate(Sender: TObject); begin timer1.enabled:=false; timer1.interval:=100; timer2.enabled:=false; timer2.interval:=2; end;
procedure TForm1.Button1Click(Sender: TObject); begin nr:=0; timer1.enabled:=true; end;
procedure TForm1.Timer1Timer(Sender: TObject); begin nr:=nr+1; shape1.top:=shape1.top-nr; shape2.top:=shape2.top-nr; if shape1.top<50 then begin timer1.enabled:=false; shape3:=Tshape.create(form1); shape3.parent:=form1; shape3.shape:=stcircle; shape3.top:=shape2.top-50; shape3.left:=shape2.left-50; shape3.width:=10; shape3.height:=10; shape3.brush.color:=clyellow; shape3.brush.style:=bssolid; shape3.pen.color:=clyellow; timer2.enabled:=true; nr:=0; end; end;
procedure TForm1.Timer2Timer(Sender: TObject); begin nr:=nr+1; shape3.width:=shape3.width+nr; shape3.height:=shape3.height+nr; if shape3.width>200 then timer2.enabled:=false; end;
end. |
Vielen Dank im voraus.
Moderiert von AXMD: Code- durch Delphi-Tags ersetzt.
|
|
Wizard of OS
      
Beiträge: 19
Win95, Win98, Win2000, WinNT, Win XP
D5
|
Verfasst: Di 22.02.05 09:10
z.B. in FormKeyDown folgende Anweisungen
(KeyPreview des Forms auf true setzen)
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| case Key of VK_LEFT: dec(xpos,dx); VK_RIGHT: inc(xpos,dx); end;
Rakete.Left := xpos; |
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Di 22.02.05 17:09
Du nimmst eine Image komponente und zeichnes dort ein bild z.b. so:
Delphi-Quelltext 1:
| image1.canvas.draw(...) |
und steuern tus du wie es Wizard of OS gesagt hast....
achja du nimmst am beste eine Image liste....
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
der_zaehe
      
Beiträge: 317
WinXP SP2
D6 Pers, D2005 Prof, VS2005
|
Verfasst: Di 22.02.05 17:13
wie du deine rakete steuerst, hängt von der formel ab, die du verwendest. Ich denk mal, du musst da vektoriell über winkelfunktionen eine lineare komponente einfliessen lassen, die sich seitlich von der rakete wegrichtet.
Dazu würde ich dir empfehlen, gut in physik zu sein, sonst wird dat nix
oder ich hab deine problem falsch verstanden und es ist mehr programmiertechnischer natur denn physikalischer
_________________ [inspirationslos]
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: Di 22.02.05 21:56
Naja, das ist 10. Klasse Stoff. Von der Physik her sollte es ohne grössere Probleme zu machen sein.
Nur das ganze in Delphi umzusetzten dürfte eine grösseres Problem werden
Trotzdem viel Erfolg!
|
|
ossix
Hält's aus hier
Beiträge: 15
win 2000
D7 Pers
|
Verfasst: Mi 23.02.05 00:07
das ist simpelste vektorrechnung...
wenn auf die pfeiltaste gedrückt wird wird auf den raketenbewegungsvektor halt noch ein vektor festgelegter größe (da ist tuning angesagt, je nachdem wie du das ganze handlest und wie stark das ding beschleunigen soll) in richtung der raketenspitze addiert.
zusätzlich wird pro frame (oder pro zeiteinheit, je nach dem ob du frame-based-movement oder time-based-movement implementieren willst) die raketen position um den raketenvektor verschoben - wirklich nicht schwer...
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 05.03.05 15:02
ich versthe nicht was da so schwer sein soll, eine rakte fligt doch nur in y richtung oder nicht ? also einfach nur y+1 ??? nagut und eine zeitschleife und das wars doch auch schon....
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|
Karlson
      
Beiträge: 2088
|
Verfasst: Sa 05.03.05 18:18
Also wenn ich den Threadersteller richtig verstanden habe dann soll das eine richtige Rackete sein, wo die Flugbahn mit dem Schrägen Wurf berechnet wird.
|
|
mimi
      
Beiträge: 3458
Ubuntu, Win XP
Lazarus
|
Verfasst: Sa 05.03.05 18:40
du meinst also so das ist nicht nur einfach nach oben gehen soll sonndern das es möglich sein soll richtige flugbahnen anzugeben z.b.: von a nach b oder so ?
_________________ MFG
Michael Springwald, "kann kein englisch...."
|
|