Seite 1 von 1

Übergabe von Listen an Proceduren...

Verfasst: 28.07.2013 12:16
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

Re: Übergabe von Listen an Proceduren...

Verfasst: 28.07.2013 12:20
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

Re: Übergabe von Listen an Proceduren...

Verfasst: 28.07.2013 12:33
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