BASIC

Author Topic: Wann den SHOWSCREEN  (Read 11361 times)

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 174
  • Seit gemoint liebe Gemeinde
    • View Profile
Wann den SHOWSCREEN
« on: 2014-Nov-07 »
Hallo Leute  ...  es hört nicht auf.
Da ich schon ewig nichts mehr mit Basic gemacht habe, und wenn dann mit "Schmutzig Basic" wie SchranzOr es mal nannte, steig ich hier noch nicht ganz durch.

Wenn ich einen Sprite in einer Schleife Rotieren lasse (ROTOSPRITE) zeigt er mir die einzelnen Phasen an und wenn der Sprite am Zielort ist wird er gelöscht und es kommt der nächste.
Warum zeigt er mir die Phasen nicht an und den Sprite der seine Position erreicht hat? Vorallem sehe ich nicht jede Phase einzeln sondern alle auf einmal. Kann mir jemand mal genau erklären wie, wo, warum ich den SHOWSCREEN oder den USEASBMP setzten muss. Das ist im Augenblick bei mir immer noch ein ratespiel. Vielen Dank.
 
AMD Ryzen 5 2600, RTX2080 8GB, Kraken WaKü, 16GB, 120M.2, 500GB SSD, 1GB + 3 GB HD

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5018
  • O Rly?
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #1 on: 2014-Nov-07 »
USEASBMP ?
Boah du hupfst echt immer auf den Outdated Befehlen rum :)

Und ja, GOTO ist Schmutzig :P ( wenn es das war... keinen Plan mehr ^^ )


Ich habe SHOWSCREEN immer da:

Code: GLBasic [Select]
WHILE TRUE
    //Input
    //alles zeichnen
    //updaten
SHOWSCREEN
WEND
END


EDIT:

SHOWSCREEN macht nix anderes als den Backbuffer in den du immer zeichnest in den Frontbuffer (was du siehst) zu schieben um den Backbuffer wieder löschen zu können. Frame für Frame...
« Last Edit: 2014-Nov-07 by Schranz0r »
I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 174
  • Seit gemoint liebe Gemeinde
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #2 on: 2014-Nov-07 »
Also ich sach mal so, die Befehle kannte ich vor GLBasic nicht, woher soll ich wissen was Outdated ist und was nicht  ::). ich hab mal 2 Vids angehängt, und so wollte ich es nicht. Wenn die Karten unten sind sollen sie liegen bleiben (wie in Variante 2) und keine Spur (Variante1) hinter sich herziehen.
AMD Ryzen 5 2600, RTX2080 8GB, Kraken WaKü, 16GB, 120M.2, 500GB SSD, 1GB + 3 GB HD

Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Re: Wann den SHOWSCREEN
« Reply #3 on: 2014-Nov-08 »
Naja, "liegen bleiben" heißt doch, dass du es jedes Frame wieder zeichnen musst, sonst wird es durch Showscreen "gelöscht". Also wenn die Karte unten angekommen ist, sie trotzdem jedes Showscreen wieder zeichnen.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 174
  • Seit gemoint liebe Gemeinde
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #4 on: 2014-Nov-08 »
So sieht es aus:

Code: GLBasic [Select]
WHILE TRUE
        MOUSESTATE MX, MY, MB1, MB2


        IF i < 190 AND r < 6

                ROTOSPRITE 12, 10 + x, -10 + y, i*20

                INC x,4
                INC y,20
                INC i,5
        ELSE

                i = 0
                x = x + 210
                y = 0
                INC r,1

        ENDIF
SHOWSCREEN
WEND

 

Ist natürlich nur schnell hingemacht. Da ist doch alles drin oder?

AMD Ryzen 5 2600, RTX2080 8GB, Kraken WaKü, 16GB, 120M.2, 500GB SSD, 1GB + 3 GB HD

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 174
  • Seit gemoint liebe Gemeinde
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #5 on: 2014-Nov-10 »
Naja, "liegen bleiben" heißt doch, dass du es jedes Frame wieder zeichnen musst, sonst wird es durch Showscreen "gelöscht". Also wenn die Karte unten angekommen ist, sie trotzdem jedes Showscreen wieder zeichnen.

Das heisst in meinem Beispiel ich muss erst die Schleife die gewünschten male durchlaufen lassen und dann erst den SHOWSCREEN setzten?
AMD Ryzen 5 2600, RTX2080 8GB, Kraken WaKü, 16GB, 120M.2, 500GB SSD, 1GB + 3 GB HD

Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Re: Wann den SHOWSCREEN
« Reply #6 on: 2014-Nov-10 »
Nee, SHOWSCREEN wechselt die Buffer, ist also der Befehl, der alles anzeigt. Rufst du SHOWSCREEN nicht auf, dann ist gar nichts zu sehen, bzw bleibt das letzte Bild stehen. Ich würde es etwa so strukturieren:

Code: GLBasic [Select]
//lade alles
WHILE TRUE
 IF (karten noch nicht unten)
  // zeichne fallende, drehende karten
 ELSE // karten sind unten
  // zeichne das letzte Frame (=unten liegende karten)
 ENDIF
 SHOWSCREEN
WEND
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 174
  • Seit gemoint liebe Gemeinde
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #7 on: 2014-Nov-11 »
Macht das die Sache nicht unnötig kompliziert?. Ich habe zb. 5 Karten (Poker), ich habe die rotierung "Ausgelagert" in eine andere Datei. Ich bekomme das nicht richtig angesprochen. Entweder werden die Fenster sofort geschlossen, oder ich seh garnichts oder alles, jedenfalls nicht das was ich mir wünsche. Ich muss dazu sagen ich habe gerade erst angefangen mit dem Auslagern in eine andere Datei.
AMD Ryzen 5 2600, RTX2080 8GB, Kraken WaKü, 16GB, 120M.2, 500GB SSD, 1GB + 3 GB HD

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #8 on: 2014-Nov-11 »
Ich bin mir nicht sicher, ob ich das Problem richtig verstanden habe...

Aber die Struktur eines jeden GLBasic Programms sollte erstmal folgende aussehen:
Code: GLBasic [Select]
//Hauptdatei
WHILE TRUE //Die Hauptschleife, die gültig ist, bis das Programm beendet wird

//Hier kannst du soviele Funktionen von hier oder aus anderen Dateien aufrufen, wie du möchtest

SHOWSCREEN //wird EINMAL am Ende der Programmschleife aufgerufen um den Backbuffer nach vorne zu holen und auf dem Bildschirm zu zeichnen... Ist grundsätzlich in jedem Framework so
WEND //Und wieder zum Anfang
 

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 174
  • Seit gemoint liebe Gemeinde
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #9 on: 2014-Nov-11 »
Hallo, das ist richtig. Aber wenn der SHOWSCREEN ausgeführt wird ist der inhalt den ich einer FUNCTION "gezeichnet" doch wieder weg  :S .

Code: GLBasic [Select]


WHILE TRUE

         Karte(25)

SHOWSCREEN
WEND



FUNCTION Karte: AW


                IF R < 60
                        ROTOSPRITE AW, (1920 - 100) / 2, R*10, R*10
                        INC R, 1
                ELSE

                        DRAWSPRITE AW, (1920 - 100) / 2, R*10
                        INC KZ
        ENDIF

ENDFUNCTION

 

Sobald die Karte unten ist wird sie durch den SHOWSCREEN gelöscht. Ich kann natürlich die Karte am Zielort neu Zeichnen, was ist aber wenn ich 573 Objekte habe?
Und das geht von der Logig nicht in meine Schädel. Vorallem wenn ich alles probiere und nichts ist so wie ich es will.
« Last Edit: 2014-Nov-11 by Worebu »
AMD Ryzen 5 2600, RTX2080 8GB, Kraken WaKü, 16GB, 120M.2, 500GB SSD, 1GB + 3 GB HD

Offline spacefractal

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 3626
    • View Profile
    • Space Fractal
Re: Wann den SHOWSCREEN
« Reply #10 on: 2014-Nov-11 »
im german translated it to read it....

you need to draw anything before a SHOWSCREEN.

etc im uses something like this for my games:

Code: GLBasic [Select]
SUB GLB_ON_LOOP:
        update()
        paint()

        SHOWSCREEN
        IF KEY(1)
                END
        ENDIF
ENDSUB
 

GLB_ON_LOOP is called automatic in each frame. So you should move ROTOSPRITE after the logic have been updated.
Greedy Mouse - Karma Miwa - Spot Race - CatchOut - Android Extras - is on a vacation trip, home before end of few days in jan.

Offline kanonet

  • Administrator
  • Prof. Inline
  • *******
  • Posts: 1142
    • View Profile
    • My GLBasic code archiv
Re: Wann den SHOWSCREEN
« Reply #11 on: 2014-Nov-11 »
Hallo, das ist richtig. Aber wenn der SHOWSCREEN ausgeführt wird ist der inhalt den ich einer FUNCTION "gezeichnet" doch wieder weg  :S .
[...]
Sobald die Karte unten ist wird sie durch den SHOWSCREEN gelöscht. Ich kann natürlich die Karte am Zielort neu Zeichnen, was ist aber wenn ich 573 Objekte habe?
Dann zeichnest du eben 573 Objekte. Das ist überhaupt kein Problem und die übliche Vorgehensweise. Erst wenn es irgendwann so viele (viele tausende) Sprites sind, dass es zu Performanceproblemen kommt, dann kann man über andere Möglichkeiten nachdenken (USESCREEN, GRABSCREEN oder CLEARSCREEN -1), aber für dein kleines Kartenspiel sollte das nicht nötig sein und da du ja noch am lernen bist würde ich auch empfehlen es so zu tun, wie es üblicher Standard ist: jedes Frame alles an der gerade aktuellen (egal ob neu oder alt) Position neu zeichnen.
Lenovo Thinkpad T430u: Intel i5-3317U, 8GB DDR3, NVidia GeForce 620M, Micron RealSSD C400 @Win7 x64

Offline erico

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 4202
    • View Profile
    • Portfolio
Re: Wann den SHOWSCREEN
« Reply #12 on: 2014-Nov-12 »
I will give a try at this too, since looking at the videos I think I understand what you are looking for.

But first, if you can´t do english, try to write a standard German(Deutsch?), for example, in perfect grammar and no slang words, that way, google translator will do a better job in case a dumb Brazilian user like myself  try to help out.  ;)

First, in your loop, you need SHOWSCREEN at the end within the loop, so all fine so far.

Now for your rotating cards to fall rotating and land in a normal straight position, I would do as follow:

.Create a state condition for the cards, like CARDSTATE
.If CARDSTATE=0 then it falls down rotating
.If at the bottom, then CARDSTATE=1
.If CARDSTATE=1 then just keep it rotating untill it is shown on the rest position, straight position, at which point CARDSTATE=2
.If CARDSTATE=2 then it is just there showing it self still and not rotating

So here, not all transformations on the card happens all the time within the loop but just those that the CARDSTATE dictates.
Keep in mind you have to keep drawing your card through every state otherwise SHOWSCREEN will delete the last one displayed.

If this idea rings a bell, I can write some pseudo code to help further.
Of course this is just one approach to the problem.

Cheers.

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5018
  • O Rly?
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #13 on: 2014-Nov-12 »
Ich seh schon... ich glaube ich fange mal eine Tutorial-Series an...

I <3 DGArray's :D

PC:
AMD RYzen 7 1700 @3.9Ghz, 16GB HyperX Fury 2666Mhz Ram, ASUS ROG GTX 1060 STRIX 6GB, Windows 10 Pro 64Bit, MSi Tomahawk B350 Mainboard

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #14 on: 2014-Nov-12 »
Jede Funktion gilt nur für einen Frame - bis zum SCHOWSCREEN.
Du musst alles, was dauerhaft passieren soll - also z.B. Zeichnen einer Karte - auch dauerhaft für jeden Frame neu aufrufen.

Und du kannst hunderte, gar tausende Objekte gleichzeitig zeichnen.