Page 1 sur 1

pointeur dans une structure

Publié : ven. 16/mars/2007 19:43
par minirop
bonjour,
je m'amuse avec Dreamotion mais j'ai un problème de pointeur de structure contenant un pointeur :lol:

Code : Tout sélectionner

Structure Joueur
	*arme.Arme
	vie.l
	*cam.CEntity
EndStructure

Procedure CreateJoueur(*JMesh.Joueur)
	*JMesh\cam = DM_CreateCamera()
	DM_MoveEntity(*JMesh\cam, 0,0,-100)
	DM_CameraClsColor(*JMesh\cam, 125, 125, 125)
EndProcedure
çà me sort des trucs comme "Structure field missing" ou "structure not found cam"
j'ai tout essayer (mettre à * devant cam : *JMesh\*cam ou encore un . à la place du \,..ect...) mais rien à faire

merci à ceux qui "sauron"

Publié : ven. 16/mars/2007 20:05
par tmyke
Voici un petit exemple qui pourait répondre a ta question:
d'abord un exemple de structure:

Code : Tout sélectionner

; exemple d'une structure
Structure cube
    *index.CEntity
    x.f
    Y.f
    z.f
EndStructure
; un tableau a partir de la structure créée
Dim cube.cube(1024) ; pour 1024 objets
puis la creation des objets peut ce faire de cette façon...

Code : Tout sélectionner

For objet=0 To 1023  
     cube(objet)\index=DM_CreateCube() ;  creer un Cube parmis 1024
next objet
... et pour manipuler tous ces objets:

Code : Tout sélectionner

for objet=0 to 1023
   cube(objet)\x=random(100)
   cube(objet)\Y=random(100)
   cube(objet)\z=random(100)
   DM_PositionEntity( cube(objet)\index, cube(objet)\x, cube(objet)\Y, cube(objet)\z)
next objet
en suite si tu veux ecrire une procedure, tu peux écrire:

Code : Tout sélectionner

Procedure Test( *cc.cube)
 *cc\index = DM_CreateCube()
EndProcedure
...
Test( @cube(nn] )

Publié : ven. 16/mars/2007 20:21
par minirop
si tu regardes mon code c'est le même mais çà marche pas.
Et avec ton code j'ai un "invalid access memory"

Publié : ven. 16/mars/2007 20:40
par tmyke
Etrange. Voici un code complet, et qui fonctionne chez moi:

Code : Tout sélectionner

; Fichiers Include 
IncludePath "Include\"  :  IncludeFile "dreamotion3d.pbi"


 
  ;  Initialisation des différents modules
  If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
    End
  EndIf

; exemple de structure
Structure cube
    *index.CEntity
    x.f
    Y.f
    z.f
EndStructure
; un tableau a partir de la structure créée
Dim cube.cube(24) ; 
; procedure pour créer un cube, pour l'exemple
Procedure Create( *cc.cube)
 *cc\index = DM_CreateCube()
EndProcedure 


  ; Initialise la fenêtre graphique
  DM_Graphics3D(800, 600, 32,  0, 1)
  ; Définit la couleur ambiante
  DM_AmbiantLight(100,  100,  100)
  DM_CreateLight(3)
  
  
  ; creation de mes 24 cubes
  For i = 0 To 23
   Create( @cube(i) )
   DM_TranslateEntity( cube(i)\index, i*3,0,0)
  Next
  
  
  ; ---------------------------------------
  ;          Gestion des caméras
  ; ---------------------------------------
  *camera   = DM_CreateCamera()
  DM_MoveEntity(*camera, 20,20,-50.0)
  DM_TurnEntity(*camera, 15,0,0)
  DM_CameraClsColor(*camera, 125, 125, 125)



  ; ---------------------------------------
  ;           Boucle principale
  ; ---------------------------------------
  Repeat
  	ExamineKeyboard()
  	ExamineMouse() 
  	ShowCursor_(1)

  	If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
  	  Quit=1
  	EndIf
      
      ; ---------------
      ;      Rendu
      ; ---------------
      DM_BeginScene()
        DM_RenderWorld()
       DM_EndScene()
      
      
Until Quit=1
DM_ClearGraphics()
End

Publié : ven. 16/mars/2007 21:22
par minirop
c'est bon j'ai réussi à ne plus avoir de problème :) c'était que je passais un pointeur non initialisé :s