mardi 12 septembre 2017

#03 Tuto AppGameKit 2 - Bouger un sprite avec l'accéléromètre

EDITO
Bouger notre sprite avec le doigt...oui ok...c'est bien mais....avec l'accéléromètre c'est quand même bien sympa aussi!


CE QUE NOUS VOULONS FAIRE
Déplacer notre sprite avec l'accéléromètre.



MISE EN PLACE
Nous reprendrons le même exemple que pour le #02 Tuto AppGameKit 2


CODE
Comme toujours on ajoute quelques lignes...soyez vigilants!

_______________________________________________________________________________


// Project: Sprite
// Created: 2017-08-19

// show all errors

SetErrorMode(2)

// set window properties
SetWindowTitle( "Sprite" )
SetWindowSize( 1024, 768, 0 )
SetWindowAllowResize( 1 ) // allow the user to resize the window

// set display properties
SetVirtualResolution( 1024, 768 ) // doesn't have to match the window
SetOrientationAllowed( 0, 0, 0, 1 ) // On oriente notre écran car avec l'accéléromètre ça va piquer les yeux!
SetSyncRate( 60, 0 ) // 30fps instead of 60 to save battery
SetScissor( 0,0,0,0 ) // use the maximum available screen space, no black borders
UseNewDefaultFonts( 1 ) // since version 2.0.22 we can use nicer default fonts

    Sprite = CreateSprite(0)
    SetSpriteSize        (Sprite,50,50)
    SetSpritePosition    (Sprite,(GetVirtualWidth()-50)/2,(GetVirtualHeight()-50)/2)
    SetSpriteColor        (Sprite,255,255,255,255)
    SetSpriteVisible    (Sprite,1)

do

    // #02 Tuto On bouge le sprite avec le doigt
    if ( GetPointerPressed ( ) = 1 )
       
    x_pointer = GetPointerX()
    y_pointer = GetPointerY()
       
    x = GetSpriteX(Sprite)
    y = GetSpriteY(Sprite)
   
    bougeX = x_pointer - x
    bougeY = y_pointer - y
       
    SetSpritePosition    (Sprite,x+bougeX,y+bougeY)
       
    endif

    // #03 Tuto On bouge le sprite avec l'accéléromètre
   
    if GetAccelerometerExists()=1 then Print("Présence Accéléromètre OK") else Print("Désolé il n'y a pas d'accéléromètre")

    if GetRawAccelX() <> 0   or GetRawAccelY() <> 0   
           
    xv = GetSpriteX(Sprite)
    yv = GetSpriteY(Sprite)       
           
    xv = xv + GetRawAccelX()*50
           
    if xv < 0 then xv = 0
    if xv > 974 then xv = 974
       
    yv = yv + GetRawAccelY()*50
           
    if yv < 0 then yv = 0
    if yv > 718 then yv = 718
   
    SetSpritePosition    (Sprite, xv , yv)
   
    endif
   
    Print("Position en X : "+str(GetSpriteX(Sprite),0))
    Print("Position en Y : "+str(GetSpriteY(Sprite),0))

   
    Sync()
loop

_____________________________________________________________________________________ 

EXPLICATIONS
Les lignes noires sont des lignes de codes
Les lignes grisées sont des lignes de commentaires, elles servent donc à commenter la ligne de code car on peut vite se perdre quand on dépasse un certain nombre de lignes.
Les lignes bleues sont des lignes de codes. Ce sont les lignes que j'ai ajouter pour le tuto.

SetOrientationAllowed( 0, 0, 0, 1 )
On oriente notre écran car avec l'accéléromètre ça va piquer les yeux!

SetSpritePosition    (Sprite,(GetVirtualWidth()-50)/2,(GetVirtualHeight()-50)/2) 
Alors là c'est une façon comme une autre de mettre son sprite au centre de l'écran.
On prend la valeur de l'écran en largeur (ici 1024) on enlève 50 qui correspond à la largeur du sprite et on divise le tout par 2 pour avoir la position exacte en X du sprite.
On refait la même opération pour la hauteur (en Y) 

if GetAccelerometerExists()=1 then Print("Présence Accéléromètre OK") else Print("Désolé il n'y a pas d'accéléromètre")
Rien de compliqué ici. On test la présence de l'accéléromètre de l'appareil (Device)
Mais on ne l'utilise pas comme condition, c'est juste une indication.

if GetRawAccelX() <> 0   or GetRawAccelY() <> 0   
GetRawAccelX et GetRawAccelY retournent la valeur de déplacement de l'accéléromètre. 
Si une valeur existe aussi bien sur l'axe X ou l'axe Y on exécute les instructions suivantes...

xv = GetSpriteX(Sprite)
yv = GetSpriteY(Sprite)
Nous allons maintenant enregistrer dans les variables "xv" et "yv" la position du Sprite actuelle.
  xv = xv + GetRawAccelX()*50
    

if xv < 0 then xv = 0
if xv > 974 then xv = 974
On va d'abord s'occuper de l'axe X. La logique restera la même pour l'axe Y
Pour la variable "xv", on ajoute sa valeur + la valeur de l'accélération GetRaWAccelX et on multiplie par 50. Pourquoi 50? Modifier cette valeur et dite moi à quoi elle sert dans les commentaires ;)

La suite du code sert à délimiter la zone que va couvrir notre sprite sur l'axe X
Nous avons 1024 points au maximum sur l'axe X. On enleve donc 50 points qui correspondent à la largeur du sprite. Ce qui donne 974

Pour le Y, comme je le dis c'est tout comme pareil le X... 
 
SetSpritePosition    (Sprite, xv , yv)
Il nous reste à repositionner notre sprite en appelant SetSpritePosition
On donne la position calculée "xv" et "yv" et...c'est tout!

Petit Bonus
Print("Position en X : "+str(GetSpriteX(Sprite),0))
Print("Position en Y : "+str(GetSpriteY(Sprite),0))
On va afficher la position de notre sprite en haut à gauche de l'écran
La commande "str" transforme la valeur entre () c'est à dire GetSpriteX ou Y en chaîne de caractères.
Le "0" après la virgule sert à ne pas afficher les chiffres après la virgule.

CONCLUSION
Bon ça va c'est pas compliqué et puis c'est rigolo...non? Bon je tacherai de trouver quelque chose de plus fun alors la prochaine fois.

Vous cherchez à faire quelque chose de précis, vous pouvez me le demander en commentaire.

#AGK2 

Aucun commentaire:

Enregistrer un commentaire