Sokoban3D en commun

Généralités sur la programmation 3D
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

;/une barre
;pourquoi on ne la voit Pas ?
Parsqu'elle est cachée par l'écran. Si on fait un écran un peu moins haut, comme ça:

Code : Tout sélectionner

ElseIf OpenWindowedScreen( WindowID(0), 0, 0, ScreenWidth , ScreenHeight-20 , 0, 0, 0 ) = 0 
Et ben là, on voit, heu... un truc :?
Ca doit pas être ce que tu voulait faire :roll:

Le menu en haut, ça m'a l'air d'une bonne idée.
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
CORBASE
Messages : 96
Inscription : mar. 24/févr./2004 14:06

Message par CORBASE »

Vu que ce projet me plait bien et que j'apprend de jour en jour, j'aimerais savoir ce qu'il faut faire exactement dans ce projet. (lol) Ou m'expliquer à quoi doit ressembler le projet final !

Merci d'avance :oops:
CORBASE
Messages : 96
Inscription : mar. 24/févr./2004 14:06

Message par CORBASE »

J'allé oublié ...

Merci pour celui qui m'a expliqué les datas orienté jeux, il était pas loggué !

Enfin, en tout as merci bcp !
CORBASE
Messages : 96
Inscription : mar. 24/févr./2004 14:06

Message par CORBASE »

Alors, en essayant de comprendre comment fonctionnait les Datas, j'ai créé une petite procédure pour empecher le Mesh 3D de sortir du Plain.

Voila la procédure, Si il y a moyen de l'améliorer n'hésiter pas !

Code : Tout sélectionner

Procedure PlainCollision( Entity.f,X.f,Z.f )
; Alors, explication, Entity est l'ID de l'entity à tester pour la collision ( ici le plain )
;X represente la longueur X du ScaleEntity()
;Z represente la longueur Z du ScaleEntity()
	 If EntityX(Entity) > X
	 		MoveEntity( Entity , (Cosd( entity(0)\AngleX ) * Pas)-2 , 0, -Sind( entity(0)\AngleX ) * Pas )
	 ElseIf EntityX(Entity) < 0
	 		MoveEntity( Entity , (Cosd( entity(0)\AngleX ) * Pas)+2, 0, -Sind( entity(0)\AngleX ) * Pas )
	 ElseIf EntityZ(Entity) > Z
	 		MoveEntity( Entity , (Cosd( entity(0)\AngleX ) * Pas), 0, (-Sind( entity(0)\AngleX ) * Pas)-2 )
	 ElseIf EntityZ(Entity) < 0
	 		MoveEntity( Entity , (Cosd( entity(0)\AngleX ) * Pas) , 0, (-Sind( entity(0)\AngleX ) * Pas)+2 )
	 Else
		  MoveEntity( Entity , (Cosd( entity(0)\AngleX ) * Pas) , 0, -Sind( entity(0)\AngleX ) * Pas )
	 EndIf
EndProcedure
Bon, on critique pas c'est mes débuts !
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Je trouve pas où et comment il faut l'appeler :oops:
Sinon, comme le paramètre Entity est un ID, ça devrai pas plutôt être un long?
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
CORBASE
Messages : 96
Inscription : mar. 24/févr./2004 14:06

Message par CORBASE »

Bon, j'ai du mal m'exprimer alors !

En tout cas, pour l'Entity, c'est bien l'ID et chez moi avec un float sa marche, mais il serais plus "Propre" de mettre long Je te l'accorde !

Alors la procédure, personnellement je l'ai mise dans le fichier SokoBan3DSimple.pb à la suite des procédures AffAide() et GestionCamera().

Ensuite, je l'appelle dans la boucle Repeat de la fin du fichier, à bouge perso. En fait on remplace :

Code : Tout sélectionner

 MoveEntity( Entity , (Cosd( entity(0)\AngleX ) * Pas) , 0, -Sind( entity(0)\AngleX ) * Pas )
Par :

Code : Tout sélectionner

PlainCollision()
Enfin, si il y a des petites erreurs, merci de me le dire :P

Pour l'instant sa marche très bien chez moi !
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

c'est bien l'ID et chez moi avec un float sa marche
Mais ça marchera pas forcément à tout les coups, il faut se méfier de la précision limitée des flottants:

Code : Tout sélectionner

entier.l=$77ff3fff
flottant.f=entier
entier=flottant
Debug Hex(entier)
Sinon, tu mets quoi comme paramètres? Chuis perdu :roll:
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

CORBASE a écrit :Vu que ce projet me plait bien et que j'apprend de jour en jour, j'aimerais savoir ce qu'il faut faire exactement dans ce projet. (lol) Ou m'expliquer à quoi doit ressembler le projet final !

Merci d'avance :oops:
va voir sur mon site et télécharge PureSokoban3D V0.5

ça te donnera une idée du projet final (c'était pas fini d'ailleurs ) :)

En fait , comme je le disais en introduction , j'aimerais reprendre le code à zéro , car il commençait à devenir brouillon :)
Et je me suis dis que c'était l'occasion d"essayer de faire un truc en commun .Pour avoir déjà essayé , je sais que ce n'est pas simple , mais au moins on aura tenté le coup ici aussi :)

Donc , voila , si quelqu'un a une idée , et que la majorité des participants à ce post est d'accord ,on l'incorpore dans le code . Par exemple filperj a proposé le mode fenêtre plein écran , ben voila ,c'est adopté ,il n'y a pas eu d'objection :)

enfin si la DLL n'est pas d'accord ,elle plante quand on quitte :!: , donc , si ça plante aussi avec la DLL standard , faudra sans doute changer de mode , dommage ,j'aimais bien celui là .

alors c'est vrai qu'on ne part pas d'un projet ou tout est à faire ,et qu'il faut se partager les tâches , ça se fera peut-être en cours ? selon l'intérêt que chacun y porte .

en fait , il faudrait définir exactement le résultat escompté . Pour cela on peut s'inspirer du code existant et dire ce qui ne va pas ,ce qui manque , ce qui peut être conservé .

en attendant , je vais montrer comment je m'y suis pris , pour susciter quelques critiques et propositions qui permettront d'améliorer le code.

D'échanger ainsi les idées , ça peut profiter à tout le monde .

Sinon pour empêcher le perso de sortir du jeu , c'est pour bientôt :)
Je vais préparer ça dès que j'ai du temps .

Dans un premier temps , je vais mettre le code pour changer le déplacement du perso , qu'il se fasse comme dans le programme présent sur mon site.
puis je montrerai comment faire le premier niveau , on aura une base de discussion , pour savoir quelle suite donner au code .

on prend toutes les idées au vol :)
Invité

Message par Invité »

filperj, j'ai encore modif ma procédure vala la version la plus recente :

Code : Tout sélectionner

Procedure PlainCollision( Entity.l,X.f,Z.f )
; Alors, explication, Entity est l'ID de l'entity à tester pour la collision ( ici le plain )
;X represente la longueur X du ScaleEntity()
;Z represente la longueur Z du ScaleEntity()
	 If EntityX(Entity) > X
	 		MoveEntity( Entity , (Cosd( entity(Entity)\AngleX ) * Pas)-2 , 0, -Sind( entity(Entity)\AngleX ) * Pas )
	 ElseIf EntityX(Entity) < 0
	 		MoveEntity( Entity , (Cosd( entity(Entity)\AngleX ) * Pas)+2, 0, -Sind( entity(Entity)\AngleX ) * Pas )
	 ElseIf EntityZ(Entity) > Z
	 		MoveEntity( Entity , (Cosd( entity(Entity)\AngleX ) * Pas), 0, (-Sind( entity(Entity)\AngleX ) * Pas)-2 )
	 ElseIf EntityZ(Entity) < 0
	 		MoveEntity( Entity , (Cosd( entity(Entity)\AngleX ) * Pas) , 0, (-Sind( entity(Entity)\AngleX ) * Pas)+2 )
	 Else
		  MoveEntity( Entity , (Cosd( entity(Entity)\AngleX ) * Pas) , 0, -Sind( entity(Entity)\AngleX ) * Pas )
	 EndIf
EndProcedure
Les parametres à mettre pous utilisé ma procédure son :

- Entity : Tu met l'ID du plain pour l'exemple que nous a donner Comtois, soit 0
- X représente la valeur du redimensionnement du Mesh Plain en X, ici le redimensionnement est de 1000
- Z représente la valeur du redimensionnement du Mesh Plain en Z, ici c'est aussi 1000

Donc pour te servir de ma procédure, la ou Comtois à mis le

Code : Tout sélectionner

   ;Bouge le Perso
Tu efface le MoveEntity(....) qu'il y avait, et tu met :

Code : Tout sélectionner

      PlainCollision(0,1000,1000)
Normalement, le perso ( le cube ) Ne sort plus du plain :P

Je suis content sa marche :p

Et Comtois, j'avais pas compris que un version du jeu étais dispo ...lol

Je DL tout sa, et je regarde demain soir, car j'ai cours :P
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

filperj a écrit :

Code : Tout sélectionner

ElseIf OpenWindowedScreen( WindowID(0), 0, 0, ScreenWidth , ScreenHeight-20 , 0, 0, 0 ) = 0 
Et ben là, on voit, heu... un truc :?
Ca doit pas être ce que tu voulait faire :roll:
Merci ça marche :)

Ben ce que je voulais c'était afficher la barre proposée dans l'aide , ensuite on verra ce qu'on y mettra , ça pourrait être le niveau en cours, le nombre de coups en cours , le meilleur score pour le niveau en cours , le nombre de caisses rangées etc ...

donc ça marche ,c'est parfait , reste à voir ce qu'on va en faire ,si on conserve cette barre ou non .
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

vu sur le forum anglais

http://fuzzyphoton.tripod.com/rtref/rtr ... oordinates

j'ai du mal à traduire ,je vais y jeter un oeil plus tard .

il semble que j'ai dit des bêtises mais j'ai prévenu , j'ai décris ce que j'avais cru comprendre :)
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

@CORBASE
OK ça marche. Sauf que j'arrive quand même à le faire sortir en passant par un coin (faut-y pas avoir du vice).
Ca doit être simplement l'ordre des tests qu'il faut changer. Je vais tâtonner un peu de mon côté.

@Comtois
Faut pas donner des liens comme ça, tu vas nous faire croire que la 3D c'est compliqué :lol:
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
CORBASE
Messages : 96
Inscription : mar. 24/févr./2004 14:06

Message par CORBASE »

Pour le mode fenetré plein ecran, Il y aurais moyen d'avoir le code exact, meme si sa plante quand on quitte, j'aqimerais bien testé 2 trois truc desus avant :p

Filperj ok merci pour cee bug, je vais essayé d'y remedié!

A ce soir, now it's time to school: (PS : c'est 7h13 lool)
comtois
Messages : 5186
Inscription : mer. 21/janv./2004 17:48
Contact :

Message par comtois »

Ben il est dans le kit demarrage . c'est ce mode là qui plante( sous Win98 , chez moi en XP ça fonctionne ).

En mode plein écran apparemment ça ne plante pas .

On ne sait toujours pas si c'est avec la DLL bêta de danilo , ou la DLL standard ( modifié le : lundi 1 septembre 2003, 23:41:04) que ça plante ,tu pourrais préciser Denis ?

Je viens de télécharger le Sokoban3D5 sur mon site pour le tester à nouveau ( je ne savais plus trop où j'en étais resté :) ), et curieusement , je ne vois pas l'affichage 3D ! bizarre ,quand je mets un truc sur mon site ,c'est qu'en principe j'arrive à voir quelque chose !
Je ne comprends pas ce qui se passe là ! je n'ai pas changé de config matériel et quand je supprime dans le source l'affichage des sprites 3D , l'affichage de la 3D se fait correctement !

CORBASE tu pourras me dire si tu as un problème d'affichage toi aussi ?

Bon pas grave puisqu'on reprend tout à zéro , les sprites 3D y'en aura peut-être plus besoin .
filperj
Messages : 395
Inscription : jeu. 22/janv./2004 1:13

Message par filperj »

Quand on appuie sur F4 pour afficher l'aide, on s'apperçoit que la barre de menu cache le haut de l'écran.
Pur corriger ça, on peut déplacer l'openwindowedscreen après la création du menu et de la statusbar, et modifier ses paramètres comme ça:

Code : Tout sélectionner


statusbarheight=16
If OpenWindowedScreen( WindowID(0), 0, MenuHeight(), ScreenWidth , ScreenHeight-MenuHeight()-statusbarheight , 0, 0, 0 ) = 0 
    MessageRequester( "Erreur" , "Impossible d'ouvrir l'écran " , 0 ) 
    End
EndIf
SetFrameRate(60)

Mais il reste un problème à régler:

Code : Tout sélectionner

statusbarheight=16
D'où je sais que la statusbar fait 16 pixels de haut? J'ai mis ça au pif. Il y a forcément une meilleure méthode.
Le chaos l'emporte toujours sur l'ordre
parcequ'il est mieux organisé.
(Ly Tin Wheedle)
Répondre