GraphicsHight als Globale Variable
Übersicht

![]() |
Golden AgeBetreff: GraphicsHight als Globale Variable |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
Ich hab irgendwie ein Problem, dass wenn ich die Variable GfxH=GraphicsHeight statt Local als Global definiere bei folgender Funktion alles schwarz ist: Code: [AUSKLAPPEN] Graphics3D 1024,768,0,2
SetBuffer BackBuffer() Global GfxW=GraphicsWidth() Local GfxH=GraphicsHeight() .................... .................... ..................... .................... Function area() ClsColor 68,79,99 Cls screencamera=CreateCamera() CameraViewport screencamera,0,0,GfxW,GfxH CameraRange screencamera,0,100000 light=CreateLight() Text GfxW/2,0,"Welt",1 UpdateWorld RenderWorld Flip End Function Die Variable GfxW als Global funktioniert allerdings... |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
CameraRange funktioniert nur mit einem Abstand der Parameter 10'000.
Und bitte rücke deinen Code ein. |
||
![]() |
Golden Age |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hmm, daran lags nicht....
Ich zeig einfach mal den Kompletten Code, kannst ihn ja selbst mal testen, wäre nett. Code: [AUSKLAPPEN] Graphics3D 1024,768,0,2
SetBuffer BackBuffer() Local GfxW=GraphicsWidth() Local GfxH=GraphicsHeight() ;MAINLOOP While Not KeyHit(a) ;damit keine Taste beenden kann Text GfxW/2,0,"The first 3D-Game",1 ;Letzter PARAMETER=1 zentriert den Text Text 0,30,"Starte mit Enter/Beende mit Escape" If KeyHit(1) End EndIf If KeyHit(28) And beenden = False dauer=MilliSecs() EndIf If MilliSecs()<dauer+1000 Text GfxW/2,300,"Es beginnt",1 ;Letzter PARAMETER=1 zentriert den Text beenden = True EndIf If MilliSecs()>dauer+1000 And beenden = True area() benden = False EndIf Flip Cls Wend End ;############### ;Area-Function ;############### Function area() screencamera=CreateCamera() CameraViewport screencamera,0,0,1024,768 CameraRange screencamera,1,1000 light=CreateLight() ClsColor 68,79,99 Cls Text (GraphicsWidth()/2),(GraphicsHeight()/2),"Welt",1 UpdateWorld RenderWorld Flip End Function |
||
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du führst area in der Schleife aus? Overkill. Du erstellst bei jedem schleifendurchlauf ne Kamera. Und das ist gut 60 mal pro Sekunde!
Code: [AUSKLAPPEN] GrafikModus Erstellen der Szenerie, Kamera etc. Variablen deklarieren Schleife Anfang Irgendwas rechnen Ein bisschen zeichnen/rendern Flip Cls Schleife Ende Wie dir auffallen muss verwendest du zweimal Flip, zweimal Cls etc... www.robsite.de/bbkurs2 |
||
![]() |
Golden Age |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, ich bin jetzt soweit, dass ich meine Welt reinladen möchte, allerdings sehe ich sie nicht wenn ich sie geladen habe und ich denke, dass es am code liegt.
Code: [AUSKLAPPEN] Graphics3D 1024,768,32,2
SetBuffer BackBuffer() screencamera=CreateCamera() CameraViewport screencamera,0,0,1024,768 CameraRange screencamera,1,1000 light=CreateLight() LightColor light,255,255,255 AmbientLight 190, 190, 190 PositionEntity screencamera, 0,0,0 ;################ ;Globals ;################ Global GfxW=GraphicsWidth() Global GfxH=GraphicsHeight() ;MAINLOOP While 1=1 ;damit keine Taste beenden kann UpdateWorld RenderWorld Cls If not_remake = False Text GfxW/2,0,"The first 3D-Game",1 ;Letzter PARAMETER=1 zentriert den Text Text 0,30,"Starte mit Enter/Beende mit Escape" EndIf If KeyHit(1) End EndIf If KeyHit(28) And beenden = False dauer=MilliSecs() EndIf If MilliSecs()<dauer+1000 Text GfxW/2,300,"Es beginnt!!!",1 beenden = True EndIf If MilliSecs()>dauer+1000 And beenden = True ClsColor 12,86,129 not_remake = True EndIf If not_remake = True And weltgeladen = False welt= LoadMesh("Welt.b3d") PositionEntity welt, 0,0,200 weltgeladen = True EndIf Flip Wend End Die Welt wird ziemlich weit unten als Welt.b3d geladen. |
||
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
RenderWorld![]() Cls ![]() ... wundert dich das, wenn du die Befehle in dieser Reihenfolge verwendest? und statt "While 1=1" macht eine Repeat ![]() ![]() |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Golden Age, dein Code hat gerade mal eine Hand voll Zeilen und ist bereits jetzt total unübersichtlich verschnörkelt. Ich kann dir wirklich nur nahe legen, sich erst mit den Grundlagen zu beschäftigen. Du wirst so in der Form nicht wirklich weiter kommen und nur Frust ernten. Auch mit den ganzen Schaltervariablen machst du im grunde nichts anderes als ewige Gotos zu umgehen.
Ich kenne Sobsite nicht wirklich, soll aber wohl recht gut sein. Es gibt da wohl auch recht gute Tutorials für Blitz-Anfänger die dir sicherlich weiter helfen werden http://www.robsite.de/tutorials.php?tut=blitzbasic |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Golden Age |
![]() Antworten mit Zitat ![]() |
---|---|---|
Okay, funktioniert jetzt, es lag daran dass ich statt ClsColor CameraClsColor verwenden musste.
Und was die Übersichtlichkeit angeht, kann ich wenigstens mehrere Repeat..Until schleifen nacheinander machen? Sonst wüsste ich nicht, wie ich aufhören kann, den Text wiedergeben zu lassen. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich finde es am besten, indem man sich eine art Infoanzeige bastelt. Sie besteht aus einer einfachen Abfrage und einer festen Position, welcher Inhalt über eine Stringvariable angegeben wird.
Beispiel Code: [AUSKLAPPEN] Graphics 800,600,0,2
SetBuffer BackBuffer() Local Timer%=CreateTimer(60) ;FPS-Abgrenzung Local MS% ;Millisekunden-Zwischenspeicherung Local InfoTime% ;Infoanzeige-Zeitsteuerung Local InfoText$ ;Textinhalt-Infoanzeige While Not KeyHit(1) MS=MilliSecs() Text 0,0,"Drücke [1], [2] oder [ENTER]" If KeyHit(28) Then InfoTime=MS+2000: InfoText="Zwei Sekunden" If KeyHit(2) Then InfoTime=MS+4000: InfoText="Vier Sekunden-Anzeige" If KeyHit(3) Then InfoTime=MS+500: InfoText="Ich stehe nur kurz da" If InfoTime>MS Then Text 400,20,InfoText,1 WaitTimer(Timer) Flip 0 Cls Wend Text 400,200,"Programm wird beendet",1 Flip: Delay 1000: End |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group