du mußt also statt..
Code: Alles auswählen
Procedure getPlayerX(*p.player, x, currentTime)
Code: Alles auswählen
Procedure.f getPlayerX(*p.player, x, currentTime)
Code: Alles auswählen
Procedure getPlayerX(*p.player, x, currentTime)
Code: Alles auswählen
Procedure.f getPlayerX(*p.player, x, currentTime)
Code: Alles auswählen
Global Dim players.player(#NUMBER_OF_PLAYERS)
players(1) = newPlayer(300, 300, 200, currentTime)
Code: Alles auswählen
For i = 0 To #NUMBER_OF_PLAYERS -1
renderPlayer(players(i), currentTime)
Next i
Code: Alles auswählen
#NUMBER_OF_PLAYERS = 4
Structure movingObject
xPos.f
yPos.f
zPos.f
lastTime.l
entity.l
EndStructure
Structure Player Extends movingObject
lives.b
score.l
energy.l
EndStructure
Procedure.f getPlayerX(*p.player, x, currentTime) ; <<<<<< mit rückgabetyp float (Procedure.f)
ProcedureReturn *p\xPos
EndProcedure
Procedure.f getPlayerY(*p.player, y, currentTime) ; <<<<<< mit rückgabetyp float (Procedure.f)
ProcedureReturn *p\yPos
EndProcedure
Procedure.f getPlayerZ(*p.player, z, currentTime) ; <<<<<< mit rückgabetyp float (Procedure.f)
ProcedureReturn *p\zPos
EndProcedure
Procedure.l newPlayer(x, z, y, time)
*new = AllocateMemory(SizeOf(player))
getPlayerX(*new, x, time) ; <<<<<< hier mußt du deinen neuen
getPlayerZ(*new, z, time) ; <<<<<< pointer *new einsetzen,
getPlayerY(*new, y, time) ; <<<<<< und NICHT *players
ProcedureReturn *new
EndProcedure
; <<<<<<<<<<<<< ..und (WICHTIG!), du mußt auch dein ganzes array
; <<<<<<<<<<<<< von pointer mit gültigem speicher belegen, und
; <<<<<<<<<<<<< nicht nur ein element, denn du greift in der
; <<<<<<<<<<<<< hauptschleife weiter unten ja auch auf alle zu.
Global Dim *players.player(#NUMBER_OF_PLAYERS -1)
For i=0 To #NUMBER_OF_PLAYERS -1
*players(i) = newPlayer(300, 300, 200, currentTime)
Next
Procedure renderPlayer(*p.player, currentTime)
CameraLocate (0, getPlayerX(*p.player, x, currentTime) - Cos(2*#PI*(rot/360))*15, TerrainHeight(getPlayerX(*p.player, x, currentTime),getPlayerZ(*p.player, z, currentTime))+10, getPlayerZ(*p.player, z, currentTime) + Sin(2*#PI*(rot/360))*15)
EntityLocate(*p\entity, getPlayerX(*p.player, x, currentTime), TerrainHeight(getPlayerX(*p.player, x, currentTime),getPlayerZ(*p.player, z, currentTime)), getPlayerZ(*p.player, z, currentTime))
EndProcedure
;...
Repeat
currentTime = ElapsedMilliseconds()
For i = 0 To #NUMBER_OF_PLAYERS -1
renderPlayer(*players(i), currentTime)
Next i
Until 0
Code: Alles auswählen
#NUMBER_OF_PLAYERS = 4
Structure movingObject
xPos.f
yPos.f
zPos.f
lastTime.l
entity.l
EndStructure
Structure Player Extends movingObject
lives.b
score.l
energy.l
EndStructure
Procedure.f getPlayerX(*p.player, x, currentTime)
ProcedureReturn *p\xPos
EndProcedure
Procedure.f getPlayerY(*p.player, y, currentTime)
ProcedureReturn *p\yPos
EndProcedure
Procedure.f getPlayerZ(*p.player, z, currentTime)
ProcedureReturn *p\zPos
EndProcedure
Procedure.l newPlayer(x, z, y, time)
*new = AllocateMemory(SizeOf(player))
getPlayerX(*new, x, time)
getPlayerZ(*new, z, time)
getPlayerY(*new, y, time)
ProcedureReturn *new
EndProcedure
Global Dim *players.player(#NUMBER_OF_PLAYERS -1)
For i=0 To #NUMBER_OF_PLAYERS -1
*players(i) = newPlayer(300, 300, 200, currentTime)
Next
Procedure renderPlayer(*p.player, currentTime)
Debug getPlayerX(*p,12,currentTime)
Debug getPlayerY(*p,12,currentTime)
Debug getPlayerZ(*p,12,currentTime)
Debug ""
;CameraLocate (0, getPlayerX(*p.player, x, currentTime) - Cos(2*#PI*(rot/360))*15, TerrainHeight(getPlayerX(*p.player, x, currentTime),getPlayerZ(*p.player, z, currentTime))+10, getPlayerZ(*p.player, z, currentTime) + Sin(2*#PI*(rot/360))*15)
;EntityLocate(*p\entity, getPlayerX(*p.player, x, currentTime), TerrainHeight(getPlayerX(*p.player, x, currentTime),getPlayerZ(*p.player, z, currentTime)), getPlayerZ(*p.player, z, currentTime))
EndProcedure
;...
Repeat
currentTime = ElapsedMilliseconds()
For i = 0 To #NUMBER_OF_PLAYERS -1
renderPlayer(*players(i), currentTime)
Next i
Until 1