Page 9 sur 13

Publié : ven. 02/avr./2004 14:24
par comtois
essaye cette version ,c'est la dernière ( depuis j'ai ajouté une vue de dessus , supprimé quelques lignes qui ne servaient plus , je mettrai à jour le site plus tard )

http://perso.wanadoo.fr/comtois/Sokoban ... ansDll.zip

et il faut tester avec cette dll ( en fait c'est la dernière fournie avec purebasic 3.89 )

http://perso.wanadoo.fr/comtois/Sokoban3D/Engine3D.dll

Publié : ven. 02/avr./2004 17:23
par Invité
oooouu! la taille augmente de façon extraordinaire !! :D :D :D

Publié : ven. 02/avr./2004 19:21
par comtois
oui c'est vrai , il y a un petit effort à faire pour réduire la taille des textures et peut-être la quantité ?

mais est-ce que ça fonctionne cette fois ci sur ton pc transsonique ?

Publié : ven. 02/avr./2004 21:46
par Invité
:D oui !!


dit moi t'a pas rouvé le moyen d'arreter l'anime du personnage lorsque
l'on ne touche a rien ??

chez moi il continu de marcher sur place !!
c'est un detail mais bon !! :D

sinon bravo bien realise !! (ça aurai ete surement plus facile en Dark non ?) :D

qu'utilise tu pour dessiner le decors ?
et je trouve tres baleze d'avoir fait un mode automatique de resolution de nivo ? !! tres fort c'est vraiment le robo qui "cherche une soluce ?"
ou bien est-ce une lecture de data preconfiguré ?
(j'ai pas regarder le source) (pas le temps) :D

:D :D
super! continu je suis fan !!

tu es un des trop rare ici a creer des jeux je trouve ! :)

Publié : ven. 02/avr./2004 23:13
par comtois
dit moi t'a pas trouvé le moyen d'arreter l'anime du personnage
je ne sais pas comment on arrête une animation :?

D'ailleurs , je ne sais pas si c'est possible ? je dirais que non ...

Il y a une solution qu'avait proposée Corbase ,à savoir créer autant d'entitys que d'animations , et montrer les entitys en fonction du contexte ( les autres étant cachées bien entendu ).
Je n'ai pas encore fait d'essais , mais ça pourrait être la solution , faute de mieux .
(ça aurai ete surement plus facile en Dark non ?)
avec moins de possibilités et beaucoup plus lent :lol:
qu'utilise tu pour dessiner le decors ?
C'est le même principe qu'une map 2D , chaque niveau est mémorisé dans un tableau à deux dimensions de 20x18 si je me souviens bien .Ensuite j'utilise deux types d'entitys le cube et le plan pour construire le niveau.
ou bien est-ce une lecture de data preconfiguré ?
C'est plutôt ça :)
quand tu joues , tous tes faits et gestes sont enregistrés :)
si tu bats un record , ta partie est enregistrée et ça sera la nouvelle solution proposée .
je trouve tres baleze d'avoir fait un mode automatique de resolution de nivo ?
C'est ce que j'aimerais faire , mais je n'ai vraiment pas le niveau pour m'attaquer à un truc pareil :(

Mais j'y songe , alors pour m'y préparer je vais commencer par l'ia d'un puissance 4 , ben oui ,restons modeste :)

D'où mon intérêt pour les arbres , je devrais en avoir besoin pour ça.

Publié : sam. 03/avr./2004 9:15
par Invité
puisqu'a priori les animation son stocke dans le mesh

il "suffi" de rajouter une animation "static" (qui ne bouge pas)
avec un soft de 3D (3dsmax) ect...

et avec AnimateEntity(#Entity, NomAnimation$) lui donne le numero de la fausse animation !! non ? ta essayé ça ? :)

Publié : sam. 03/avr./2004 9:37
par comtois
oui bien sûr .
Le robot a plusieurs animations , le problème c'est comment passer de l'une à l'autre ?

j'ai essayé de passer de l'animation "Walk" à l'animation "Shoot" , ben les deux se mélangent :?


autre problème , comment gérer la vitesse d'animation ?
j'ai fait des essais , et ça ne marche pas terrible , je dois sûrement mal m'y prendre , mais alors comment faire ? il n'y a pas d'exemple dans l'aide !

Je vais refaire un essai avec seulement la gestion du robot et je poste le résultat , on ne sait jamais si quelqu'un a une idée :)

Publié : sam. 03/avr./2004 10:01
par comtois
Voila quelques essais d'animation en reprenant le code "mesh.pb" que l'on trouve dans Examples/Sources

Si je ne supprime pas l'entity avant de changer l'animation , on a les deux animations en même temps :?

Si je demande plusieurs fois de suite une animation ,celle ci se fera de plus en plus vite , même si je détruis l'entity :?

Bref c'est pas la joie :(

Code : Tout sélectionner

;
; ------------------------------------------------------------
;
;   PureBasic - Mesh (Skeleton Animation)
;
;    (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;

IncludeFile "Screen3DRequester.pb"
Declare anime(Nom.s)
DefType.f KeyX, KeyY, MouseX, MouseY

#RobotMesh    = 0
#RobotTexture = 0
#Robot        = 0
  
If InitEngine3D()

  Add3DArchive("Data\"          , #PB_3DArchive_FileSystem)
  Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
  
  InitSprite()
  InitKeyboard()
  InitMouse()
  
  If Screen3DRequester()
    
    LoadMesh   (#RobotMesh   , "Robot.mesh")
    LoadTexture(#RobotTexture, "clouds.jpg")
    
    CreateMaterial(0, TextureID(#RobotTexture))
    
    CreateEntity(#Robot, MeshID(#RobotMesh), MaterialID(0))
    ;EntityMaterial(#Robot, MaterialID(0))
    
    AnimateEntity(#Robot, "Idle")
    
    DisableMaterialLighting(0, 1)
    
    MaterialAmbientColor(0, RGB(100, 100, 100))
    MaterialSpecularColor(0, RGB(255, 255, 255))
    ScrollMaterial(0, 0.15, 0, 1)
        
    CreateLight(0, RGB(0,0,255), 100.0, 0, 0)
    LightSpecularColor(0, RGB(255, 0, 0))
    
    ; SkyBox("Stevecube.jpg")
   
    CreateCamera(0, 0, 0, 100, 100)
    CameraLocate(0,0,0,100)
    ; CameraBackColor(0, RGB(0, 0, 255))

   
    Repeat
      Screen3DEvents()
      
      ClearScreen(0, 0, 0)
            
      If ExamineKeyboard()
         If KeyboardReleased(#PB_Key_F2) 
         anime("Walk")
         EndIf
         If KeyboardReleased(#PB_Key_F3) 
            anime("Shoot")
         EndIf
         If KeyboardReleased(#PB_Key_F4) 
            anime("Idle")
         EndIf
         If KeyboardReleased(#PB_Key_F5) 
            anime("Slump")
         EndIf
        If KeyboardPushed(#PB_Key_Left)
          KeyX = -1
        ElseIf KeyboardPushed(#PB_Key_Right)
          KeyX = 1
        Else
          KeyX = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Up)
          KeyY = -1
        ElseIf KeyboardPushed(#PB_Key_Down)
          KeyY = 1
        Else
          KeyY = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_PageUp)
          RollZ = 3
        Else
          RollZ = 0
        EndIf
        
        If KeyboardPushed(#PB_Key_Add)
          Frame.f+0.005
        EndIf
        
      EndIf
      
      If ExamineMouse()
        MouseX = -MouseDeltaX()/10 
        MouseY = -MouseDeltaY()/10
      EndIf
      
      RotateEntity(#Robot, 1, 0, 0)
      
      RotateCamera(0, MouseX, MouseY, RollZ)
      MoveCamera  (0, KeyX, 0, KeyY)
      
      RenderWorld()
      Screen3DStats()
      FlipBuffers()
    Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
  EndIf
    
Else
   MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf

Procedure anime(Nom.s)
   oldx.f = EntityX(#Robot)
   oldy.f = EntityY(#Robot)
   oldz.f = EntityZ(#Robot)
   FreeEntity(#Robot)
   CreateEntity(#Robot, MeshID(#RobotMesh), MaterialID(0))
   EntityLocate(#Robot,oldx,oldy,oldz)
   AnimateEntity(#Robot, Nom)
EndProcedure
  
End

Publié : sam. 03/avr./2004 14:09
par Invité
ton prog marche pas chez moi a cause de
LoadTexture(#RobotTexture, "clouds.jpg")


je doit pas avoir tous les fichiers demandé !! :(


Bon je recupere tous les source chez toi !

Publié : sam. 03/avr./2004 14:53
par comtois
bizarre ,la texture cloud.jpg se trouve dans le répertoire Examples/Sources/data normalement .

Mais tu peux remplacer cloud.jpg par une texture de ton choix ça n'a pas d'importance, c'est pour les animations .

tu peux même remplacer

Code : Tout sélectionner

LoadTexture(#RobotTexture, "clouds.jpg")
par

Code : Tout sélectionner

   CreateTexture(#RobotTexture,128,128)
   StartDrawing(TextureOutput(#RobotTexture))
   Box(0,0,128,128,RGB(200,200,50))
   StopDrawing()
PS : pour que le code fonctionne il doit être enregistré dans le répertoire sources ou alors il faut l'adapter un peu .

Publié : sam. 03/avr./2004 15:07
par Invité
bon j'ai pas reussi a faire marcher ton truc mais c'est pas grave
j'ai trouvé une soluce toute con !! :D


AnimateEntity(0, "") ; elle s'arrete de marcher
si tu envoie ça a ton entity , ben elle s'arrete de marcher !! etonant non ? :D

AnimateEntity(0, "Walk"); elle marche !!


:D

attention ecrire Walk et pas walk (sinon plantage !!)
a priori la majuscule au debut de Walk est importante !!

je te suggere d 'arreter l'animation en cours avec mon system
puis de demander une autre annimation , en principe ça doit rouler !! :D :D

Publié : sam. 03/avr./2004 15:40
par comtois
AnimateEntity(0, "") ; elle s'arrete de marcher
Ben j'avais déjà fait ce test ,et chez moi ça plantait :(

ça marche vraiment chez toi ? comment est-ce possible ?

Si on ne respecte pas la casse ( walk à la place de Walk) , le prog plante ,je l'avais aussi constaté à mes dépens , ça marche bien chez tout le monde ça :lol:


Je vais attendre la mise à jour de la 3D dans purebasic avant de poursuivre , en espérant que ces points soient améliorés !
en attendant je vais bosser l'IA des jeux , et le réseau .

Publié : sam. 03/avr./2004 15:55
par Invité
ben oui ça marche !!

mais peut etre que tu avais essaye avec la 3.80 ? !!

enfin sur xp ça marche !
;
; ------------------------------------------------------------
;
; PureBasic - Entity
;
; (c) 2002 - Fantaisie Software
;
; ------------------------------------------------------------
;

IncludeFile "Screen3DRequester.pb"

DefType.f KeyX, KeyY, MouseX, MouseY


If InitEngine3D()

Add3DArchive("Data\" , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)

InitSprite()
InitKeyboard()
InitMouse()

If Screen3DRequester()

LoadMesh (0, "Robot.mesh")

CreateMaterial(0, LoadTexture(0, "clouds.jpg"))
CreateMaterial(1, LoadTexture(1, "r2skin.jpg"))

CreateEntity(0, MeshID(0), MaterialID(0))
CreateEntity(1, MeshID(0), MaterialID(1), -60, 0, 0)
CreateEntity(2, MeshID(0), MaterialID(1), 60, 0, 0)

AnimateEntity(0, "Walk")
; AnimateEntity(0, "") :; ******** ici ********
SkyBox("Stevecube.jpg")

CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,0,0,100)

Repeat
Screen3DEvents()

ClearScreen(0, 0, 0)

If ExamineKeyboard()

If KeyboardPushed(#PB_Key_Left)
KeyX = -1
ElseIf KeyboardPushed(#PB_Key_Right)
KeyX = 1
Else
KeyX = 0
EndIf

If KeyboardPushed(#PB_Key_Up)
KeyY = -1
ElseIf KeyboardPushed(#PB_Key_Down)
KeyY = 1
Else
KeyY = 0
EndIf

If KeyboardPushed(#PB_Key_PageUp)
RollZ = 3
Else
RollZ = 0
EndIf

If KeyboardPushed(#PB_Key_Add)
Frame.f+0.005
EndIf

EndIf

If ExamineMouse()
MouseX = -MouseDeltaX()/10
MouseY = -MouseDeltaY()/10
EndIf

RotateEntity(1, 1, 0, 0)
RotateEntity(2, 1, 0, 0)

RotateCamera(0, MouseX, MouseY, RollZ)
MoveCamera (0, KeyX, 0, KeyY)

RenderWorld()
Screen3DStats()
FlipBuffers()
Until KeyboardPushed(#PB_Key_Escape) Or Quit = 1
EndIf

Else
MessageRequester("Error", "The 3D Engine can't be initialized",0)
EndIf

End

Publié : dim. 04/avr./2004 14:51
par comtois
chez moi ça plante ,j'ai XP familial , je teste avec la version 3.81 et la dernière dll , celle fournie avec la 3.89

mais ça plantait avec l'ancienne dll si mes souvenirs sont bons .

bref , attendons la mise à jour de la 3D . J'ai assez fait d'essais pour l'instant .

Publié : dim. 04/avr./2004 15:24
par Chris
J'ai fait ça pour tester, et ça fonctionne pour les deux versions de la dll sous XP Home. (Bon, c'est pas génial, et c'est en partie pompé sur l'exemple fourni dans PureBasic, mais je ne sais pas faire mieux :oops: )

Par contre, j'ai aussi le problème de l'anim qui accélère à chaque appui sur la touche.

Code : Tout sélectionner

#Window = 0
#Width = 600
#Height = 600
#Timer = 0

#RobotMesh    = 0
#RobotTexture = 0
#Robot        = 0

Procedure Entity(Anim$)
  CreateEntity(#Robot, MeshID(#RobotMesh), MaterialID(0))
  EntityMaterial(#Robot, MaterialID(0))
  AnimateEntity(#Robot, Anim$)
EndProcedure

DefType.f KeyX, KeyY, MouseX, MouseY
  
  ;- Initialisation de DirectX
If InitEngine3D() = 0
  MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
  CloseWindow(#Window) : End
EndIf
  
If InitSprite() = 0 Or InitKeyboard() = 0 Or InitMouse() = 0
  MessageRequester("Erreur", "Impossible d'initialiser DirectX", 0)
  CloseWindow(#Window) : End
EndIf
  
  ;- Ouverture de la fenêtre et de l'écran
hWnd = OpenWindow(#Window, 0, 0, #Width, #Height, #PB_Window_TitleBar | #PB_Window_ScreenCentered, "")
OpenWindowedScreen(hWnd, 0, 0, 600, 600, 0, 0, 0)
  ;-******************************************************************************************
  
Add3DArchive("Data\"          , #PB_3DArchive_FileSystem)
Add3DArchive("Data\Skybox.zip", #PB_3DArchive_Zip)
  
LoadMesh   (#RobotMesh   , "Robot.mesh")
LoadTexture(#RobotTexture, "r2skin.jpg")
  
CreateMaterial(0, TextureID(#RobotTexture))
  
Entity("")

DisableMaterialLighting(0, 1)
  
MaterialAmbientColor(0, RGB(100, 100, 100))
  
CreateLight(0, RGB(0,0,255), 100.0, 0, 0)
LightSpecularColor(0, RGB(255, 0, 0))
  
CreateCamera(0, 0, 0, 100, 100)
CameraLocate(0,0,40,150)
  
  ;-***************************************************************************************
  ;- Début de la boucle

a = -1

Repeat
  
  ClearScreen(0, 0, 0) : ExamineKeyboard()
  If ExamineKeyboard()
    
    If KeyboardPushed(#PB_Key_Left)
      If a = -1; <--  Ce test permet de ne récupérer que la première boucle 
        ;             quand on laisse le bouton appuyé
        a = 1 : Entity("Walk") : RotateEntity(#Robot,180,0,0) :  a = 0
      EndIf
      ; Suite du code pour cette touche
      ;
    EndIf
    
    If KeyboardPushed(#PB_Key_Right)
      If a = -1; <--  Ce test permet de ne récupérer que la première boucle 
        ;             quand on laisse le bouton appuyé
        a = 1 : : Entity("Walk") : RotateEntity(#Robot,0,0,0) : a = 0
      EndIf
      ; Suite du code pour cette touche
      ;
    EndIf
    
    If KeyboardPushed(#PB_Key_Up)
      If a = -1; <--  Ce test permet de ne récupérer que la première boucle 
        ;             quand on laisse le bouton appuyé
        a = 1 : Entity("Walk") : RotateEntity(#Robot,90,0,0) : a = 0
      EndIf
      ; Suite du code pour cette touche
      ;
    EndIf
    
    If KeyboardPushed(#PB_Key_Down)
      If a = -1; <--  Ce test permet de ne récupérer que la première boucle 
        ;             quand on laisse le bouton appuyé
        a = 1 :  Entity("Walk") : RotateEntity(#Robot,270,0,0) : a = 0
      EndIf
      ; Suite du code pour cette touche
      ;
    EndIf
    
    If KeyboardReleased(#PB_Key_Left) Or KeyboardReleased(#PB_Key_Right) Or KeyboardReleased(#PB_Key_Up) Or KeyboardReleased(#PB_Key_Down)
      If a = 0
        a = -1 : Entity("") 
      EndIf
    EndIf
    
    If KeyboardPushed(#PB_Key_Escape)
      Quit = 1
    EndIf
    
    RenderWorld()
    
    Select WindowEvent(); Si je ne mets pas ce select, la souris a la forme d'un sablier
      ;                   et a l''air d'attendre quelque chose. Bizarre, ce truc !
    EndSelect
  EndIf
  
  FlipBuffers()
  
  
Until Quit = 1
End  
Chris :)