Voici une technique pour faire de la neige sans utiliser un module. On peut voir le resultat dans le
Indiana Jones.
Y a peut-être plus simple (et plus propre), mais çà marche ! :ihih:
Ca peut facilement s'adapter pour faire de la pluie.
Dans le GlobalScript.ash
*** Declaration de variables globales ***
- Code:
-
import int nb_flocons;
import int flocon_x[1000]; // absisse
import int flocon_y[1000]; // ordonnée
import int flocon_s[1000]; // vitesse
import int flocon_c[1000]; // couleur
import DrawingSurface *surface;
import DrawingSurface *backup;
import int flocons_i;
import int tempo;
Dans le script de la Room ou il neige (fonction Enter Room before fading) :
*** Initialisation des variables ***
- Code:
-
function room_Load()
{
nb_flocons = 500; // nombre de flocons (1000 maxi)
tempo = 0;
flocons_i = 0;
while (flocons_i < nb_flocons) {
flocon_x[flocons_i] = Random(320);
flocon_y[flocons_i] = Random(144);
flocon_s[flocons_i] = Random(5)+1;
// la couleur des flocons est en fonction de leur vitesse
if (flocon_s[flocons_i] == 1) flocon_c[flocons_i] = 200;
if (flocon_s[flocons_i] == 2) flocon_c[flocons_i] = 210;
if (flocon_s[flocons_i] == 3) flocon_c[flocons_i] = 225;
if (flocon_s[flocons_i] == 4) flocon_c[flocons_i] = 230;
if (flocon_s[flocons_i] == 5) flocon_c[flocons_i] = 245;
if (flocon_s[flocons_i] == 6) flocon_c[flocons_i] = 255;
flocons_i++;
}
surface = Room.GetDrawingSurfaceForBackground();
backup = surface.CreateCopy();
}
Dans le GlobalScript.asc, tout en haut :
- Code:
-
int nb_flocons;
export nb_flocons;
int flocon_x[1000];
export flocon_x;
int flocon_y[1000];
export flocon_y;
int flocon_s[1000];
export flocon_s;
int flocon_c[1000];
export flocon_c;
DrawingSurface *surface;
export surface;
DrawingSurface *backup;
export backup;
int flocons_i;
export flocons_i;
int tempo;
export tempo;
Toujours dans le GlobalScript.asc (ou on veut si la fonction repeatedly_execute_always n'a pas déjà été definie) :
*** On fait tomber chaque flocon de neige dans la fonction repeatedly_execute_
always - Code:
-
function repeatedly_execute_always() {
if (player.Room == ***NUMERO DE LA ROOM***) {
tempo++;
if (tempo >= 5) { // regle la vitesse générale de chutte de neige
tempo = 0;
surface = Room.GetDrawingSurfaceForBackground();
surface.DrawSurface(backup);
flocons_i = 0;
while (flocons_i < nb_flocons) {
bouge = Random(2); // mouvement horizontal
if (bouge == 1) {
flocon_x[flocons_i]++;
if (flocon_x[flocons_i] >= 320) flocon_x[flocons_i] = 0;
}
if (bouge == 2) {
flocon_x[flocons_i]--;
if (flocon_x[flocons_i] < 0) flocon_x[flocons_i] = 319;
}
flocon_y[flocons_i] += flocon_s[flocons_i];
if (flocon_y[flocons_i] >= 144) flocon_y[flocons_i] = 0; // 144 est le bas de l'écran
surface.DrawingColor = Game.GetColorFromRGB(flocon_c[flocons_i], flocon_c[flocons_i], flocon_c[flocons_i]);
surface.DrawPixel(flocon_x[flocons_i] , flocon_y[flocons_i]);
flocons_i++;
}
surface.Release();
}
}
}
Rempacer ***NUMERO DE LA ROOM*** par le numéro de la room ou il neige.