3d games creator, Wrapvalue


Ici nous étudierons la fameuse fonction qui vous simplifiera la vie pour toutes vos rotations ! (Attention, ce texte s'attache plus au domaine du tutoriel pratique que du cours)

[modifier] Introduction à la rotation

Voici un petit snippet (bout de code) qui montre un exemple de rotation fait "à la main". Ici, à chaque fois que l'utilisateur appuie sur la touche gauche ou droite, l'angle Y de l'objet, situé dans la variable ay# est incrémenté de 5. Après on impose une rotation de l'objet en ay#, ce qui fait tourner mon objet de 5. Appuyez sur espace pour quitter le code qui va suivre et voir ce que fait le deuxième code à l'écran.

Rem On crée un cube numéro 1, de taille 5
Make object cube 1,5
sync rate 50
sync on
repeat
if rightkey()=1 then ay#=ay#-5
if leftkey()=1 then ay#=ay#+5
yrotate object 1,ay#
set cursor 0,0
print "First ay# : ",ay#
sync
until spacekey()=1
wait 500

[modifier] Un deuxième exemple : limiter la rotation d'un objet

Comme vous pouvez le constater, on a imprimé la variable AY#. Lorsqu'elle dépasse une valeur de 360 ou chute en bas de 0 (selon le bouton sur lequel vous appuyez), DB vous affiche un message d'erreur qui indique que la valeur d'angle est erronée. Il faut donc ajuster cette valeur pour qu'elle reste dans l'intervalle d'angles universel (càd entre 0 et 360). Reprenons l'ancien code... En réalité, nous ajoutons deux lignes qui serviront à tester à chaque boucle si la variable ay# ne sort pas de l'intervalle. Si c'est le cas, si la variable est trop grande, on la remettra à 0. Si elle est trop petite, on la mettra à 360 (l'utilisateur n'y verra que du feu, les angles 0 et 360 mettent l'objet exactement dans la MEME direction (la seule différence est qu'avec 360 le cube a fait un petit tour sur lui-même avant ;) !).

ay#=0
repeat
if rightkey()=1 then ay#=ay#-1
if leftkey()=1 then ay#=ay#+1
if ay#>360 then ay#=0
if ay#<0 then ay#=360
yrotate object 1,ay#
set cursor 0,0
print "2nd ay# : ",ay#
sync
until spacekey()=1
wait 500

[modifier] Introduction à la fonction Wrapvalue

Eh oui ! Désormais c'est parfait !! Mais ne vous inquiétez pas : pour vous éviter ces calculs, Darkbasic a inventé une commande qui fait ce boulot à votre place : Wrapvalue ! Essayons-la... sur le tout premier code, tout simplement !

repeat
if rightkey()=1 then ay#=wrapvalue(ay#-5)
if leftkey()=1 then ay#=wrapvalue(ay#+5)
yrotate object 1,ay#
set cursor 0,0
print "3rd ay# : ",ay#
sync
until spacekey()=1

Et voilà ! Tout le travail est fait avec une seule instruction ajoutée au programme. Pratique, non ?