Les distancesJ'ai lu avec intérêt l'excellent tutoriel de jin sur la gestion des distances et... omg ce que c'est compliqué !
Nous allons ici réaliser un chien qui s'énerve quand on s'approche à moins de case de lui, pour cela, nous allons utiliser:
- Code:
-
cmd(:distance_between_squares, id1, id2)
Qui nous donnera la distance entre l'evenement référencé par l'id1 et l'évènement référencé par l'id2... (l'id du héros étant toujours le 0) !
Voici comment faire dans un évènement en processus parallèle qui est notre chien:
Facile non? Il suffit d'appeller dans une condition et de choisir la section Script et de lui demander si
cmd(:distance_between_squares, 0, 1) < 4
donc si la distance entre l'event 0 (le héros) et l'event 1 (le chien) est inférieur à 4... Notre chien sautera sur place en aboyant !
Notez qu'il existe une variante, la commande cmd(:distance_between_pixels, 0, 1) qui donnera la distance en pixel.
Lien vers la doc : Ici (référence des commandes aux events)
Les zonesImaginons cette super map !
J'aimerai de tout coeur que quand je sois dans la zone blanche, la neige se mette a tomber !
Pour ça j'ai une fonction toute faite qui me facilite la tâche !
Lien vers la doc !
- Code:
-
cmd(:create_area, :rectangle,x1,y1,x2,y2)
Je n'ai qu'a spécifer x et y du point 1 et x et y du point 2 ^^
(le point 1 étant le coin haut gauche de la zone et le point deux et le point bas droit de la zone).
Dans mon cas, la zone est située en (3,9),(15,19).
Je vais donc créer une zone que je lierait a une variable local !
En faisant ceci:
- Code:
-
set(1, cmd(:create_area, :rectangle, 3, 9, 15, 19))
Le tout dans un évènement en processus parallèle.
Une fois de plus je vais créer une boucle (avec mon attendre 1 frame) et c'est dedans que je vais vérifier si un point est dans la zone en utilisant la fonction in_area?(x, y).
Dans mon cas, elle s'utilisera comme ça
- Code:
-
get(1).in_area(x, y)
(get(1) correspond à notre zone).
Voici donc comment j'ai procédé pour qu'il neige quand je suis au bon endroit sur la carte:
Facile non? J'aurais pu aussi faire directement ça:
Les zones sont purement virtuelle, donc j'aurais pu utiliser les coordonnées en pixel mais alors il aurait fallu multiplier les coords du héros par 32 (et oui, une case = 32pixels).
Je vous invite à consulter la documentation, il existe plusieurs autres zones comme des zones circulaires, en ellipse, ou même des polygones complexes !
Par exemple :
- Spoiler:
Avec une zone polygonale il est possible très facilement de savoir si un point (par exemple les coordonnées de la souris) est sur une des zones violette de l'étoile en définissant les points dans la zone.
J'espère que ce tutoriel vous aura été utile !
Ciao !