Sokoban3D en commun
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
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

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

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

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)



super! continu je suis fan !!
tu es un des trop rare ici a creer des jeux je trouve !

je ne sais pas comment on arrête une animationdit moi t'a pas trouvé le moyen d'arreter l'anime du personnage

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 .
avec moins de possibilités et beaucoup plus lent(ça aurai ete surement plus facile en Dark non ?)

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.qu'utilise tu pour dessiner le decors ?
C'est plutôt çaou bien est-ce une lecture de data preconfiguré ?

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 .
C'est ce que j'aimerais faire , mais je n'ai vraiment pas le niveau pour m'attaquer à un truc pareilje trouve tres baleze d'avoir fait un mode automatique de resolution de nivo ?

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

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
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
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
par
PS : pour que le code fonctionne il doit être enregistré dans le répertoire sources ou alors il faut l'adapter un peu .
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")
Code : Tout sélectionner
CreateTexture(#RobotTexture,128,128)
StartDrawing(TextureOutput(#RobotTexture))
Box(0,0,128,128,RGB(200,200,50))
StopDrawing()
bon j'ai pas reussi a faire marcher ton truc mais c'est pas grave
j'ai trouvé une soluce toute con !!
AnimateEntity(0, "") ; elle s'arrete de marcher
si tu envoie ça a ton entity , ben elle s'arrete de marcher !! etonant non ?
AnimateEntity(0, "Walk"); elle marche !!

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

j'ai trouvé une soluce toute con !!

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

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

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


Ben j'avais déjà fait ce test ,et chez moi ça plantaitAnimateEntity(0, "") ; elle s'arrete de marcher

ç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

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 .
ben oui ça marche !!
mais peut etre que tu avais essaye avec la 3.80 ? !!
enfin sur xp ç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
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
)
Par contre, j'ai aussi le problème de l'anim qui accélère à chaque appui sur la touche.
Chris 

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
