Programmer sur Script (partie 6)

Voir le sujet précédent Voir le sujet suivant Aller en bas

Tutoriel Programmer sur Script (partie 6)

Message par Morgan9195 le Dim 17 Fév - 23:25

Programmer sur Script (partie 6)
La 2D avancée, plus d'interactions



Alors comme ça vous voulez aller plus loin dans les interactions?
Très bien, alors dans ce chapitre vous allez être servit, et avec quelque chose de bien plus concret que le chapitre précédent.

Voici une fonction qui vous sera très utile en 2D, une fonction incontournable lorsqu'on programme le menu principal d'un jeu (avec les boutons "Jouer", "Option", "Quitter").
Je parle bien évidemment de la fonction mouse_in_rectangle();

Voici sa syntaxe:
if mouse_in_rectangle(x1,y1,x2,y2)

Remarque: Parfois, je nomme "fonctions" les conditions, car en réalité les conditions sont des fonctions. J'essaye de vous faire remarquer la nuance entre "fonction" et "condition" car c'est assez important lorsqu'on commence à programmer. Sachez juste repérer cette nuance, comme ça je n'aurais plus de risque de vous parler de "fonction mouse_in_rectangle" sans vous embrouiller.

Oui, c'est une condition. Une condition qui détecte si la souris se trouve dans un rectangle, pas mal pour viser un bouton sur le menu, vous ne trouvez pas?

Petit exemple de son utilisation:
Code:

if page="Menu"
{
 if mouse_in_rectangle(50,50,500,200)
 {
  if mouse_check_button_pressed(mb_left)
  page="Option";
  draw_set_color(c_white);
 }
 else
  draw_set_color(c_blue);
 draw_rectangle(50,50,500,200,true);
}
Ici vous avez un superbe exemple d'un bouton "Option" se trouvant sur le menu principal d'un jeu.

Voici ce que ce code fait:
Si le jeu affiche actuellement le menu, alors on dessine un bouton à l'écran.
Ce bouton est un simple rectangle très basique, il est bleu lorsque la souris ne le touche pas, et devient blanc lorsque la souris entre dans le rectangle.
Si la souris est dans le rectangle et qu'en même temps le clic gauche est pressé, alors la page devient la page d'options, et par conséquent, ça n'affiche plus le bouton puisqu'il est lié à la condition if page="Menu"

Je vous laisse méditer un peu sur ce code. Si vous avez des questions sur son fonctionnement, n'hésitez pas.

Remarque: les nombres qu'on donne au mouse_in_rectangle au début sont les même que ceux qu'on donne au draw_rectangle à la fin.

N'oubliez pas les espaces devant les fonctions, comme j'ai mis dans cet exemple. plus un espace lorsqu'on rentre dans une condition, et moins un espace lorsqu'on en sort. Ca aide à ne pas oublier d'accolades, et ça aide aussi lors de la relecture.

On passe à deux autres fonctions beaucoup plus simples, mais qui vont sans doute être améliorées dans les prochaines versions de Script.
Voici ce que ces fonctions permettent de faire:


Code source du screen ci-dessus:

Ficher start.script :
Code:

program_name="Test"
background_color=c_white;

Ficher script0.script :
Code:

draw_2D();
light(false);
draw_set_color(c_black);

// boutons
bouton_choix1=button_circle(50,100,1);
bouton_choix2=button_circle(100,100,0);
bouton_choix3=button_circle(150,100,0);

draw_text(10,70,"Les boutons ont toujours une seule case maximum de cochee");
draw_text(50,120,bouton_choix1);
draw_text(100,120,bouton_choix2);
draw_text(150,120,bouton_choix3);

// cases
case_choix1=button_rectangle(50,200,1);
case_choix2=button_rectangle(100,200,0);
case_choix3=button_rectangle(150,200,0);

draw_text(10,170,"Les cases peuvent en avoir plusieurs");
draw_text(50,220,case_choix1);
draw_text(100,220,case_choix2);
draw_text(150,220,case_choix3);

draw_text(200,220,"total= "+string(case_choix1+case_choix2+case_choix3));

draw_text(10,300,"En plus c est ultra simple a utiliser, merci qui? ^^");

Sympas pour remplir la page Option du précédent exemple !

La fonction qui affiche ET qui gère la condition du premier bouton est:
if button_circle(x,y,defaut) (c'est la syntaxe)

Cette fonction affiche le bouton aux coordonnées x et y qu'on lui donne.
"defaut" est la valeur par défaut du bouton (on/off, true/false, 1/0)
Mais cette fonction sert aussi de condition pour vérifier si le bouton est coché.

if button_circle(x,y,defaut) est la fonction qui fait le bouton rond. Attention, un seul bouton rond peut être activé à la fois.

if button_rectangle(x,y,defaut) est la fonction qui fait le bouton carré. On peut en activer plusieurs à la fois.

Maintenant, admettons qu'on veuille qu'un cercle détecte la souris. La fonction mouse_in_rectangle() ne peut pas être utilisée pour ça car elle est prévu pour détecter un rectangle, mais nous voulons un cercle.
Petit rappel de la syntaxe de la fonction qui dessine un cercle: draw_circle(x,y,r,outline);
Prenons comme exemple un cercle de centre x=20, y=30 et de rayon 15.
La fonction qui dessine ce cercle est donc:
Code:

draw_circle(20,30,15,true);

Rappel: true/false peut être remplacé par 1/0

La condition qui détecte si la souris est dans le cercle:
Code:

if point_distance(mouse_x,mouse_y,20,30)<15
{
 
}
Oula, ne faites pas cette tête ! Cette fonction est simple, il faut juste que je vous explique par quelle théorie je l'utilise pour détecter la souris dans un cercle.

La fonction point_distance(x1,y1,x2,y2) calcule la distance (en pixels) entre deux points sur un plan 2D. Ici elle calcule la distance entre la souris et le centre du cercle, nous avons juste à vérifier si cette distance est inférieur au rayon du cercle.
Voila ! Vous voyez, c'était pas si compliqué.

Et comme je suis sympas, je vous ai simplifier encore plus cette fonction en créant la fonction mouse_in_circle(x,y,r) Elle est pas belle la vie?

Cette fonction est à utiliser comme condition dans un if
x et y sont les coordonnées du centre, et r le rayon du cercle.
J'ai aussi créé une fonction qui peut détecter si un point autre que la souris est dans un cercle:
point_in_circle(x1,y1,x2,y2,r)
Cette fonction fonctionne comme la précédente, à un détail près:
x1,y1: le point
x2,y2,r: le cercle

Voila, je vous donne un petit exemple de ce que ça donne dans un code:
Code:

draw_2D();
light(false);
background_color=c_white;
draw_set_color(c_black);

if mouse_check_button(mb_left)
{
 varx=mouse_x;
 vary=mouse_y;
}

variable=point_in_circle(varx,vary,300,300,50);
draw_circle(300,300,50,true);
draw_text(50,50,variable);

Pour améliorer les interactions dans vos programmes, je vous invite à lire les tutoriels sur les diverses utilisations des variables.
avatar
Morgan9195
Fondateur
Fondateur

Messages : 168
Date d'inscription : 11/02/2013
Age : 22
Localisation : Entre le fauteuil et le clavier

Projet(s)
Niveau de connaissances dans Script: Professionnel
Spécialité: Programmeur

Voir le profil de l'utilisateur http://morgan9195.olympe.in/devblog/

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut

- Sujets similaires

Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum