[Geöst] Repeat Until und trotzdem Multitasking

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
ConcAPPtLab
Beiträge: 89
Registriert: Fr 18. Apr 2014, 18:57

Re: Repeat Until und trotzdem Multitasking

Beitrag von ConcAPPtLab »

Danke :) ich werds mir später nochmal in Ruhe angucken
Definition "Strategische Fehlerkorrektur":
Solange rumprobieren bisses klappt :D

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Repeat Until und trotzdem Multitasking

Beitrag von pluto »

Ein kleiner Tipp: Verwende ein Array in den du die Tasten drücke Speicherst.
Dann kannst du im Timer Entsprechend abfragen. In PseudoCode würde es etwa so aussehen:
Keys:array[0..255] of Boolean;

Denn Array Installisierst du dann in einer Schleife mit Standard Werten.
Dann kannst du in OnKeyDown z.b. folgendes machen:
keys[key]=true;

und in onkeyUp dann
keys[key]=false;

Im Timer kannst du dann einfach den Array abfragen:
if Keys[VK_TOP] then ...
und soweiter.

Damit bist du auf der sicheren Seite.
MFG
Michael Springwald

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Repeat Until und trotzdem Multitasking

Beitrag von Mathias »

Nur kurz zur Info, auf Lazplanet gibt es ein Tutorial für ein Pong-Spiel: http://lazplanet.blogspot.de/2014/10/cr ... rself.html

Ich habe mir dies angeguckt, die Steuerung ist recht misserabel gelöst. Das muss man ja die Finger wund tippen, um den Schläger zu bewegen.

@Pluto

Die Idee finde ich super, die muss ich mir merken.
Reichen hierfür 255 Werte, der Key kommt als Word daher.

Code: Alles auswählen

FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState)
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

ConcAPPtLab
Beiträge: 89
Registriert: Fr 18. Apr 2014, 18:57

Re: Repeat Until und trotzdem Multitasking

Beitrag von ConcAPPtLab »

Dankeschön :)
Definition "Strategische Fehlerkorrektur":
Solange rumprobieren bisses klappt :D

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Repeat Until und trotzdem Multitasking

Beitrag von pluto »

Reichen hierfür 255 Werte, der Key kommt als Word daher.

Eventuell musst du es noch umrechnen mit ord. Also ord(key).
Dann sollte es auf Jedenfall passen.
MFG
Michael Springwald

Mathias
Beiträge: 6162
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Repeat Until und trotzdem Multitasking

Beitrag von Mathias »

Noch eine kleine Verbesserung, spart noch ein wenig Speicher, das es nicht auf Geschwindigkeit ankommt.

Code: Alles auswählen

Keys : bitpacked array[0..255] of Boolean;
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

ConcAPPtLab
Beiträge: 89
Registriert: Fr 18. Apr 2014, 18:57

Re: Repeat Until und trotzdem Multitasking

Beitrag von ConcAPPtLab »

Also ich hab jetzt mal die Idee mit dem Array ausprobiert: Ich bin aber anscheinend zu blöd ein dynamisches Array zu programmieren und zu übergeben.
Denn hier kommt immer die Fehlermeldung: unit1.pas(26,96) Error: Fields cannot appear after a method or property definition, start a new visibility section first

Code: Alles auswählen

type
  TWordArray = array of word;
type
{Form1}
...
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState; Keys: TWordArray): TWordArray;
Definition "Strategische Fehlerkorrektur":
Solange rumprobieren bisses klappt :D

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Repeat Until und trotzdem Multitasking

Beitrag von pluto »

Du hast ja auch die Parameter Liste vom Event erweitert.

Du musst die Variable als Variable Definieren, nicht als Typ bzw. du kannst ein neuen Typ erstellen, dann sieht es so aus:

Code: Alles auswählen

 
type
  TMyArray = array[0..255] of Boolean
 
in TFrom1 schreibst du dann einfach:
MyArray:TMyArray.
 


der Datentyp sollte Boolean sein, nicht Word.
MFG
Michael Springwald

Antworten