Désolé, j'ai mal expliqué.
Voici un exemple un peu plus complet, mais réalisé sur un autre logiciel que RM Maker (donc à adapter pour les commandes, le seul point qui t'intéresse étant la diminution des MP quand le héros court)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
| # Quand la touche est enfoncée, modifie la vitesse du héros.
|Input Key: CSelf0[Key Input]Keyboard (100~) [Key Code [142] Only] ( Left Shift Key)
|Loop Start
||Condition (Number): [1] CSelf0[Key Input] is 142 equal
|-+Condition: [1] [ CSelf0[Key Input] is 142 equal ] Case
| ||Move Route: Hero / Move Speed -> 4
| ||Set Variable: CSelf1[Frames] += 1 + 0
| ||Condition (Number): [1] CSelf1[Frames] is 15 equal
| |-+Condition: [1] [ CSelf1[Frames] is 15 equal ] Case
| | ||Call Event: Common4:[ o Recover or Damage ] / 2:SP Recovery/Reduce / 0:Wanderer / -1
| | ||Set Variable: CSelf1[Frames] = 0 + 0
| | ||
| |+End+
| ||Wait: 10 Frame(s)
| ||
|-+Else Case
| ||Move Route: Hero / Move Speed -> 3
| ||Set Variable: CSelf1[Frames] = 0 + 0
| ||Break Loop
| ||
|+End+
||
+Loop End Point++
|Wait: 1 Frame(s)
|
Où Loop Start = début de la boucle
Key input = touche pressée
J'ai inséré un mini calcul pour que cela reste réceptif. Tu es obligé d'avoir un wait très court pour que le programme détecte rapidement quand la touche est pressée ou non. Mais tu veux que tes MP ne disparaissent pas en un quart de secondes.
D'où l'inclusion d'une variable qui s'aditionne à l'intérieur de ta boucle, qui fait +1 à chaque passage. Avec l'ajout d'une condition où quand ta variable = le nombre de temps souhaité avant soustraction d'un mp, tu mets à l'intérieur le mp enlevé et tu remets ta variable de décompte à 0 (pour qu'elle recommence à 0). Tu la remets aussi à 0 quand la touche shift n'est plus pressée (histoire que le décompte reparte de 0).
(Le wait à la fin est peu utile, contrairement à celui dans la boucle, indispensable)
|