[V4 Beta 5] Declare avec un Tableau en paramètre [Corrigé]
Publié : sam. 25/févr./2006 8:38
Code : Tout sélectionner
Dim Map.Point(20,20)
Declare Toto(Map.Point(2))
Procedure Toto(Map.Point(2))
Map(1,1)\x=12
Map(1,1)\y=34
EndProcedure
Toto(Map())
Debug Map(1,1)\x
Debug Map(1,1)\y
Code : Tout sélectionner
;Declare Toto(Map.Point(2))
Dans le code suivant , j'ai un "invalid memory access" , idem le code fonctionne avec le Declare en commentaire
Code : Tout sélectionner
Structure Truc
X.f
Y.f
Z.f
EndStructure
Dim Map.TRuc(20,20)
Declare Toto(Map.Truc(2))
Procedure Toto(Map.Truc(2))
Map(1,2)\x=12
Map(1,2)\y=34
EndProcedure
Toto(Map())
Debug Map(1,2)\x
Debug Map(1,2)\y
---------------------------
PureBasic - Assembler error
---------------------------
PureBasic.asm [1051]:
MP0
error: illegal instruction.
---------------------------
OK
---------------------------
Idem si je commente les declare , le code fonctionne.
Code : Tout sélectionner
;Deformation Wave Map isométrique
;Par Cpl.Bator
#TailleMapX=40
#TailleMapY=40
#TailleTileX = 16
#TailleTileY = 8
Structure World
X.f
Y.f
Z.f
WaveHeight_A.f
WaveHeight_B.f
EndStructure
Global WaveSpeed.f = 10
Dim Map.World(#TailleMapX,#TailleMapY)
;-Initialisation des composants DirectX
If InitSprite()=0 Or InitMouse()=0 Or InitKeyboard()=0
MessageRequester("Erreur","Impossible d'initialiser DirectX")
End
EndIf
OpenScreen(800 , 600,32,"")
Declare UpdateMap(Map.World(2))
Declare Initialisation_MapIso(Map.World(2))
Procedure UpdateMap(Map.World(2))
StartDrawing(ScreenOutput())
DrawingMode(4|1)
FrontColor($FFFFFF)
WaveSpeed+0.1
For Y = 1 To #TailleMapY
For X = 1 To #TailleMapX
;Calcul des vagues, puis affectation à la hauteur (Z).
Map(x,y)\WaveHeight_A = x*Cos((x*20*2*0.144)+WaveSpeed)
Map(y,x)\WaveHeight_B = x*Cos((x*20*2*0.144)+WaveSpeed)
Map(X,Y)\Z = (Map(x,y)\WaveHeight_A + Map(x,y)\WaveHeight_B)/2
;Affichage des segments
If x=>1 And x<#TailleMapX And y=>1 And y<#TailleMapY
LineXY(352 + Map(X,Y)\X ,150+ Map(X,Y)\Y - Map(X,Y)\Z ,352 + Map(X+1,Y)\X ,150+ Map(X+1,Y)\Y - Map(X+1,Y)\Z)
LineXY(352 + Map(X,Y)\X ,150+ Map(X,Y)\Y - Map(X,Y)\Z ,352 + Map(X,Y+1)\X ,150+ Map(X,Y+1)\Y - Map(X,Y+1)\Z)
EndIf
Next
Next
StopDrawing()
EndProcedure
Procedure Initialisation_MapIso(Map.World(2))
Shared DecalageX.l,DecalageY.l,Offset.l
For Y = 1 To #TailleMapY
For X = 1 To #TailleMapX
DecalageX = DecalageX + (#TailleTileX/2)
DecalageY = DecalageY + (#TailleTileY/2)
Map(X,Y)\X = DecalageX
Map(X,Y)\Y = DecalageY
Next X
Offset+1
DecalageX = -(Offset*(#TailleTileX/2))
DecalageY = (#TailleTileY/2)*Offset
Next Y
EndProcedure
Initialisation_MapIso(Map())
Repeat
ExamineKeyboard()
ExamineMouse()
ClearScreen(0)
UpdateMap(Map())
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape)