Author Topic: Wann den SHOWSCREEN  (Read 11432 times)

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5019
  • O Rly?
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #15 on: 2014-Nov-12 »
Hatte glaub schon 30.000 Sprites auf 60 FPS, bin mir nicht mehr genau sicher. für nen Kartenspiel reichts :D

Was ist besser, Video- oder Texttutorials?
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 #16 on: 2014-Nov-12 »
Ich sagte "kompliziert" und nicht "Ausführgeschwindigkeit", wenn ich zb. 573 Objekte neu zeichnen soll wo sie am Ende liegen sollen.
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: 5019
  • O Rly?
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #17 on: 2014-Nov-12 »
Ist es nicht :),  mit TYPES die du in einer Schleife durchratterst !
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 #18 on: 2014-Nov-13 »
Ehrlich, daran ist nichts kompliziert.
Hab nichts getestet, aber so ähnlich wäre es z.B. möglich.

Code: GLBasic [Select]
TYPE Sprite
spriteId%
x
y

FUNCTION Load: filename$, x, y
self.spriteId = LOADSPRITE filename$
self.x = x
self.y = y
ENDFUNCTION

FUNCTION Draw:
DRAWSPRITE self.spriteId, self.x, self.y
ENDTYPE

mySprite AS Sprite

mySprite.Load("MeinDateipfad.png", 100, 100)

WHILE TRUE
mySprite.Draw()

SHOWSCREEN
WEND
 

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 174
  • Seit gemoint liebe Gemeinde
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #19 on: 2014-Nov-13 »
Gut, kann ich nichts zu sagen. Funktioniert nicht, bekomme immer GPC0001 Syntax Error. Aber wieso benutzt du SELF, vorallem, wenn das notwendig ist, wo steht was darüber?
AMD Ryzen 5 2600, RTX2080 8GB, Kraken WaKü, 16GB, 120M.2, 500GB SSD, 1GB + 3 GB HD

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
Re: Wann den SHOWSCREEN
« Reply #20 on: 2014-Nov-13 »
Code: GLBasic [Select]
FUNCTION Draw:
DRAWSPRITE self.spriteId, self.x, self.y
ENDTYPE

hier fehlt das
Code: GLBasic [Select]
ENDFUNCTION

Code: GLBasic [Select]
FUNCTION Draw:
DRAWSPRITE self.spriteId, self.x, self.y
ENDFUNCTION
ENDTYPE

Wenn man hier inerhalb des Typs kein Self benutzen würdest, wäre z.B. die Variable x in einer Funktion
eine eigenständige Lokale Variable, Du hast aber ja am anfang beim Type schon diese Variable erstellt und kannst so mit self
auf diese im Type erstellte Variable zugreifen.
Ich hoffe das ist verständlich ( muss erst noch richtig wach werden , Nachtschicht)
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

Offline S.O.P.M.

  • Prof. Inline
  • *****
  • Posts: 529
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #21 on: 2014-Nov-13 »
Also das mit dem self habe ich aber auch zum ersten Mal gehört, muss ich zugestehen!
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Offline Worebu

  • Mr. Polyvector
  • ***
  • Posts: 174
  • Seit gemoint liebe Gemeinde
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #22 on: 2014-Nov-13 »
Also verändere ich im Prinzip die Variable im ganzen Programm (GLOBAL) statt  nur in der FUNCTION (LOCAL)?. Das das ENDFUNCTION fehlte habe ich gesehen, ich bekomme den Fehler aber hier: self.spriteId = LOADSPRITE filename$.  :S

@S.O.P.M: Ein Glück, dann bin ich nicht allein. Aber wie soll man auf sowas kommen wenns nirgends steht?
AMD Ryzen 5 2600, RTX2080 8GB, Kraken WaKü, 16GB, 120M.2, 500GB SSD, 1GB + 3 GB HD

Offline Fabbio

  • Mc. Print
  • *
  • Posts: 24
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #23 on: 2014-Nov-14 »
Bin gerade bei der Arbeit,
Aber der fehler wird am loadsprite liegen.
Das gibt keine id zurück!
Du musst der Variable spriteid mit z. B. Gensprite ()  ein id zu weisen.
Dann wird loadsprite filenam $, spriteid
Das file geladen.
Wenn ich Feierabend habe, schreibe ich dir ein beispiel.

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5019
  • O Rly?
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #24 on: 2014-Nov-14 »
Steht sehr wohl in der Hilfe ( F1 - Taste ).
Ich will dir jetzt auch nicht zu nahe treten Worebu, aber ein wenig eigenes "versuchen und verstehen" deinerseits sollte auch gegeben sein.
Hilft dir persönlich nix wenn du alles vorgekaut bekommst. Meiner Meinung nach fehlt es dir schon an den Basics der Programmierung.

Habe dir/euch vorgeschlagen eine Tutorialreihe zu starten, vom "Einfachen Aufbau" bis hin zur komplexeren Modularbauweise ( "Code-Reusing" ).
Ist hier im Thread aber keiner drauf eingegangen...
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 #25 on: 2014-Nov-14 »
@Worebu: Es war zwar keine Absicht, aber eingebaute Fehler selbst zu finden ist schon gut zur Übung.
Und wenn da Syntax-Fehler steht, ist das doch ziemlich eindeutig... Irgendwas an der Syntax ist falsch, sprich es fehlt was oder wurde falsch geschrieben.

Zudem änderst du durch "self.xxx" nicht GLOBAL im Programm etwas.

Ein TYPE ist eine Typen-Vorlage, z.B. ein Mensch, ein Auto, ein Irgendwas mit individuellen Eigenschaften.
Beim Auto z.B. PS.

So brauchst du nämlich NICHT GLOBALE Variablen erstellen, sondern einfach fünf Autos, welche alle die individuelle Eigenschaft PS haben.

Hast du also einen TYPE mit der Eigenschaft PS kannst du nun fünf Autos erstellen:
Code: GLBasic [Select]
//Vorlage für den TYP(E) Auto
TYPE Auto
PS
ENDTYPE

//Fünf individuelle Autos definieren
Auto1 AS Auto
Auto2 AS Auto
Auto3 AS Auto
Auto4 AS Auto
Auto5 AS Auto

//Jedem Auto eine andere PS-Anzahl geben
Auto1.PS = 75
Auto2.PS = 100
Auto3.PS = 29
Auto4.PS = 450
Auto5.PS = 250

//Nun kannst du aber dem Auto auch eine eigene Funktion geben, die die PS festsetzt
TYPE Auto
PS

FUNCTION Init: ps
self.PS = ps
ENDFUNCTION
ENDTYPE

Auto1 AS Auto
Auto1.Init(120)
 

Du solltest dir vielleicht mal die allernötigsten Grundlagen zur objektorientierten Programmierung nahebringen.
Dann verstehst du schon was ich meine.

Aber wie Schranz0r schon sagt, du zeigst leider sehr wenig Eigeninitiative.
Klar hat jeder mal klein angefangen, aber man sollte schon etwas länger probieren, wenn etwas nicht geht.
Nicht nur Snippets kopieren und erwarten, dass es gleich alles funktioniert. :)

P.S. nun rate mal, wieso sich der Code da oben nicht einfach kompilieren lässt, gute Aufgabe. :)
« Last Edit: 2014-Nov-14 by backslider »

Offline D2O

  • Prof. Inline
  • *****
  • Posts: 1063
    • View Profile
    • http://www.deuteriumoxid.com
Re: Wann den SHOWSCREEN
« Reply #26 on: 2014-Nov-14 »
Huch, bin ja fast zu langsam, musste erst noch schnell die Kids in die Schule fahren.

@Worebu, möchte Dich jetz nicht ganz hängen lassen ;)
daher hier mal eine Code beispiel.
Du musst nur die eigene Grafik angeben.

Code: GLBasic [Select]
// --------------------------------- //
// Project: Worebu
// Start: Friday, November 14, 2014
// IDE Version: 12.312


 SETCURRENTDIR("Media") // go to media files
 
 // Systemmaus anzeigen
 SYSTEMPOINTER TRUE

// Erstellen eines Type
// Vorteil, einmal einen Typ und variablen anlegen und sie
//für viele Grafiken nutzen, spart Tiparbeit!
TYPE Tsprite
// Variablen für die Position
posx%
posy%
// Variable für die Sprite ID
id%

// Function/member für das laden eines Sprites

FUNCTION myloadsprite: filename$  // filename ist eine Lokale Variable auf die nicht zugreifen kannst,
                                                                        // hier aber zu übergabe benötigt wird
        // zugriff auf auf die Internen Typevariablen mit SELF.
        self.id% = GENSPRITE() // Mit Gensprite automatisch eine ID zuweisen
       
        // Nun die eigendliche funktion zu laden einer grafik
        // die datei wird nun in den Speicher geladen auf die Du dann mit der ID zugreifen kannst
        LOADSPRITE filename$,self.id%

ENDFUNCTION

// Einfache Function zum zeichnen des Sprite

FUNCTION mysimpledraw:

        DRAWSPRITE self.id%,self.posx%,self.posy%

ENDFUNCTION

// finde ich persönlich besser
FUNCTION mydraw: x%,y%  // Lokale Variablen!
// übergeben der lokalen Variablen
self.posx% = x%
self.posy% = y%

        DRAWSPRITE self.id%,self.posx%,self.posy%
ENDFUNCTION


ENDTYPE
// Globale Variable vom Type Tsprite erstellen

GLOBAL bild1 AS Tsprite
//  GLOBAL bild2 AS Tsprite  ... usw.

// Variablen für die Maus
GLOBAL mx%,my%,bt1%,bt2%

// Bilder laden
       
        bild1.myloadsprite("testbild.png")


// Mainloop

WHILE TRUE

        MOUSESTATE mx%,my%,bt1%,bt2%
// Bild zeichnen
        // Version1
        // Positionen angeben
        bild1.posx = 10
        bild1.posy = 10
        // dann zeichnen
        bild1.mysimpledraw()
                // und hier  die Typevariable auch ausgeben
        PRINT bild1.id%, 10,50
        PRINT bild1.posx%, 10,80
        PRINT bild1.posy%, 10,110
       
        //Version2
        // Bild zeichnen und direkt die Position angeben
        bild1.mydraw(100,100)
       
        // und hier  die Typevariable auch ausgeben
        PRINT bild1.id%, 100,150
        PRINT bild1.posx%, 100,180
        PRINT bild1.posy%, 100,210
       
        // Version3
        // Bild an der Mausposition zeichen
                bild1.mydraw(mx%,my%)
       
        // und hier  die Typevariable auch ausgeben
        PRINT bild1.id%, mx%,my%+50             // etwa unterhalb des Bildes anzeigen,
                                                                                //daher my+
        PRINT bild1.posx%, mx%,my%+80
        PRINT bild1.posy%, mx%,my%+110

SHOWSCREEN  // Gezeichnetes anzeigen
WEND

@backslider, Du kleine Sau  :good:
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

Offline Schranz0r

  • Premium User :)
  • Administrator
  • Prof. Inline
  • *******
  • Posts: 5019
  • O Rly?
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #27 on: 2014-Nov-14 »
Hey ihr geilen Schnitten :D

Wieder geht keiner auf meinen Vorschlag ein...  :S
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 S.O.P.M.

  • Prof. Inline
  • *****
  • Posts: 529
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #28 on: 2014-Nov-14 »
Entschuldigung, dass ich mich hier auch nochmal einmischen muss. Jedoch gibt es hier durchaus Unstimmigkeiten, die auch ich als Neuling oder jemand, der noch Verständnisprobleme hat, so nicht akzeptieren könnte.

Quote from: backslider
So brauchst du nämlich NICHT GLOBALE Variablen erstellen, sondern einfach fünf Autos, welche alle die individuelle Eigenschaft PS haben.
Diese 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 Möglichkeit, eine Funktion innerhalb eines Types zu platzieren habe ich selbst noch nie genutzt. Tatsächlich färbt GLBasic das nicht offizielle Schlüsselwort "self" ein und zeigt in der Statusleiste "self.aufruf(self.x,self.y)...". Für jemand, der eine Basic-Sprache neu lernt, ist das nicht nachvollziehbar.
Zumal Fakt ist, dass die integrierte Hilfe keinen Hinweis auf diese Funktionalität enthält! Jede gegenteilige Aussage ist nicht fair.

So, wie auch ich mittlerweile mitbekommen habe, bietet GLBasic ansatzweise Funkionalitäten der objektorientierten Programmierung, obwohl das in einer klassisch strukturierten Basic-Sprache weder zu erwarten ist, noch solche Grundkenntnisse vorausgesetzt werden können.

Ich selbst bin zwar zufrieden mit GLBasic, weil ich die Dinge, die ich damit machen will, meistens früher oder später hinkriege (wenn auch oft nur mit viel Geduld, Probiererei und Befragung des Forums) - allerdings gibt es durchaus erwähnenswerte Mankos. Für Neueinsteiger, die mit der Erwartung herkommen, sich GLBasic aneignen zu können, ohne erst das halbe Forum durchwühlen und Informationen zusammenzusuchen zu müssen, die die Dokumentation nicht, nur indirekt oder unzureichend erklärt, ist das durchaus unerfreulich und frustrierend.
Notebook PC Samsung E372 Core i5 @ 2,6 GHz; 4 GB RAM; Win 7 Home Premium

Offline backslider

  • Community Developer
  • Prof. Inline
  • ******
  • Posts: 892
    • View Profile
Re: Wann den SHOWSCREEN
« Reply #29 on: 2014-Nov-14 »
Hey ihr geilen Schnitten :D

Wieder geht keiner auf meinen Vorschlag ein...  :S

Ich denke es ist ein super Vorschlag, wenn du dich dafür bereiterklärst und ein paar Tutorials bastelst.
Auch glaube ich das Videos auf Youtube GLBasic generell helfen könnten, weil soviele habe ich da noch nicht gesehen. :)