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
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