Page 2 sur 6

Publié : lun. 12/janv./2009 15:39
par comtois
j'ai un exemple de tir dans cette archive (pivotchar.pb)

http://herved25.free.fr/test/Demo3D.zip

J'espère que ça t'aidera à avancer dans ton projet.

Publié : mar. 13/janv./2009 23:12
par guerrier001
Oui merci j'ai bien avancer dans mon projet il ne manque a ma base que les collision et l'apesanteur tous ça grâce a Dreamotion (J'utilise un des exemple pour le transformer en se que je veut). Aussi j'ai un problème de rotation avec un personnage :

Code : Tout sélectionner

; ------------------------------------------------------------
;   DreaMotion3D
;
;   Exemple     :   AnimX
;   Historique  :
;     18/09/06  00:00    DreaMotion3D Team
;     10/02/07  19:16    TMyke
;
; ------------------------------------------------------------

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

;EnableExplicit


Declare FrameFind( *pframe.D3DXFRAME , *frame.D3DXFRAME)
; Globales
Global	anglex.f, angley.f, flagXDown.w
Global	mox.f, omx.f, moy.l, omy.l


  Global	*camera.CEntity
  Global *land.CEntity
  Global	Dim *tiny.CAnimX(30)
  Global *cube.CMesh
  Global	*font.CFont
  
  Global  val.l,Quit.b 
  Global  i.l, flag.l
  Global  tab.l=0, *tFrame.D3DXFRAME
  
  DM_InitPhysic()
  ;  Init PB modules
  If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0 
    End
  EndIf

  ; set graphic window 3D
  *app = DM_Graphics3D(800,600, 32,  0, 1)
  
  ;load font
  *font = DM_LoadFont( "Tahoma",9 , 0)
  DM_TextColor (*font, 198,198,198,255)
  ; change directory for media
  SetCurrentDirectory("media/")
  

  ; Set lights 
  DM_AmbientLight(150,  150,  150)
  DM_CreateLight(3)
  
  ; ---------------------------------------
  ;           meshs
  ; ---------------------------------------
  ; Charge le sol
  *land   = DM_LoadMesh("land.x")
  

  *tiny(0)  = DM_LoadAnimMesh("bones_all.x")
  DM_ScaleEntity(*tiny(0), 13,13,13)
  DM_AnimateSpeed(*tiny(0), 0.01)
  DM_MoveEntity(*tiny(0), -50,10,-300.0)
DM_RotateEntity(*tiny(0), 0,20,0)





 

;Debug DM_AnimFrameName(*tiny(0)\ g_pFrameRoot)
;Debug "-------"
;FrameFind( *tiny(0)\ g_pFrameRoot, #Null)



  ; ---------------------------------------
  ;          create camera
  ; ---------------------------------------
  *camera   = DM_CreateCamera()
  DM_MoveEntity(*camera, -14,10,-200) ; valeur initiale -34,25,-250 : nouvelle configuration -14,10,-200
  DM_TurnEntity(*camera, 0,200,0)
  DM_CameraClsColor(*camera, 125, 125, 125)
  ;if full screen...
  ;change_curseur( #IDC_ARROW  )
  ; ---------------------------------------
  ;           main loop
  ; ---------------------------------------
  Repeat
  	ExamineKeyboard()
  	ExamineMouse() 
  	ShowCursor_(1)
  	
	; if Escape Key, exit	  
    If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
  	  Quit=1
    EndIf
  	

    

    ; change  animation on Tiny 5
    If KeyboardReleased(#PB_Key_Up)
      DM_AnimateIndex(*tiny(0), 0)
    EndIf
    If KeyboardPushed(#PB_Key_Up)
      DM_AnimateIndex(*tiny(0), 1)
    EndIf
      If KeyboardReleased(#PB_Key_Down)
      DM_AnimateIndex(*tiny(0), 0)
    EndIf
    If KeyboardPushed(#PB_Key_Down)
      DM_AnimateIndex(*tiny(0), 1)
    EndIf
    If KeyboardPushed(#PB_Key_Down)
      DM_MoveEntity(*tiny(0), 0,0,4)
    
    EndIf
    If KeyboardPushed(#PB_Key_Up)
      DM_MoveEntity(*tiny(0), 0,0,-4)
    EndIf
      
[color=red]      If KeyboardPushed(#PB_Key_Right)
DM_RotateEntity(*tiny(0), 0,4000,0)
EndIf

If KeyboardPushed(#PB_Key_Left)
DM_RotateEntity(*tiny(0), 0,-4000,0)
EndIf[/color]



  	If KeyboardReleased(#PB_Key_B) : flag=11 : EndIf
  	If KeyboardReleased(#PB_Key_N) : flag=0 : EndIf
      
  	; move camera with dir key and mouse (left click)
    If KeyboardPushed(#PB_Key_Up)
  	 	DM_MoveEntity(*camera, 0,0,4)
  	 	      DM_PointEntity(*camera, *tiny(0))

    ElseIf KeyboardPushed(#PB_Key_Down) 
  	  DM_MoveEntity(*camera, 0,0,-4)
  	        DM_PointEntity(*camera, *tiny(0))
    EndIf
    
    If KeyboardPushed(#PB_Key_Left)
      DM_MoveEntity(*camera, -4,0,0.16)
            DM_PointEntity(*camera, *tiny(0))
    ElseIf KeyboardPushed(#PB_Key_Right)
      DM_MoveEntity(*camera, 4,0,0.16)
      DM_PointEntity(*camera, *tiny(0))
    EndIf
    If MouseButton(#PB_MouseButton_Left)
  		If flagXDown=0
  			omx = MouseX()
  			omy = MouseY()
  			flagXDown=11
  		Else
  			moy = MouseY()-omy
  			angley=(0)
  			omy= MouseY()
  			mox = MouseX()-omx
  			anglex=(mox/5.0)
  			omx= MouseX()
  			DM_TurnEntity(*tiny(0), angley,anglex,0)
        DM_TurnEntity(*camera, angley,anglex,0)
  		EndIf
  		  	Else
  	 		flagXDown=0
    EndIf
 

 DM_UpdatePhysic()
  	; ---------------
  	;      Render
  	; ---------------
   	If flag=0 : DM_UpdateWorld() : EndIf
  	DM_BeginScene()
    	DM_RenderWorld(*camera)
  	  ; draw texte
  	  DM_DrawText(*font, 10, 15, "FPS : "+Str(DM_FPS()))
  	  DM_DrawText(*font, 10, 30, "F1/F2/F3/F4 : index of animate's tiny1")

  	DM_EndScene()
  	
  	
  Until Quit=1

  DM_ClearGraphics()
  End


Procedure FrameFind( *pframe.D3DXFRAME , *frame.D3DXFRAME)
  Protected a$
  
  a$=Space(tab)
  Repeat
    *frame = DM_AnimateGetChild(*tiny(0), *pframe, *frame)
    If *frame 
      Debug a$+DM_AnimFrameName(*frame)
      tab+3
      FrameFind(*frame, #Null)
    EndIf
  Until *frame=#Null
  tab-3
 
EndProcedure
; IDE Options = PureBasic v4.00 (Windows - x86)
; CursorPosition = 69
; FirstLine = 53
Je voudrait que quand j'appuie sur la touche droite (ou gauche) il tourne sur lui même comme dans les jeux pour voir le personnage or tous ce qu'il fait c'est un angle de je ne c'est combien de degré . Aidé moi s'il vous plait. Au faite après quand j'aurai fini tout ceci, et bien je pourrait fait mon éditeur de carte 3d et je vous le donnerai et vous ferez un avis dessus d'accord ?

Publié : mer. 14/janv./2009 9:32
par Cool Dji
Bigre,
Si tu commences à 14 ans, sans enfants à t'occuper, sans courses à faire, sans ménage, sans mur qui s'écroule (hein Stephou)....tu devrais pouvoir au moins dégager entre 20 et 30 heures par jour pour tes loisirs :lol: .
Bon, tu n'as pas la chance d'etre obligé de rester à l'interieur l'hiver vu que tu habites à la Réunion...mais tu peux emmener un portable sur la plage pour après le surf et dans ton sac à dos pendant les pauses rando à l'interieur des terres...

Donc avec tout ça et avec l'excellent PureBasic et son Forum, tu devrais pouvoir réussir à faire quelque chose très bientôt...mais commence par un projet plus modeste : à ton age, je commençais à me faire la main sur la production de démo ou d'intro. Je pense que c'est une bonne école car ça permet d'aborder la technicité en programmation sans se préoccuper de la jouabilité d'un jeu (un point essentiel surement plus difficile à réaliser que la technique et qui est souvent délaissé ou négligé).

Bon courage pour la suite
Je ne pourrai hélas point t'aider pour les aspects techniques, je suis naze en 3D :cry:

Publié : mer. 14/janv./2009 10:42
par guerrier001
lol, tu me fait rire , on ne surf pas en Guadeloupe il n'y a pas les vague qu'il faut pour faire 9a mais je préfère passer ma vie a programmer mon jeu en 3d que passer par la case quelle sont les autre programmation que l'on peut faire avec pure basic ou autre. Ta demo ne fonctionne pas comtois , et pour mon problème de pivotage ,quelqu'un a trouver la solution ???

[edit] j'ai compris que il me fallait la version 4.30 pour faire fonctionner ton programme , lol

Publié : mer. 14/janv./2009 18:28
par tmyke
guerrier001 a écrit : Je voudrait que quand j'appuie sur la touche droite (ou gauche) il tourne sur lui même comme dans les jeux pour voir le personnage or tous ce qu'il fait c'est un angle de je ne c'est combien de degré . Aidé moi s'il vous plait. Au faite après quand j'aurai fini tout ceci, et bien je pourrait fait mon éditeur de carte 3d et je vous le donnerai et vous ferez un avis dessus d'accord ?
Hmmm, je pense un peu comprendre mais pas sûr quand même comme dirait l'autre.
Tu essaye de faire un systeme de camera dynamique 3° personne un peu comme dans Tom Raider, je suppose, non ?

Quel est l'action exacte que tu attends de la camera quand tu commande une rotation de ton perso à droite ou
à gauche ?

A+ ;)

Publié : mer. 14/janv./2009 18:35
par guerrier001
je veut que la camera tourne en même temps que la rotation du personnage a gauche ou a droite.

Publié : mer. 14/janv./2009 19:02
par tmyke
Une des meilleurs solution a mon sens est d'employer les parenté. Tu asservis ta
camera à ton mesh animé. Elle suivra donc complètement les movements de ton personnage.
voici à partir de ton code du dessus une partie modifié pour en montrer le mécanisme:
(la clé se trouve sur la ligne *camera = DM_CreateCamera... et j'ai homis les touches liées à
l'animation pour pas surcharger.)

;)

Code : Tout sélectionner

 ...
  ; ---------------------------------------
  ;          create camera
  ; ---------------------------------------
  *camera   = DM_CreateCamera(800,600,*tiny(0))
  DM_MoveEntity(*camera, 0,1,4) ; valeur initiale -34,25,-250 : nouvelle configuration -14,10,-200
  DM_TurnEntity(*camera, 0,180,0)
  DM_CameraClsColor(*camera, 125, 125, 125)
  ;if full screen...
  ;change_curseur( #IDC_ARROW  )
  ; ---------------------------------------
  ;           main loop
  ; ---------------------------------------
  Repeat
     ExamineKeyboard()
     ExamineMouse()
     ShowCursor_(1)
     
   ; if Escape Key, exit    
    If KeyboardReleased(#PB_Key_Escape) Or WindowEvent()=#PB_Event_CloseWindow
       Quit=1
    EndIf
     
    If KeyboardPushed(#PB_Key_Down)
      DM_MoveEntity(*tiny(0), 0,0,4)
    EndIf
    If KeyboardPushed(#PB_Key_Up)
      DM_MoveEntity(*tiny(0), 0,0,-4)
    EndIf
     
  If KeyboardPushed(#PB_Key_Right)
    DM_TurnEntity(*tiny(0), 0,0.5,0)
  EndIf

  If KeyboardPushed(#PB_Key_Left)
    DM_TurnEntity(*tiny(0), 0,-0.5,0)
  EndIf
....

Publié : jeu. 15/janv./2009 9:35
par Cool Dji
Great Boy,

Désolé d'avoir confondu Guadeloupe et Réunion !!
Belle motivation en tous les cas...t'inquiète, tu ne metteras pas toute une vie pour faire ton jeu !!!!
Je vais profiter de ton topic pour me mettre à la 3D...

Petite parenthèse !

Publié : jeu. 15/janv./2009 10:54
par Huitbit
lol, tu me fais rire , on ne surfe pas en Guadeloupe
Au fait, il y a quand même des épreuves aux niveaux national et mondial en surf (spot de Damencourt au Moule par exemple !). Il y a même des champions de France dans les petites catégories !!!! :wink:


Bonne continuation !

Publié : jeu. 15/janv./2009 11:01
par Cool Dji
Well,

Merci huibit, tu me sauves !!
Au fait, elle est bonne l'eau chez vous en ce moment (guadeloupe, réunion, martinique...) ?
Ici, en métropole on peut surfer sans soucis mais sur la neige... :P

Publié : jeu. 15/janv./2009 11:19
par guerrier001
ton code ne fonctionne mais la rotation de la camera va trop vite , aidez moi , s'il vous plait .

Publié : jeu. 15/janv./2009 12:53
par tmyke
La camera suit ton personnage, a la base c'est un peu rigide, mais je ne comprend pas trop ce
que tu entends par 'va trop vite' ?

Publié : jeu. 15/janv./2009 19:13
par guerrier001
le perso tourne bien mais c'est la camera tourne plus vite que le perso et je veut qu'il ralentie

Publié : jeu. 15/janv./2009 20:05
par tmyke
Le code que j'ai fournis plus haut asservi la camera au personnage, et donc elle tourne
à la même vitesse si tu l'as bien retranscrit. Après effectivement, pour plus de réalisme,
il faut ajouter un effet de souplesse avec un ralentissement dans les mouvement,
avec un rattrape sur le personnage ensuite. Mais je pense qu'avec un peu d'imagination
tu devrais y a arriver... ;)

avec la 4.30, chuis un beau boulet

Publié : ven. 16/janv./2009 12:42
par beauregard
guerrier001 a écrit :le perso tourne bien mais c'est la camera tourne plus vite que le perso et je veut qu'il ralentie
moi et le 3D, çà fait 2, mais même si je n'arrive plus à afficher un gadget, je... hey! mais attend ! ne fuis pas ! reviens !
bon, un conseil, apprend d'abord à manipuler les sprites et la bibliothèque des liste chainées aussi.