GraphicsHight als Globale Variable

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Golden Age

Betreff: GraphicsHight als Globale Variable

BeitragSa, Sep 27, 2008 19:53
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 27, 2008 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
CameraRange funktioniert nur mit einem Abstand der Parameter 10'000.
Und bitte rücke deinen Code ein.

Golden Age

BeitragSa, Sep 27, 2008 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 27, 2008 21:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Sep 27, 2008 23:13
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

Xeres

Moderator

BeitragSa, Sep 27, 2008 23:28
Antworten mit Zitat
Benutzer-Profile anzeigen
RenderWorld
Cls
... wundert dich das, wenn du die Befehle in dieser Reihenfolge verwendest?

und statt "While 1=1" macht eine Repeat Forever Kombination vll. mehr Sinn...
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Sep 28, 2008 2:44
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Sep 28, 2008 11:30
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

hectic

Sieger des IS Talentwettbewerb 2006

BeitragSo, Sep 28, 2008 13:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group