Wann den SHOWSCREEN

Previous topic - Next topic

D2O

#30
Quote from: Schranz0r on 2014-Nov-14
Hey ihr geilen Schnitten :D

Wieder geht keiner auf meinen Vorschlag ein...  :S
Nö, ist bald Weihnachten  :D  :booze:

Edit://
@S.O.P.M.,
hmmm, Du hast eigendlich recht.
Die Hilfe ist nicht unbeding die beste und ja, vieleicht muten wir Worebu etwas zuviel mit den Types, bzw. SELF zu.

@Worebu,
nimms uns nicht übel, im Grunde meinen wir es nur gut mit Dir.
Also gib nicht auf, GLB ist ansich nicht so schwer, man kann sich da schon "Durchkämpfen", es gibt durchaus schwierigere
Sprachen.
Ich selber bin auch nicht der beste, habe hier immer wieder pausen von 6 bis 9 Monaten drin und muss dann auch immer wieder mal nachfragen, bzw. vieles nachlesen/auffrischen.

Wenns Probleme mit Deinem Code gibt, grenze das ganze ein, schreibe kleine theoretisch Lauffähige Code's
und poste sie, so können wir relativ schnell nachvollziehen was nicht funktioniert.
Aber nicht unter dem Motto "Copy & Paste" und den rest machen die schon.
Ok?
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

backslider

QuoteDiese Aussage ist schon ein wenig irreführend und nur wahr, wenn man sie entsprechend interpretiert. Ich habe den Code selbst ausprobiert und weiß, warum er sich nicht compilieren lässt. Es ist jedoch nicht mal nur 1 grundsätzlicher Fehler drin, so viel schon vorweg.

Die Aussage ist immer wahr, eventuell wurde meine Aussage missverstanden.
Wenn du ein Objekt vom Typen Auto hast mit der Eigenschaft PS, dann ist diese niemals, egal wie man interpretiert, GLOBAL.

Sie ist über das Objekt vom Typen Auto aufrufbar, ja. Aber eine globale Variable ist was anderes.

Aber zum Rest deiner Aussagen gebe ich dir Recht S.O.P.M.! :)

kanonet

Functions in Types und self ist ein geeignetes Mittel um manche Dinge einfacher oder angenehmer zu gestalten - es ist aber nicht zwingend nötig und eigentlich auch nicht klassisch Basic. Gernot hat es auch nur wegen starker Nachfrage im Forum implementiert, aber eben nicht wirklich dokumentiert. Implementierung und Beispiel gibt es hier.

Generell ist es gut, dass wir es haben - grundsätzlich kann aber auch alles was mit OOP geschrieben wird, auch ohne geschrieben werden. Warum das jetzt hier in die Diskussion eingeführt werden musste, verstehe ich nicht, Worebu ist definitiv noch am Anfang des Lernprozesses und hat noch einiges vor sich, es war daher sicher keine so übermäßig gute Idee ihm auch gleich noch mit einem schlecht dokumentierten Feature wie OOP zu kommen.

@Worebu: von der Diskussion um self mal abgesehen, ist dein ursprüngliches Problem jetzt soweit gelöst?
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Worebu

@S.O.P.M - Danke das auch mal eine die Lanze für einen Newbie bricht.

Ich habe die Hilfe in ein Word Doc konvertiert um richtig suchen zu können und Word hat das Wort SELF nicht gefunden. Soviel zu "keiner" Eigeninitiative. Ein anderes Problem ist auch, allerdings nicht von GLBasic, das jeder anders programmiert oder seinen Code sauberhält. Ich habe mit Tuts über z.B. Blitzbasic angeschaut und ausprobiert und kann nur sagen ... oh mein Gott. Der Editor ist ein Witz und von lesbar keine Spur. Man kann nicht mal die Fontgrösse ändern .... mann hatte ich Kopfschmerzen. Aber der Vorschlag von SchranzOr wird von mir natürlich gerne angenommen. Und was die Outdated Befehle angeht gibs da was drüber, damit einer wie ich die gleich weglässt und nicht benutzt ?
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

kanonet

Auch in der Hilfe als chm sollte man problemlos suchen können, aber als word gehts sicher auch.
Als outdated fallen mir spontan ein: LET und BLACKSCREEN, eventuell auch noch LOADBMP/USEASBPM, wobei ich nicht ganz weiß, warum Schranz0r die dazu zählt.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

S.O.P.M.

#35
Quote from: backsliderDie Aussage ist immer wahr, eventuell wurde meine Aussage missverstanden.
Wenn du ein Objekt vom Typen Auto hast mit der Eigenschaft PS, dann ist diese niemals, egal wie man interpretiert, GLOBAL.
Sie ist über das Objekt vom Typen Auto aufrufbar, ja. Aber eine globale Variable ist was anderes.
Alles klar. Es war, wie ich vermutet habe, eine reine Verständnissache. Richtig verstanden, ist die Aussage demnach immer wahr. Für mich ist eine globale Variable eine Variable, deren Wert von jeder Stelle im Programm aus gelesen werden kann. In deinem nicht ausführbaren Codebeispiel ist noch gar nicht festgelegt, ob die Typinstanzen global oder lokal sind.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Worebu

#36
Erstmal Dank an alle.

@SchranzOr für ein TUT wäre ich wohl zuhaben, apropo geile Schnitten, kennen wir uns ;-)

@D20: Von Cut and Paste kann bei meiner Frage nicht Rede sein.

@kanonet: Da muss ich erstmal alles ausprobieren, TYPES oder FUNCTION oder nicht.

In diesem Sinne, ersmal Gute Nacht.



Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

Marmor




@ Worebu 
bleib dran , ich glaub wenn du erstmal das grundprinzip verinnerlichst hast merkst du das es fetzt.

Worebu

#38
Ich wieder. Um euch zu beruhigen. Es hat sich nichts geändert. Ich habe immer noch das selbe Problem. Ich habe den ganzen Samstag damit verbracht habe es zu lösen. Ich weiss immer noch nicht wo der SHOWSCREEN hinkommt. Code posten hat ja keinen Sinn (wegen Cut & Paste). Ich wills ja begreifen. GLBasc macht was es will.

Mein Aufbau:

Daten laden (grafik)

While

   For Next Schleife mit Aufruf der Funktion

Showscreen
Wend

Ich Zeichne den Hintergrund, Rotate heist ich drehe die erste Karte. Eine Schleife von X grad. Ist die Karte unten zeichne ich sie neu (wie empfohlen). Da ich aber 5 Karten habe kommt die nächste und alles wird wieder gelöscht. Kann mir einer Erkären wo das Ding hinkommt damit ich auch mal was sehe? Vom technische funktioniert alles bekomme keine Fehlermeldung. Wäre Dankbar wenn mir mal jemand den Knoten aus meinem Kopf machen könnte. 
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

kanonet

Also solange du nur eine Karte hast, funktioniert es wie es soll, aber dir fehlt noch der Schritt von einer zu mehreren Karten?
Quote from: Worebu on 2014-Nov-16Ich Zeichne den Hintergrund, Rotate heist ich drehe die erste Karte. Eine Schleife von X grad. Ist die Karte unten zeichne ich sie neu (wie empfohlen). Da ich aber 5 Karten habe kommt die nächste und alles wird wieder gelöscht. Kann mir einer Erkären wo das Ding hinkommt damit ich auch mal was sehe?
Naja du musst jedes SHOWSCREEN alles neu zeichnen, sonst ist es weg. D.h. ist die erste Karte unten angekommen und kommt die zweite, dann musst du jedes SHOWSCREEN nicht nur die zweite Karte zeichnen, sondern eben auch noch die erste, und den Hintergrund. Zeichnest du nur die zweite Karte, dann ist eben auch nur die zweite Karte zu sehen. Klingt doch logisch oder?

Wenn du das jetzt für jede Karte einzeln schreibst, dann funktioniert das zwar, aber ist natürlich ein Riesenaufwand, der mit jeder weiteren Karte weiter steigt. Du solltest dir also (sobald es mir zwei Karten klappt) überlegen, wie du den Code generalisieren kannst, so dass es egal ist, ob die 1 Karte zeichnest, oder 52. Stichwort wären hier Arrays, eventuell Plus Types.

Quote from: Worebu on 2014-Nov-16GLBasc macht was es will.
Das ist so nicht korrekt: GLBasic macht was du ihm sagst. Und zwar exakt so wie du es ihm sagst. Aber das heißt eben, dass du ihm jeden noch so kleinen Schritt haarklein vorkauen musst. :nana:
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

S.O.P.M.

Idealerweise läuft jedes GLBasic Programm in einer großen Hauptschleife ab. SHOWSCREEN muss in dieser Schleife ganz ans Ende bzw. dann auftauchen, nachdem alle Grafiken gezeichnet wurden. Du hast es schon an die richtige Stelle gesetzt, Worebu. Das Verständnisproblem liegt nach meiner Auffassung immer noch darin, bei jedem Frame, also jedem Schleifendurchlauf, stets alles zeichnen zu müssen, was auch angezeigt werden soll. Das war ja damals bei den alten Basicsprachen nicht so - wie z.B. bei QBasic, welches ich intensiv genutzt hatte. Du musst deinen Code so organisieren, dass zu jedem Zeitpunkt alles gezeichnet wird, was sichtbar sein soll. Dies hinzubekommen bedarf wahrscheinlich weiterer Hilfestellung. Arrays sind da der richtige Weg, wie schon erwähnt wurde.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Worebu

Guten Morgen,  da ich die Rotation in einer FOR NEXT Schleife habe muss SHOWSCREEN da auch mit rein?, nach jedem PRINT Befehl ein SHOWSCREEN? Also reicht eigentlich ein SHOWSCREEN nicht.

@kanonet: zb.: Ich habe auf dem Screen eine Überschrift mit PRINT, sobald ich anfange die Karte zu drehen wird PRINT gelöscht, ist die Karte unten zeichne ich sie an die letzten koordinaten, jetzt kommt die zweite Karte (habe ja 5) wird die erste karte gelöscht.  Zum Schluss habe ich die letzte, fünfte Karte unten an der Zielposition liegen und das Programm ist durch. Ich habe das in einer FUNCTION in einer anderen Datei geschrieben (TYPE). Wie gesagt keine Fehlermeldung.
Intel I5 9600 - RTX 4070, WaKü, 32GB RAM, 1x 512gb + 1x 1Gb NVRAM,  1x4TB + 1x1TB HD

Schranz0r

Nein, in eine "For-Schleife" kommt NIEMALS ein SHOWSCREEN, zumindest ist mir kein Einsatz dafür bekannt...

SHOWSCREEN ist im Normalfall IMMER über WEND.

Dein Code ist mit Sicherheit einfach nur falsch!
Du drehst bestimmt komplett(360°) bis du überhaupt das Showscreen wieder triffst...
Wenn ja, dann falsch!

Du musst Rotationen pro Frame ausführen, sonst wird das nix.
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

S.O.P.M.

QuoteGuten Morgen,  da ich die Rotation in einer FOR NEXT Schleife habe muss SHOWSCREEN da auch mit rein?, nach jedem PRINT Befehl ein SHOWSCREEN? Also reicht eigentlich ein SHOWSCREEN nicht.
Genau da scheint das Problem zu liegen. Du rufst SHOWSCREEN dann doch an der falschen Stelle auf. Andere Formulierung, um es vielleicht besser zu verdeutlichen, was passiert. Folgender Satz ist absolut entscheidend für das grundlegende Verständnis mit SHOWSCREEN: Du siehst auf dem Bildschirm immer genau das - und nur das - was seit dem letzten Aufruf von SHOWSCREEN bis zum erneuten Aufruf von SHOWSCREEN gezeichnet wurde. Würdest du nach jedem PRINT einen SHOWSCREEN aufrufen, dann würde dir auch immer nur der Text des einen PRINT angezeigt werden. Möchtest du mehrere PRINT's angezeigt bekommen, musst du sie alle nacheinander, ohne SHOWSCREEN dazwischen, aufrufen. Möchtest du zu diesem Text oder mehreren Texten weitere Grafikausgaben, müssen die ebenfalls alle noch aufgerufen werden, bevor das nächste SHOWSCREEN kommt. Ist das verständlicher?
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Schranz0r

Quick and Dirty:

Code (glbasic) Select

TYPE TKarte
rotation%
spr_id%
ENDTYPE


LOCAL Karte1 AS TKarte
LOCAL Karte2 AS TKarte


CREATESCREEN 1, 1, 50, 100
USESCREEN 1
DRAWRECT 0,0, 50, 100,  RGB(0xff, 0x00, 0x00)
USESCREEN -1

Karte1.spr_id = 1
Karte2.spr_id = 1


WHILE TRUE

INC Karte1.rotation
IF Karte1.rotation >= 359 THEN Karte1.rotation = 0

DEC Karte2.rotation
IF Karte2.rotation <= -359 THEN Karte2.rotation = 0

ROTOSPRITE Karte1.spr_id, 100,100, Karte1.rotation

ROTOSPRITE Karte2.spr_id, 300,100, Karte2.rotation

PRINT Karte1.rotation, 10 ,10
PRINT Karte2.rotation, 10 ,30

SHOWSCREEN
WEND
END


Evtl. wirds dir so klar?!
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