Code: Select all
//-------------------------------------------°°Acqua
process acqua(x,y)
private
fuoco idFuoco;
begin
graph=8;
loop
y=y+4;
if(y>480) break;end
idFuoco = collision (type fuoco);
if ((idFuoco) && (idFuoco.spento==0))
frame;
break;
end
frame;
end
end
Il problema è che funziona, ma ogni tanto la goccia non muore ma attraversa comunque il fuoco ancora acceso.
Secondo me il problema è legato a come l'engine di bennu analizza i vari processi, probabilmente il fuoco si accorge che è in collisione con una goccia e, quindi, si spegne, poi la goccia si accorge che è in collisione con il fuoco ma che questo è già spento!
La soluzione sarebbe quella di gestire le collisioni del fuoco direttamente in un solo processo, magari settando una variabile pubblica nell'altro x farlo morire (oppure usando signal(idAcqua,s_kill);)
Prova a vedere tu se trovi la causa a questo problema, secondo me, ripeto, è legato alla gestione delle collisioni in due processi diversi.
Per la domanda relativa a come controllare i valori multipli, potresti utilizzare il resto di una divisione, ovvero usando l'operatore % ottieni il modulo, ovvero il resto, della divisione.
es: 200 % 100 = 0 ovvero 200 è divisibile per 100, quindi è un suo multiplo!
Nel caso del laser diventerebbe:
Code: Select all
if((parte%200)==0)
genera laser
end




