AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi 2 Images gleichzeitig verschieben?
Thema durchsuchen
Ansicht
Themen-Optionen

2 Images gleichzeitig verschieben?

Ein Thema von LoW_FloW · begonnen am 10. Mär 2004 · letzter Beitrag vom 10. Mär 2004
Antwort Antwort
Benutzerbild von LoW_FloW
LoW_FloW

Registriert seit: 29. Nov 2003
117 Beiträge
 
Delphi 7 Professional
 
#1

2 Images gleichzeitig verschieben?

  Alt 10. Mär 2004, 11:51
Wie kann man mit Image.Left und Top usw. 2 Images gleichzeitig bewegen? Delphi tut immer zuerst eine Aktion durchführen und dann die andere. Betätigt nur Spieler 1 die Taste, damit seine Figur nach rechts geht, kann Spieler2 nix tun. Was kann man dagegen unternehmen
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#2

Re: 2 Images gleichzeitig verschieben?

  Alt 10. Mär 2004, 11:53
Verstehe ich zwar nicht richtig, aber du kannst Komponenten auch mit .setBounds oder komponente.boundsrect:= verschieben, meinst du das?
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#3

Re: 2 Images gleichzeitig verschieben?

  Alt 10. Mär 2004, 12:12
Nur eine Frage: Wäre DelphiX mit Direct Input nicht besser. Kommt natürlich auf das Spiel an, um das es sich handelt.

Ansonsten würd ich das so machen:

if key = vk_left then begin
Image1.Left:=...
Image2.Left:=...
Image1.Top...
Image2.Top:=...
end;

Du müsstest mir das ein bisschen genauer erläutern, versteh nämlich nicht ganz, was du genau bewirken willst
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Benutzerbild von LoW_FloW
LoW_FloW

Registriert seit: 29. Nov 2003
117 Beiträge
 
Delphi 7 Professional
 
#4

Re: 2 Images gleichzeitig verschieben?

  Alt 10. Mär 2004, 12:26
Dann hier der Source. Aber ich habe halt schlechte Erfahrung gemacht, wenn ich den Source poste, dann antwortet wieder keiner
Delphi-Quellcode:
const
RightMove = 10 ;
LeftMove = -10 ;
NoMove = 0 ;
Jumphigh = 200 ;
NoJump = 0 ;

implementation

{$R *.dfm}

procedure ShowFighter(Image : TImage ; Richtung: String ; Bewegung : Boolean );
begin
  if Richtung = 'Rechtsthen Image.Picture.LoadFromFile('Bilder\Rechts.bmp');
  if Richtung = 'Linksthen Image.Picture.LoadFromFile('Bilder\Links.bmp');
  if Richtung = 'Geradethen Image.Picture.LoadFromFile('Bilder\Gerade.bmp');
end;

procedure MoveFighter(Image : TImage ; X : integer ; Jump : integer );
var
Schritt, i : integer ;
begin
//==HORIZONTALE=BEWEGUNG==
if X > 0 then ShowFighter(Image, 'Rechts', true) ; // Rechts, Links bei Bewegung
if X < 0 then ShowFighter(Image, 'Links', true) ;
Image.Left := Image.Left + (X) ;
//==VERTIKALE=BEWEGUNG==
if Jump > 0 then begin
  for i := 1 to Round(Jump/32) do begin
    Image.Top := Image.Top - 32 ;
    sleep(10);
    Image.Repaint;
    end;
  sleep(100);
  for i := 1 to Round(Jump/64) do begin
    Image.Top := Image.Top + 64 ;
    sleep(10);
    Image.Repaint;
    end;
  end;
end;

procedure TfrmMain.FormCreate(Sender: TObject);
begin
ShowFighter(imgFighter1, 'Rechts', true ) ;
frmMain.DoubleBuffered := true ;
end;

procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
if Key=VK_LEFT then MoveFighter (imgFighter1, LeftMove , NoJump );
if Key=VK_RIGHT then MoveFighter(imgFighter1, RightMove, NoJump );
if Key=VK_UP then MoveFighter (imgFighter1, NoMove , Jumphigh );
if Key=VK_DOWN then MoveFighter (imgFighter2, LeftMove , NoJump ); //TEST, damit man 2 auf einmal bewegen kann
end;

end.
Wenn jetzt RUNTER und LINKS auf einmal drückt, bewegt sich nur 1 Image. Wie kann man das proggen, das sich beide bewegen?
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#5

Re: 2 Images gleichzeitig verschieben?

  Alt 10. Mär 2004, 13:11
Hallo,
da gibt es API-Funktionen GetKeyState und GetAsycnKeyState.
Musste mal im PSDK nachschauen.

MSDN Online GetKeyState

MSDN Online GetAsyncKeyState
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Markus K.

Registriert seit: 26. Jan 2004
Ort: Halle
346 Beiträge
 
Delphi 2005 Personal
 
#6

Re: 2 Images gleichzeitig verschieben?

  Alt 10. Mär 2004, 13:20
Hallo LoW_FloW,
dein Problem müsstest du mit GetKeyState lösen können. Hier mal ein Beipiel zum Bewegen von zwei Panels.

Delphi-Quellcode:
if ((getkeystate(vk_numpad2)and 128)=128) and
   ((getkeystate($41)and 128)=128)
then begin
     panel3.top:=panel3.top+20;
     panel4.top:=panel4.top+20;
end;
Tschüß Markus
  Mit Zitat antworten Zitat
Benutzerbild von LoW_FloW
LoW_FloW

Registriert seit: 29. Nov 2003
117 Beiträge
 
Delphi 7 Professional
 
#7

Re: 2 Images gleichzeitig verschieben?

  Alt 10. Mär 2004, 13:41
Wie baue ich das ein @ Markus?
So gehts nicht:
Delphi-Quellcode:
procedure TfrmMain.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key=VK_LEFT then MoveFighter (imgFighter1, LeftMove , NoJump );
  if Key=VK_RIGHT then MoveFighter(imgFighter1, RightMove, NoJump );
  if Key=VK_UP then MoveFighter (imgFighter1, NoMove , Jumphigh );
  if Key=VK_DOWN then MoveFighter (imgFighter2, LeftMove , NoJump );
  
if ((getkeystate(vk_numpad2)and 128)=128) and
   ((getkeystate($41)and 128)=128)
then begin
  if Key=VK_LEFT then MoveFighter (imgFighter1, LeftMove , NoJump );
  if Key=VK_RIGHT then MoveFighter(imgFighter1, RightMove, NoJump );
  if Key=VK_UP then MoveFighter (imgFighter1, NoMove , Jumphigh );
  if Key=VK_DOWN then MoveFighter (imgFighter2, LeftMove , NoJump );
  end;
end;
Oder muss das bei Process fürs Bewegen der Images hin?
[procedure MoveFighter(Image : TImage ; X : integer ; Jump : integer );]
  Mit Zitat antworten Zitat
Markus K.

Registriert seit: 26. Jan 2004
Ort: Halle
346 Beiträge
 
Delphi 2005 Personal
 
#8

Re: 2 Images gleichzeitig verschieben?

  Alt 10. Mär 2004, 14:03
In den Klammern gibst du an was geschehen soll, wenn du zwei Tasten auf einmal drückst. Und bei then fügst du dann die Prozeduren hinzu welche ausgeführt werden sollen.
Delphi-Quellcode:
if ((getkeystate(VK_LEFT)and 128)=128) and
   ((getkeystate(VK_DOWN)and 128)=128)
then begin
     MoveFighter (imgFighter1, LeftMove , NoJump );
     MoveFighter (imgFighter2, LeftMove , NoJump );
     end;
Den Teil brauchst du aber auch, da der obrige Code nur ausgeführt wird wenn du zwei Tasten auf einmal drückst.
Delphi-Quellcode:
if Key=VK_LEFT then MoveFighter (imgFighter1, LeftMove , NoJump );
if Key=VK_RIGHT then MoveFighter(imgFighter1, RightMove, NoJump );
if Key=VK_UP then MoveFighter (imgFighter1, NoMove , Jumphigh );
if Key=VK_DOWN then MoveFighter (imgFighter2, LeftMove , NoJump );
So hatte ich damals das selbe Problem gelöst, weiß allerdings nicht ob es dafür noch andere Möglichkeiten gibt.

Tschüß Markus
  Mit Zitat antworten Zitat
Benutzerbild von LoW_FloW
LoW_FloW

Registriert seit: 29. Nov 2003
117 Beiträge
 
Delphi 7 Professional
 
#9

Re: 2 Images gleichzeitig verschieben?

  Alt 10. Mär 2004, 16:38
Muss ich da jetzt alle Kombinationen durchgehen? Das sind ja 64 Stück?

Was bedeutet außerdem diese 128. Beide Tasten werden aber nicht durchgehend gedrückt.
  Mit Zitat antworten Zitat
Markus K.

Registriert seit: 26. Jan 2004
Ort: Halle
346 Beiträge
 
Delphi 2005 Personal
 
#10

Re: 2 Images gleichzeitig verschieben?

  Alt 10. Mär 2004, 16:46
...hmm ich musste es damals für alle Kombinationen einzeln machen...hatte damals aber nur 8 und deshalb hatte ich auch mir nix anderes ausgedacht
den Code für die Bewegung, welche ausgeführt werden soll wenn man nur eine Taste kann man so kürzer fassen...beim anderen fällt mir gerade nichts ein
Delphi-Quellcode:
case Key of
     VK_LEFT: MoveFighter (imgFighter1, LeftMove , NoJump );
     VK_RIGHT: MoveFighter(imgFighter1, RightMove, NoJump );
     VK_UP: MoveFighter (imgFighter1, NoMove , Jumphigh );
     VK_DOWN: MoveFighter (imgFighter2, LeftMove , NoJump );
end;
Tschüß Markus
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz