Übergabe von Listen an Proceduren...

Für allgemeine Fragen zur Programmierung mit PureBasic.
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Übergabe von Listen an Proceduren...

Beitrag von Drago »

Hallo Leute...

Ich möchte in einer Procedure eine Berechnung machen, die für viele/mehrere structurierte Listen
gebraucht wird.
Grundlegend weiß ich wie ich das mit EINER Liste machen kann.
Und ich weis auch, das ich das auf eine andere Art lösen könnte.
Mich interresiert es nur, wegen dem Pointergedöns.... :D

Als Beispiel:

Code: Alles auswählen

;---------------------------------------- PseudoCode ---------------------------------------------------
#StartX = 512
#StartY = 384
Global Factor = 0.016

Structure Pos
     x.f
     y.f
     angle.f
     speed.f
EndStructure

Structure Sphaere Extends Pos
     sphaere.i
EndStructure

Structure Smoke Extends Sphaere
     smoke.i
EndStructure

Global NewList Sphaere.Sphaere()
Global NewList Smoke.Smoke()
;-----------------------------------------------------------------------
; Wie kann ich diese Procedure so gestalten, das ich sie mit verschiedenen
; structurierten Listen anspringen kann ?
;------------------------------------------------------------------------
Procedure SetXY_Position( *Zeiger.i )                                     
     
*Zeiger\x + Cos( Radian( *Zeiger\y ) ) * *Zeiger\Speed * Factor     
*Zeiger\x + Cos( Radian( *Zeiger\y ) ) * *Zeiger\Speed * Factor     

EndProcedure


Procedure MoveObjekt()
     SetXY_Position( @Sphaere() ); so ist es wohl falsch... :-(
     SetXY_Position( @Smoke()  )
EndProcedure
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7039
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Übergabe von Listen an Proceduren...

Beitrag von STARGÅTE »

Wenn du Zeicher noch die Structure gibst, ist es doch richtig (wenn man dann noch den Inhalt ändert ^^).

Code: Alles auswählen

Procedure SetXY_Position( *Zeiger.Pos )                                     
     
*Zeiger\x + Cos( Radian( *Zeiger\Angle ) ) * *Zeiger\Speed * Factor     
*Zeiger\y + Sin( Radian( *Zeiger\Angle  ) ) * *Zeiger\Speed * Factor     

EndProcedure
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Drago
Beiträge: 148
Registriert: 02.02.2010 18:22
Computerausstattung: Win XP SP3, AMD Sempron (MMX) 1.2 GHz, 512 MB, Nvidia GeForce FX 5200, 128 MB, DirectX 9.0c
Wohnort: Westerwald

Re: Übergabe von Listen an Proceduren...

Beitrag von Drago »

:freak: VIELEN Dank... und ich rödel mir hier einen ab...nee, nee...

Hier die funktionierende Version:

Code: Alles auswählen

;----------------------------------------- Funktionierender Code -----------------------------------------------
#StartX = 512
#StartY = 384
Global Factor = 0.016

Structure Pos
     x.f
     y.f
     angle.f
     speed.f
EndStructure

Structure Sphaere Extends Pos
     sphaere.i
EndStructure

Structure Smoke Extends Sphaere
     smoke.i
EndStructure

Global NewList Sphaere.Sphaere()
Global NewList Smoke.Smoke()

Global Factor = 2
Procedure SetXY_Position( *Zeiger.Pos )
     
*Zeiger\x + Cos( Radian( *Zeiger\angle ) ) * *Zeiger\Speed * Factor     
*Zeiger\y + Sin( Radian( *Zeiger\angle ) ) * *Zeiger\Speed * Factor     

EndProcedure

Procedure CreateSphaere()
     
     AddElement( Sphaere() )
     
     With Sphaere()
          
          \sphaere = Sprite1
          \x            = #StartX
          \y            = #StartY
          \angle      = Random( 360 )
          \speed = 200
     EndWith
     
EndProcedure

Procedure CreateSmoke()
     
     AddElement( Smoke() )
     
     With Smoke()
          
          \smoke = Sprite2
          \x            = 18
          \y            = 30
          \angle      = Random( 360 )
          \speed = 30
          
     EndWith
     
EndProcedure

Procedure MoveObjekt()
     SetXY_Position( @Sphaere() )
     SetXY_Position( @Smoke()  )
EndProcedure

CreateSphaere()
CreateSmoke()

Debug "     Alte Werte"
Debug " -----Sphaere ------"

ForEach Sphaere()
     Debug "\x = " + StrF( Sphaere()\x )
     Debug "\y = " + StrF( Sphaere()\y )
Next

Debug ""
Debug "----- Smoke -------"

ForEach Smoke()
     Debug "\x = " + StrF( Smoke()\x )
     Debug "\y = " + StrF( Smoke()\y )
Next

MoveObjekt()

Debug ""
Debug "     Neue Werte"
Debug " -----Sphaere ------"

ForEach Sphaere()
     Debug "\x = " + StrF( Sphaere()\x )
     Debug "\y = " + StrF( Sphaere()\y )
Next

Debug ""
Debug "----- Smoke -------"

ForEach Smoke()
     Debug "\x = " + StrF( Smoke()\x )
     Debug "\y = " + StrF( Smoke()\y )
Next
Antworten