Was w?rde in GLBasic noch Sinn machen ? (Sammelthread!)

Previous topic - Next topic

Schranz0r

so sah es ursprünglich der Entwickler auch vor, denk ich :D
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

Kitty Hello

Flushkey kapier' ich nicht. Kann mir das einer erklären? Die Hilfe bei Blitz online ist ja miniminimalistisch.

D2O

Hi Gernot,
flushkey() löscht den Tastatur buffer.
Pseudocode:

Code (glbasic) Select
//hauptschleife
while esc = 0

if keyhit(0) then esc = 1  
    menu()


wend

function menu()
 while esc2 = 0
     /// Menüschleife
     if keyhit(0) then esc2 = 1
 wend
flushkey()
endfunction
Hier wird die Escape taste zum beenden des menüs und auch für die Hauptschleife benutzt.
Damit nun aber, wenn man im menü die Escape Taste drückt um es zu beenden nicht auch die hauptschleife beendet wird
muss nach der Menüschleife die Escape taste wieder gelöscht bzw. zurück gesetzt werden da ansonste die variable esc auch den wert 1 bekommt



Edit::
So würde es in GLB aus schauen, mit "Space" gehts ins menü mit Escape wieder raus und die Hauptschleife kann damit auch beendet werden.

Code (glbasic) Select
// --------------------------------- //
// Project: test7
// Start: Monday, July 02, 2007
// IDE Version: 4.230


ALLOWESCAPE FALSE

GLOBAL esc
GLOBAL esc2

WHILE  esc = 0
KeyHitUpdate()


PRINT "Hauptschleife",10,10
PRINT esc,10,20

IF KeyHit(57) = 2 THEN menu()  //Spacetaste
IF KeyHit(1) = 2 THEN esc = 1 // Escape
SHOWSCREEN
WEND



FUNCTION menu:
WHILE esc2 = 0
KeyHitUpdate()
IF KeyHit(1) = 2 THEN esc2 = 1
PRINT "Menüschleife",10,10
PRINT esc2,10,20
SHOWSCREEN
WEND
KeyHitUpdate()  ///<<<<- Flushkey
esc2 = 0
ENDFUNCTION



FUNCTION KeyHitUpdate:
GLOBAL gKeyDown[], gKeyState[]
LOCAL  k
LOCAL i
    // First Time call/ zum ersten Mal hier
    IF BOUNDS(gKeyDown[],0)=0
        DIM gKeyDown[256]
        DIM gKeyState[256]
    ENDIF

    // For each key / für jede Taste
    FOR i=0 TO 255
        k = KEY(i)
        // Key is pressed / Taste ist gedrückt
        IF k
            IF gKeyDown[i]
                gKeyState[i]=1
            ELSE
                gKeyDown[i]=1
                gKeyState[i]=2
            ENDIF
        ELSE
            // Key is not pressed / Taste nicht gedrückt

            // Has key been pressed before?
            // War die Taste gedrückt?
            IF gKeyDown[i]
                gKeyDown[i] = 0
                gKeyState[i] = -1
            ELSE
                gKeyState[i]=0
            ENDIF
        ENDIF
    NEXT
ENDFUNCTION





//  0 = not pressed / nicht gedrückt
//  2 = just pressed / gerade runtergedrückt
//  1 = pressed / gedrückt (gehalten)
// -1 = release event / wieder losgelassen
FUNCTION KeyHit: nkey
    RETURN gKeyState[nkey]
ENDFUNCTION
I7 2600K; 8 GB RAM ; Win10 Pro x64 | NVidia GTX 750 TI 2048MB ; Realtec OnBoard Sound;
Lenovo ThinkPad T400: XP Pro
GLB Premium-immer Aktuell

Kitty Hello


tft

Hallo...

für mich ist einer der wichtigsten Compiller Optionen INCLUDE. Damit lassen sich in Basic geschriebene Funktionen importieren. Ohne das sie direkt im gerade bearbeiteten Code vorkommen. Das würde dann auch solche diskusionen um die Funktions fielfalt minimieren. Da man einfach Include dateien erzeugt. Die die entsprechenden Funktionen bereitstellen. Gerade was die KEYHIT diskusion ausgelöst hat, zeigt. Das fiele dinge ja auch ohne direkten Befehl funktionieren. Im Momentanen stand der Dinge mag das jetzt nicht wichtig sein. Aber ich selber habe bis zu 10 Code Fenster in BB offen. In denen sich die Funktions Bibliotheken befinden. Ein Ständiges Copy/Paste wäre zwar möglich. Macht aber einen Code mit mer als 10000 Zeilen nicht mer besonders Leserlich und überhauptnicht editierbar. Hinzu kommt noch. Das das Hochschrauben der Befehle von GLB ja auch immer ein Kompatibilitäts Problem darstellt. Es muss ja auch weiterhin auf allen Platformen laufen. Und ein KeyHit() soll dann ja auch auf einem PALM funktionieren. Wenn man erst mal mit EXTRA Befehlen anfängt. Wird irgendwan der Aufwand so gross, das es unüberschaubar wird. Dazu kommt noch die Geschwindigkeit mit der der Funktions Umfang wachsen kann ohne das der Compiller ständig angepast werden muss.
Da der Compiller Directen Code erzeugt. Dürfte daraus auch kein Geschwindigkeits nachteil entstehen.

INCLUDE ...... mein gröster Wunsch.

Und hir noch eine Inspiration.

Eine der für mich am genialsten Basic Dialekte war AMOS für den Amiga. Dort konnte man sich einfach die Funktionen in DLL Dateien Compilieren und hinterher Laden und ausfüren wie Basic Befehle. Auch das einbinden von ASM teilen war möglich, Das geht natürlich wegen der Platformunabhängigkeit bei GLB nicht. Aber das einbinden von C ist ja fast genauso gut.

(Basic das ich kenne - C64Basic , AMOS , BlitzBasic (AMIGA), GFA Basic , V-Basic , Power Basic , QBasic ,  BlitzBasic2D , BlitzBasic3D , BlitzPlus , BlitzMax , GLBasic)

Also an verbesserungs Vorschlägen Mangelt es mier nicht.

Schranz0r

Include den Befehl wirds nie geben, tft !

Ich erklär dir mal wieso :

1. Bei deinen Project eine neue Datei erstellen, deine Function reinpacken , und im Projectordner  speichern.
2. In der IDE auf der rechten Seite das Register Dateien klicken
3.  Im Fenster dann rechtsklick, und "Datei hinzufügen"

So hast du die Function ausgelagert, und kannst die Function im Mainprogramm ganz normal aufrufen !

Hoffe das hilft dir weiter, und dein Wunsch ist erfüllt!


Ich würde dir raten, mal die Tutorials durch zu arbeiten(F1) und dich erstmal bei einen anderen zu Informieren, bevor du wieder so einen halben Roman schreibst. :D
Weil wie du siehst, war das jetzt für die Katz, weil es sowas schon gibt.
War jetzt zwar ne kleine Kritik gegen dich, aber soll dir nur Helfen, da du dir so massig schreibarbeit sparst, auch wenn wir Hobbyprogrammierer sind :)

Da ich mich in GLB eigentlich schon recht gut auskenne, würde ich dir anbieten, meine ICQ-Nummer zu geben, so kannst du eventuelle Probleme mir schildern, und ich kann dir sagen, obs da schon eine Lösung gibt, oder nicht.

Wünsche dir aber sonnst noch einen erfolgreichen Start in GLB !
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

tft

Hi ....

deine Kritik ist berechtigt. Aber zu meiner verteidigung .............. bin ja noch anfänger. Mit der Zeit kommt das schon anders. Es macht mir keine Probleme Romane zu schreiben. Wenn es eine ànliche Funktion wie Include gibt ... cool.

Danke für die Info ....

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

tft

Hi ....

habe mir mal den Tutorial Bereich genauer angesehn. Bis auf einige Rechtschreibfehler, auf die ich eigentlich (C) rechte angemeldet habe. Ist von dieser art der Dateien Auslagerung nicht mit einem Wort die rede. Ich kann aus keiner Silbe heraus lesen das es etwas in der vorm eines Include ersatzes gibt. Ich werde mal probieren wie das Funktioniert.

tft

Hi ....

es funktioniert aber sehr gut .............

Schranz0r

Hmm hatter wohl was vergessen :D

Ja mach so, wie ichs oben beschriebrn habe. dann sollte es schon gehn
I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard

tft

Hi ....

und wie kann man Funktionen als diese definieren damit sich die Funktion "Gehe zu definition" ach dorthin springen läst. Bei mir werden die Funktionen nicht automatisch LILA. Auch die suche nach Funktionen in ausgelagerten Dateien stöst da auf hindernisse. Es kommt ein "Kann Funktions Definition nicht finden", Abwohl die Funktion ordnungs gemähs ausgefürt wird.

tft

hi ....

soso ... doppelklick auf die Funktion ... aber nur wenn das Sprünge fenster offen ist.

tft

hi ... sehr schön ... sehr pracktikable .... so schluss jetzt. Das gehört nicht in diesen Thread.:)

Schranz0r

I <3 DGArray's :D

PC:
AMD Ryzen 7 3800X 16@4.5GHz, 16GB Corsair Vengeance LPX DDR4-3200 RAM, ASUS Dual GeForce RTX™ 3060 OC Edition 12GB GDDR6, Windows 11 Pro 64Bit, MSi Tomahawk B350 Mainboard