Xinclude und Proceduren

Anfängerfragen zum Programmieren mit PureBasic.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Xinclude und Proceduren

Beitrag von smateja »

Hallo zusammen,

ich habe ein kleines Problem mit dem Befehl XInclude und hoffe ihr könnt mir weiterhelfen.

Folgende kurze Erklärung:

In meinem Hauptprogrammteil - nennen wir es main.pb steht ganz oben drin Xincludefile("befehle.pb").

wenn ich nun im Hauptprogramm also in der main.pb hier eine Procedure einfüge die sich auf einen befehl aus der befehle.pb bezieht, funktioniert das nicht.

wenn ich das ganze jetzt aber ohne die procedure mache - sprich den befehl den ich aus der befehle.pb aufrufen möchte im main.pb - wie gesagt ohne diesen in eine procedure zu verpacken aufrufe - klappt alles soweit.

Was mach ich falsch?

Merci für eure mithilfe.
PB 4.6 / 32 Bit / 64 Bit
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Re: Xinclude und Proceduren

Beitrag von TomS »

Code?
Anhand deiner Ausführungen getestet und nicht nachvollziehbar.

Code: Alles auswählen

;include.pbi
Procedure ABC()
    ProcedureReturn 41
EndProcedure

Code: Alles auswählen

;main.pb
XIncludeFile "include.pbi"
Procededure Test()
    ProcedureReturn ABC()
EndProcedure

Debug Test()
Funzt hier einwandfrei.

EDIT: Meins du vielleicht so?

Code: Alles auswählen

Procedure TEst()
    XIncludeFile "include.pbi"
    ABC()
EndProcedure
In dem Fall erhältst du doch die eindeutige Fehlermeldung, dass man in Prozeduren keine Prozeduren definieren kann.
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Re: Xinclude und Proceduren

Beitrag von smateja »

merci für die schnelle antwort - suspekt - wenn ich dein beispiel bentutze funktioniert alles wie es soll. mmhm



okay - meine procedure schaut wie folgt aus im hauptteil:

Code: Alles auswählen

Procedure CameraUpdate()
  	mx = Curve(LEMouseX() - LEGraphicsWidth() / 2, mx, 6)
	my = Curve(LEMouseY() - LEGraphicsHeight() / 2, my, 6)
	LEMoveMouse(LEGraphicsWidth() / 2, LEGraphicsHeight() / 2)
	camrotation.X = camrotation.X + my / 10.0
	camrotation.Y = camrotation.Y - mx / 10.0
	LERotateEntity(fw.Main.camera, camrotation)
	move = LEKeyDown(#KEY_W) - LEKeyDown(#KEY_S)
	strafe = LEKeyDown(#KEY_D) - LEKeyDown(#KEY_A)
	LEMoveEntity(fw.Main.camera, Vec3(strafe / 10.0, 0, move / 10.0))

EndProcedure


und im meinem include stehen die ganzen befehle wie z.b. LEMouse() das er mir dann auch in der procedur bemängelt.
Evtl sei gesagt, dass z. B. der Befehl LEMouse() ein Prototyp ist - kann es damit was zu tun haben?
PB 4.6 / 32 Bit / 64 Bit
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Xinclude und Proceduren

Beitrag von ts-soft »

@smateja
Da wird nicht eine einzige Variable in der Procedure deklariert, sind die alle Global :o

Falls noch nicht geschehen: EnableExplicit als erstes im Code und dann natürlich alle
Variablen deklarieren, bevor man um Hilfe bittet.

Gruß
Thomas
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Re: Xinclude und Proceduren

Beitrag von smateja »

ARg - das wars - einfach die variablen definieren ggf. global etc.

Danke für den Tipp.
PB 4.6 / 32 Bit / 64 Bit
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Re: Xinclude und Proceduren

Beitrag von ts-soft »

fw.Main.camera

Was soll das sein? Aus welcher Sprache hast Du versucht was zu übersetzen?
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
smateja
Beiträge: 250
Registriert: 25.11.2004 19:51
Computerausstattung: Alienware Aurora / Intel Core i7 CPU @ 2.8 GHz / 64 Bit OS

Re: Xinclude und Proceduren

Beitrag von smateja »

ts-soft hat geschrieben:fw.Main.camera

Was soll das sein? Aus welcher Sprache hast Du versucht was zu übersetzen?

Kurze Erklärung hierzu - ich bastel derzeit mit Leadwerks Engine rum - das include läuft einwandfrei...
Kleiner Auszug:

Code: Alles auswählen


Prototype.i LECreateFramework (  )
Prototype LEFreeFramework ( *fw.TFramework )
Prototype LERenderFramework (  )
Prototype LEUpdateFramework (  )
Prototype LESetStats ( mode.i )
Prototype LESetWireframe ( mode.i=1 )
Prototype LESetZoom ( zoom.f )
Prototype LEResetFramework (  )
Prototype LESetContrast ( contrast.f )
Prototype LESetBrightness ( brightness.f )
Prototype LESetSaturation ( saturation.f )
Prototype LESetHDR ( mode.i )
Prototype LESetBackgroundMode ( mode.i )
Prototype LESetSkybox ( material.i )
Prototype LESetDistanceFog ( mode.i )
Prototype LESetDistanceFogColor ( *color.TVec4 )
Prototype LESetDistanceFogAngle ( start.f, stop.f )
Prototype LESetDistanceFogRange ( nearrange.f, farrange.f )
Prototype LESetBloom ( mode.i )
Prototype LESetBackgroundColor ( *color.TVec4 )
Prototype LESetNearDOF ( mode.i )
Prototype LESetFarDOF ( mode.i )
Prototype LESetNearDOFStrength ( strength.f )
Prototype LESetFarDOFStrength ( strength.f )
Prototype LESetNearDOFRange ( start.f, stop.f )
Prototype LESetFarDOFRange ( start.f, stop.f )
Prototype LESetGodRays ( mode.i )
Prototype LESetSSAO ( mode.i )
Prototype LESetAntialias ( mode.i )
Prototype LESetWater ( mode.i )
Prototype LESetWaterWaveSpeed ( speed.f )
Prototype LESetWaterHeight ( height.f )
Prototype LESetWaterColor ( *color.TVec4, *submersioncolor.TVec4 )
Prototype LESetWaterSoftness ( softness.f )
Prototype LESetWaterVisibility ( nearrange.f, farrange.f )
Prototype LESetWaterAmplitude ( amplitude.f )
Prototype.i LEGetFrameworkLayer ( index.i )
Prototype.i LEGetLayerWorld ( layer.i )
Prototype.i LEGetLayerCamera ( layer.i )
Prototype.i LEGetFrameworkListener (  )
Prototype LESetReflectionElements ( elements.i )

Wer das funktionierende include braucht für die Leadwerks Engine - einfach kleines pm an mich. Evtl lade ich es die Tage mal auf nen Server hoch.

Hab da auch schon paar Problemchen mit dem Dingens:

Es gibt eine Procedure die heißt

Code: Alles auswählen

Procedure Vec3 (*Result.Tvec3, px.f=0, py.f=#MAX_DEC, pz.f=#MAX_DEC )
  With *Result
    \X = px
    If py=#MAX_DEC 
     \Y = px 
    Else
     \Y = py 
    EndIf
    If pz=#MAX_DEC 
     \Z = px 
    Else 
     \Z = pz 
    EndIf
  EndWith
  ProcedureReturn *Result
EndProcedure


Mein Hauptteil schaut so aus:

Code: Alles auswählen



EnableExplicit

XIncludeFile ("hw_engine.pbi")


;XIncludeFile ("hw_controlcam.pbi")
;XIncludeFile ("hw_screenrequester.pbi")


Define VResult.TVec3   ;if an expression requires more than one vec3 then define VResult2.TVec3, VResult3TVec3, etc ... for each vec3
Define sx.i
Define sy.i
Define framework.i
Define Lua.i
Define Camera.i
Define scene.i
Define player.i
Define font.i

Define move.f
Define strafe.f
Define jump.f

Define camrotation
Define camrotation_x.f
Define camrotation_y.f

Define mouse_x.f
Define mouse_y.f

Define playerpos

LERegisterAbstractPath(GetCurrentDirectory())
LESetAppTitle("Hiveworx Framework")

sx = 1024
sy = 768



If LEGraphics(sx,sy)>0
   framework = LECreateFramework()

   If framework>0    
   
      Lua = LEGetLuaState()
      LELua_pushobject(Lua, framework);
      LELua_setglobal(Lua, "fw");
      LELua_pop(Lua, 1);

      Camera = LEGetLayerCamera(LEGetFrameworkLayer(0))
      LEPositionEntity(camera, Vec3(VResult,0, 350,0))


      scene = LELoadScene("abstract::test001.sbx")
      LEEntityType(scene,2,1)
      
      player = LECreateController(1.8,0.4,0.5,45,0)
      LEEntityType(player,1)
      
      LESetStats(2)
      
      font=LELoadFont("abstract::Arial12Shadow")
      LESetFont(font)
      
      move.f=0.0
      strafe.f=0.0
      jump.f=0.0
      
      
      LEMoveMouse(LEGraphicsWidth()/2,LEGraphicsHeight()/2)
      
      LEHideMouse()
     
     XIncludeFile ("hw_grafikoptionen.pbi")
     
     While (LEKeyHit(#KEY_ESCAPE)=0) And (LEAppTerminate()=0)
       
       
   ;-Mouse Look
       
          mouse_x.f=Curve(LEMouseX()-LEGraphicsWidth()/2,mouse_x.f,6.0)
          mouse_y.f=Curve(LEMouseY()-LEGraphicsHeight()/2,mouse_y.f,6.0)
          
	        LEMoveMouse(LEGraphicsWidth()/2,LEGraphicsHeight()/2)
	        camrotation=LEEntityRotation(camera,Vec3(VResult, mouse_y.f, mouse_x.f, 0))
	        camrotation_x.f=camrotation_x.f-mouse_x/10
	        camrotation_y.f=camrotation_y.f+mouse_y/10
	        LERotateEntity(camera,Vec3(VResult, camrotation_y.f, camrotation_x.f, 0))
	        
	        
	;-Player movement        
       move=LEKeyDown(#KEY_W)-LEKeyDown(#KEY_S)
       strafe=LEKeyDown(#KEY_D)-LEKeyDown(#KEY_A)
       
  ;-Set controller Input     
       LEUpdateController(player,Vec3(VResult, camrotation_y.f, camrotation_x.f, 0),move,strafe,jump,0.5);
       
       ;- Position Camera
       
       playerpos=LEEntityPosition(player,Vec3(VResult),0)
       ;playerpos\y=playerpos\y+1.75
       LEPositionEntity(camera,playerpos,0)
	 
	       LEUpdateFramework() ;Update timing And world
         LERenderFramework() ;Render


         
         LESetBlend(1)

         LEDrawText("CamPosX: ",800,20)
         LEDrawText("CamPosY: ",800,40)
         LEDrawText("CamPosZ: ",800,60)
         
         LESetBlend(0)
         
         LEFlip(0) ;Send to screen
   
         
         
         
      Wend      
      
    Else
      LEAppLog("ERROR: Failed to create Framework")
   EndIf
   
   LEFreeFramework(framework)
Else
   LEAppLog("ERROR: Failed to create or set graphics mode")
EndIf

  
LEEndRender()
CloseLibrary(#Engine_Library)




mir gelignt das hier leider nicht:

;playerpos\y=playerpos\y+1.75
LEPositionEntity(camera,playerpos,0)

Letztere Zeile crashed die Engine - vorletzte Zeile mault der COmpiler dass es keine STructur gibt und ich weiß nicht wie ich sie definieren kann/soll.

LG
PB 4.6 / 32 Bit / 64 Bit
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Re: Xinclude und Proceduren

Beitrag von HeX0R »

smateja hat geschrieben: mir gelingt das hier leider nicht:

;playerpos\y=playerpos\y+1.75
LEPositionEntity(camera,playerpos,0)

Letztere Zeile crashed die Engine - vorletzte Zeile mault der Compiler dass es keine Structur gibt, und ich weiß nicht wie ich sie definieren kann/soll.

LG
Naja, hätte dein "kleiner Auszug" den Prototypen LEPositionEntity() beinhaltet, hätte man dir bestimmt helfen können.

Aber, dass playerpos als stinknormale Integer-Variable definiert wurde und du daher selbstverständlich auf kein \y-Element zugreifen kannst, siehst du doch, oder?
Antworten