ben justement voila le truc qui coince : je dispose ici d'une porte des etoiles toutes neuves que j'ai déballée tout sourire de sa boite en carton,après avoir soudoyé le vendeur de ne pas me vendre l'e2pz qui va avec.... euh non je me gourre de texte là....
je dispose donc d'une Porte,d'un DHD(le clavier pour ceux qui savent pas ),et de l'environnement qui va avec.... donc je désire créer une planète sans DHD...
et qu'on fasse fonctionner la Porte sans DHD,en faisant tourner l'anneau... donc j'ai imaginé un script :
une fois qu'on a poussé le levier de démarage,l'anneau commence à tourner,et en permanence.... or sur le coté on dispose de 39 touches(petites sinon ca cera galère...) qui dira au script de l'anneau à quelle valeur s'arrêter,et ce chronométré pil poil,: imaginons que l'on veut composer une adresse de porte qui comportera le symbole 12,on appuie donc sur la touche 12.... donc une variable A vaut 12...or une variable B indique le numéro du symbole qui passe sous le 7e chevron en temps réel pendant qu'il tourne....
mais dès que A sera égale a B,il faut faire stopper l'anneau,incrémenter de 1 le nombre de chevrons en cours, et incrémenter la variable qui indique la destination ,de la valeur de A(car en fait les valeurs des 7 chevrons choisis sont ajoutés dans cet ordre... ex: 12+24+1+3+9+4+100(origine) )
et c'est cà qui me coince... comment faire tourner l'anneau en pile syncrhonisation avec la variable qui indique en temps réel le numéro du symbole sous le 7e chevron???
a la base,c'est le numéro 0(le symbole d'origine) qui est sous le 7e chevron donc créer une variable a 0 sera pas un problème.... et il y a donc,en partant de 0,38 symboles différents... alors
EN GROS:
EXEMPLE:dès que le symbole 4(le symbole voulu) passe sous le 7e chevron, et dès qu'une variable globale qui incrémente au fer et a mesure de la rotation de l'anneau vaut 4 aussi,ALORS faire stopper l'anneau,jouer un zouli son d'enclenchement et allumer un chevron en plus(conformément a la série),et faire repartir l'anneau... une fois ce moment arrivé,le PJ doit appuyer sur une nouvelle touche afin de "dire" au script a quel symbole s'arreter et enclencher...
voila j'espere avoir été assez clair????? (les modérateurs peuvent me pendre.... )
0
Porte Des Etoiles Qui "tourne"
Débuté par
gray wolf
, 10 oct. 2005 - 19:18
5 réponses à ce sujet
#1
Posté 10 octobre 2005 - 19:18
*a décidé de ne plus mettre de signature pointant vers Rochmédia.*
#2
Posté 11 octobre 2005 - 17:00
elle ressemble à quoi ta porte?
#3
Posté 11 octobre 2005 - 18:20
physiquement ou techniquement?????
physiquement,c'est la même que celle du mod stargate Nueronuh....
techniquement,elle fonctionne de cette manière là: on va se mettre devant le DHD,on enclenche les 6 symboles voulus,et le 7e propre a la planète....
en fait,la variable qui indique la destination est incrémentée du numéro de la touche sur laquelle on appuie...
ca fait donc (exemple) 2-4-6-38-36-34-100(l'origine est toujours à 100)
mais comment,et surtout: COMMENNT se sert on des rotate ou rotateworld??? peut on faire pivoter l'anneau et en même temps incrémenter une variable qui doit être en parfaite synchronisation avec le numéro du symbole qui passe sous le 7e chevron?????
il faut tatonner?
PS: ma Porte est celle du mod SG-Nueronuh,alors pas de blague! c'est juste un mod perso après tout...
http://img444.imageshack.us/img444/3946/gate18xa.jpg
voila le principe de la variable et de l'anneau(vive Dialsimulator!!!)
et la porte,physiquement,est la même que sur mon avatar...
physiquement,c'est la même que celle du mod stargate Nueronuh....
techniquement,elle fonctionne de cette manière là: on va se mettre devant le DHD,on enclenche les 6 symboles voulus,et le 7e propre a la planète....
en fait,la variable qui indique la destination est incrémentée du numéro de la touche sur laquelle on appuie...
ca fait donc (exemple) 2-4-6-38-36-34-100(l'origine est toujours à 100)
mais comment,et surtout: COMMENNT se sert on des rotate ou rotateworld??? peut on faire pivoter l'anneau et en même temps incrémenter une variable qui doit être en parfaite synchronisation avec le numéro du symbole qui passe sous le 7e chevron?????
il faut tatonner?
PS: ma Porte est celle du mod SG-Nueronuh,alors pas de blague! c'est juste un mod perso après tout...
http://img444.imageshack.us/img444/3946/gate18xa.jpg
voila le principe de la variable et de l'anneau(vive Dialsimulator!!!)
et la porte,physiquement,est la même que sur mon avatar...
*a décidé de ne plus mettre de signature pointant vers Rochmédia.*
#4
Posté 11 octobre 2005 - 19:22
Si j'ai bien compris, c'est uniquement un problème d'angle...
Il y a 38 symboles : l'angle entre chaque symbole vaut donc 360°/38 symboles = à peu près 9.5° entre deux symboles.
Mettons que le septième chevron soit à l'angle 225°.
Tu incrémenteras ton compteur de tour à chaque fois que le symbole 4 passera au delà de 225°, c'est à dire à chaque fois que "Angle de la roue - 4*9,5" deviendra supérieur à 225.
Un exemple d'algorithme : ici, j'utilise un script global qui sera appelé quand le joueur appuie sur un symbole. De plus, une variable globale de type short nommée "symbole" doit être mise à la valeur du symbole dès que le joueur appuie dessus (avant l'appel du script).
Pour le script faisant tourner ta roue, Rotate me semble en effet tout indiqué ! Cf par ici pour voir sa syntaxe.
Il y a 38 symboles : l'angle entre chaque symbole vaut donc 360°/38 symboles = à peu près 9.5° entre deux symboles.
Mettons que le septième chevron soit à l'angle 225°.
Tu incrémenteras ton compteur de tour à chaque fois que le symbole 4 passera au delà de 225°, c'est à dire à chaque fois que "Angle de la roue - 4*9,5" deviendra supérieur à 225.
Un exemple d'algorithme : ici, j'utilise un script global qui sera appelé quand le joueur appuie sur un symbole. De plus, une variable globale de type short nommée "symbole" doit être mise à la valeur du symbole dès que le joueur appuie dessus (avant l'appel du script).
Citation
Begin TestArretRoue
short tours
float Angle
short test
short init
Set Angle to GetAngle "ID de la roue" "axe de rotation"
Set Angle to ( Angle - symbole*9.5 )
if ( Angle < 0 ) ; On peut avoir un angle négatif avec le " - symbole*9.5" : on utilise la périodicité du cercle (0° = 360°) pour passer outre
Set Angle to ( Angle + 360 )
endif
if ( init != 0 )
if ( Angle > 225 ) ; Au moment ou l'angle dépasse 225°, on incrémente le nombre de tours
if ( test == 0 )
Set test to 1
Set tours to ( tours + 1 )
endif
else
Set test to 0
endif
else ; Si init vaut 0, on ne tient pas compte de la première fin de tour
if ( Angle < 225 )
Set init to 0
endif
endif
if ( tours >= 4 )
Set ArretTours to 1 ; ArretTours est une variable globale de type short qui fait arrêter la rotation de la roue
StopScript TestArretRoue
endif
End
short tours
float Angle
short test
short init
Set Angle to GetAngle "ID de la roue" "axe de rotation"
Set Angle to ( Angle - symbole*9.5 )
if ( Angle < 0 ) ; On peut avoir un angle négatif avec le " - symbole*9.5" : on utilise la périodicité du cercle (0° = 360°) pour passer outre
Set Angle to ( Angle + 360 )
endif
if ( init != 0 )
if ( Angle > 225 ) ; Au moment ou l'angle dépasse 225°, on incrémente le nombre de tours
if ( test == 0 )
Set test to 1
Set tours to ( tours + 1 )
endif
else
Set test to 0
endif
else ; Si init vaut 0, on ne tient pas compte de la première fin de tour
if ( Angle < 225 )
Set init to 0
endif
endif
if ( tours >= 4 )
Set ArretTours to 1 ; ArretTours est une variable globale de type short qui fait arrêter la rotation de la roue
StopScript TestArretRoue
endif
End
Pour le script faisant tourner ta roue, Rotate me semble en effet tout indiqué ! Cf par ici pour voir sa syntaxe.
Nenfëa
- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!
Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!
Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !
- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!
Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!
Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !
#5
Posté 11 octobre 2005 - 21:32
bon j'ai A PEU PRES compris ce script a force de le re-lire.... et le septième chevron est à 0°... tout en haut... a vrai dire c'est toujours celui la qui "aligne" le symbole à charger.
mais je ne comprends toujours pas...entièrement.
mais néamoins, je pense que il faut faire pivoter l'anneau de 1 symbole(9.5) par seconde... mais Angle relève en fait l'angle en cours de l'anneau,et si le test : Angle=9.5Xsymbole a charger(4),alors dire GW_NSG_catourne(variable globale qui indique si l'anneau doit tourner) VAUT 0
donc à 0,l'anneau ne peut plus tourner,et de même,dire: GW_NSG_global_numchevrons = GW_NSG_global_numchevrons+1(on a chargé un nouveau chevron non?)...
et ajouter a gw_nsg_destination_code la valeur du symbole chargé....
mais comment synthéthiser çà...?
mais je ne comprends toujours pas...entièrement.
mais néamoins, je pense que il faut faire pivoter l'anneau de 1 symbole(9.5) par seconde... mais Angle relève en fait l'angle en cours de l'anneau,et si le test : Angle=9.5Xsymbole a charger(4),alors dire GW_NSG_catourne(variable globale qui indique si l'anneau doit tourner) VAUT 0
donc à 0,l'anneau ne peut plus tourner,et de même,dire: GW_NSG_global_numchevrons = GW_NSG_global_numchevrons+1(on a chargé un nouveau chevron non?)...
et ajouter a gw_nsg_destination_code la valeur du symbole chargé....
mais comment synthéthiser çà...?
*a décidé de ne plus mettre de signature pointant vers Rochmédia.*
#6
Posté 13 octobre 2005 - 13:30
En fait, la vitesse de rotation de la roue est sans importance : seule sa position l'est... En effet, on n'a besoin que détecter sa position pour savoir si elle est au niveau du septième chevron ou non, il suffit ensuite de faire suivre l'affichage !
Je réannote un peu plus mon script en espérant que ce sera plus clair , et je l'adapte à un septième chevron à 0° !
Quelques pitites explications sur Angle et Angle2 : comme la roue ne cesse de tourner, son angle devrait continuellement augmenter, donc on devrait toujours avoir l'angle actuel (variable "Angle") supérieur à l'angle précédent (variable "Angle2"). MAIS, quand Angle passe 360°, il est remis à environ 0° (exactement à sa valeur moins 360°). A cette frame (et à cette frame seulement !), on aura donc Angle légèrement supérieur à 0° et Angle2 légèrement inférieur à 360° : on a bien Angle < Angle2 qui signale le changement de tour...
Voili voilà, si ça reste obscur, n'hésite pas !
Je réannote un peu plus mon script en espérant que ce sera plus clair , et je l'adapte à un septième chevron à 0° !
Citation
Begin TestArretRoue
short tours ; tours sert à compter le nombre de tours qu'a fait la roue
float Angle ; Angle sert à connaitre l'angle de la roue
float Angle2 ; Angle2 est l'angle de la roue à l'execution précédente
short init ; init sert pour le premier tour seulement
Set Angle2 to Angle ; On met Angle2 à la valeur de Angle à l'execution précédente
Set Angle to GetAngle "ID de la roue" "axe de rotation" ; On met "Angle" à la valeur de l'angle de la roue
Set Angle to ( Angle - symbole*9.5 ) ; On y retire 9,5 fois symbole pour corriger (pour avoir directement l'angle auquel la roue doit s'arrêter)
if ( Angle < 0 ) ; On peut avoir un angle négatif avec le " - symbole*9.5" : on utilise la périodicité du cercle (0° = 360°) pour passer outre
Set Angle to ( Angle + 360 )
endif
if ( init != 0 ) ; Si on n'en est pas au premier tour...
if ( Angle < Angle2 ) ; ...et que l'angle passe sous l'angle à l'execution précédente (donc qu'on change de tour)...
Set tours to ( tours + 1 ) ; ...et on incrémente le nombre de tours
endif
else ; Si init vaut 0, on ne tient pas compte de la première execution du script (pour que "Angle" soit initialisé), mais on met init à jour pour qu'à la prochaine execution, le test de passage de tour ait lieu.
Set init to 1
endif
if ( tours >= symbole ) ; Dès qu'on a atteint le nombre "symbole" de tours...
Set ArretTours to 1 ; ...on met à jour ArretTours, qui est une variable globale de type short qui faisant arrêter la rotation de la roue
StopScript TestArretRoue ; ...et on arrête le script.
endif
End
short tours ; tours sert à compter le nombre de tours qu'a fait la roue
float Angle ; Angle sert à connaitre l'angle de la roue
float Angle2 ; Angle2 est l'angle de la roue à l'execution précédente
short init ; init sert pour le premier tour seulement
Set Angle2 to Angle ; On met Angle2 à la valeur de Angle à l'execution précédente
Set Angle to GetAngle "ID de la roue" "axe de rotation" ; On met "Angle" à la valeur de l'angle de la roue
Set Angle to ( Angle - symbole*9.5 ) ; On y retire 9,5 fois symbole pour corriger (pour avoir directement l'angle auquel la roue doit s'arrêter)
if ( Angle < 0 ) ; On peut avoir un angle négatif avec le " - symbole*9.5" : on utilise la périodicité du cercle (0° = 360°) pour passer outre
Set Angle to ( Angle + 360 )
endif
if ( init != 0 ) ; Si on n'en est pas au premier tour...
if ( Angle < Angle2 ) ; ...et que l'angle passe sous l'angle à l'execution précédente (donc qu'on change de tour)...
Set tours to ( tours + 1 ) ; ...et on incrémente le nombre de tours
endif
else ; Si init vaut 0, on ne tient pas compte de la première execution du script (pour que "Angle" soit initialisé), mais on met init à jour pour qu'à la prochaine execution, le test de passage de tour ait lieu.
Set init to 1
endif
if ( tours >= symbole ) ; Dès qu'on a atteint le nombre "symbole" de tours...
Set ArretTours to 1 ; ...on met à jour ArretTours, qui est une variable globale de type short qui faisant arrêter la rotation de la roue
StopScript TestArretRoue ; ...et on arrête le script.
endif
End
Quelques pitites explications sur Angle et Angle2 : comme la roue ne cesse de tourner, son angle devrait continuellement augmenter, donc on devrait toujours avoir l'angle actuel (variable "Angle") supérieur à l'angle précédent (variable "Angle2"). MAIS, quand Angle passe 360°, il est remis à environ 0° (exactement à sa valeur moins 360°). A cette frame (et à cette frame seulement !), on aura donc Angle légèrement supérieur à 0° et Angle2 légèrement inférieur à 360° : on a bien Angle < Angle2 qui signale le changement de tour...
Voili voilà, si ça reste obscur, n'hésite pas !
Nenfëa
- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!
Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!
Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !
- Les yeux, Bouh, vise les yeux!
- Pouiiiiiic!!!
Le monde de Gilbertus devenu réalité : Kalendaar!
Il était une fois un site vachement bien avec plein de nistoires dessus... ah, vous la connaissez déjà ?!
Wiwi d'or 2006 du plus serviable ! Tadaaaaaaaa !
0 utilisateur(s) li(sen)t ce sujet
0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)