Hauptmenü in PB3D

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Prozedurdeklerationen sollte man aber nicht in If Bedingungen schreiben

Edit: War wirklich missverständlich, so besser?
Zuletzt geändert von Batze am 20.06.2005 20:56, insgesamt 1-mal geändert.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

@Batze:
Wie kommst du denn darauf?
Dann würde ja keins meiner Programm laufen. :lol:
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Code: Alles auswählen

If 0=a
  
  Procedure Fehler()
    ;Hier steht irgendwas 
  EndProcedure
  
EndIf
Das sagt mir diese Fehlermeldung beim compilieren:
Line 3 - A Procedure can't be Created inside an If, Repeat, While or For.
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Um nochmal auf Green Snakes Problem zurückzukommen:

Code: Alles auswählen

#CameraSpeed = 5 

IncludeFile "Screen3DRequester.pb" 

DefType.f KeyX, KeyY, MouseX, MouseY 

Procedure Hauptmenu() 
  LoadSprite(0,"AAA.bmp") 
  
  Repeat 
    DisplaySprite(0,0,0) 
    
    ExamineKeyboard() 
    
    FlipBuffers() 
    ClearScreen(0,0,0)
    If KeyboardPushed(#PB_Key_Escape) : quit = 1 : EndIf
    
  Until KeyboardPushed(#PB_Key_Return) Or quit = 1
  ProcedureReturn quit
EndProcedure 

If InitEngine3D() 
  Add3DArchive("Data\"          , #PB_3DArchive_FileSystem) 
  Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip) 
  
  InitSprite() 
  InitKeyboard() 
  InitMouse() 
   
  If Screen3DRequester() 
    
    AmbientColor(RGB(255,255,255)) 
    
    CreateMaterial  (0, LoadTexture(0, "Terrain_Texture.jpg")) 
    AddMaterialLayer(0, LoadTexture(1, "Terrain_Detail.jpg"), 1) 
    
    CreateTerrain("Terrain.png", MaterialID(0), 4, 0.6, 4, 4) 
    
    CreateCamera(0, 0, 0, 100, 100) 
    CameraLocate(0, 128, 25, 128) 
    
    SkyDome("Clouds.jpg",10) 
    
    Repeat 
      Screen3DEvents() 
      
      If ExamineKeyboard() 
        
        If KeyboardPushed(#PB_Key_Left) 
          KeyX = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Right) 
          KeyX = #CameraSpeed 
        Else 
          KeyX = 0 
        EndIf 
        
        If KeyboardPushed(#PB_Key_Up) 
          KeyY = -#CameraSpeed 
        ElseIf KeyboardPushed(#PB_Key_Down) 
          KeyY = #CameraSpeed 
        Else 
          KeyY = 0 
        EndIf 
        
      EndIf 
      
      If ExamineMouse()
        MouseX = -(MouseDeltaX()/10)*#CameraSpeed/2 
        MouseY = -(MouseDeltaY()/10)*#CameraSpeed/2 
      EndIf 
      
      If KeyboardPushed(#PB_Key_Escape) : Hauptmenu() : EndIf
      
      Height.f = TerrainHeight(CameraX(0), CameraZ(0)) 
      
      RotateCamera(0, MouseX, MouseY, RollZ) 
      MoveCamera  (0, KeyX, -CameraY(0)+Height+8, KeyY) 
      
      RenderWorld() 
      Screen3DStats() 
      FlipBuffers() 
    Until KeyboardPushed(#PB_Key_Escape) And Hauptmenu()
  EndIf 
  
Else 
  MessageRequester("Error", "The 3D Engine can't be initialized",0) 
EndIf 
  
End 
 
Aber warum lädst du das Bild AAA.bmp bei jedem starten des Hauptmenüs?
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Na klar geht sowas nicht. Wer kommt schon auf die Idee das so zu machen? Einen Sinn hat das ganze nicht wirklich.

Ich dachte zu meinst sowas:

Code: Alles auswählen

Procedure.l GetRandom()
  ProcedureReturn Random(1)
EndProcedure

For a.l = 1 To 50
  If GetRandom()
    Debug "ja"
  Else
    Debug "nein"
  EndIf
Next
Oder sowas:

Code: Alles auswählen

Procedure.s GetText()
  ProcedureReturn "BliBlablubb"
EndProcedure

a = 0

If a = -a
  Debug GetText()
EndIf
*sichdievorigenPostsanschaut* :roll:
Ah, jetzt weiß ich auch, wie du darauf kommst. Tststs... tjaja /:->

Dann ist ja alles klar.
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

das wegen dem laden....klar, das war nur zur demo...ich hatte leider sehr wenig zeit.
ich werde das natürlich am anfang 1 mal machen :allright:



edit:

@Batze
danke, für en vorschlag...warum bin ich nich draufgekommen?
werde ihn noch weiter ausbauen..danke nochmals

2. wegen der proc in der if. wie gesagt, zu wenig zeit = schnell code geschrieben, schnell geschrieben = viele fehlr, viele fehler = proc in der if abfrage :lol:
-.-"
Antworten