Switch (state) o state();?

Hai una curiosità o un problema con Game Maker? Domanda e ti sarà risposto!
Rispondi
Avatar utente
celeste orsa
Newbie
Messaggi: 10
Iscritto il: 02/11/2018, 17:11
Specialità: Grafico Compositore
Uso: GM:Studio 2
Contatta:

Switch (state) o state();?

Messaggio da celeste orsa »

Salve a tutti ho un dubbio su una cosa. Vorrei saper se secondo voi è più performante usare uno switch per gestire una machina a stati suddivisi in script, oppure memorizzare lo script in una variabile ed eseguire lo script quando mi serve in questo modo: variabile(); ?
(Uso l'ultimissima versione di Game Maker Studio 2: 2.3.2.560 ).

ESEMPIO 1 (cambiare gli stati con switch):

Codice: Seleziona tutto

//QUELLO CHE SUCCEDE ALL'INTERNO DEGLI SCRIPT
	function script_state_IDLE () {
		if (key_fly) state = BUG_STATE.FLY;
	}
	
	function script_state_FLY () {
		if (on_floor) state = BUG_STATE.LANDING;
	}

	function script_state_LANDING () {
		if (end_animation) state =  BUG_STATE.IDLE;
	}

//EVENTO CREATE
	enum BUG_STATE
	{
		IDLE,
		FLY,
		LANDING
	}

	state = BUG_STATE.IDLE;

//EVENTO STEP
	switch (state)
	{
		case BUG_STATE.IDLE:	 script_state_IDLE ();	      break;
		case BUG_STATE.FLY: 	 script_state_FLY (); 	      break;
		case BUG_STATE.LANDING: script_state_LANDING (); break;
	}


ESEMPIO 2 (memorizzare lo script interessato in una variabile ed eseguirlo nell'evento step):

Codice: Seleziona tutto

//QUELLO CHE SUCCEDE ALL'INTERNO DEGLI SCRIPT
	function script_state_IDLE () {
		if (key_fly) state = script_state_FLY;
	}
	
	function script_state_FLY () {
		if (on_floor) state = script_state_LANDING ;
	}

	function script_state_LANDING () {
		if (end_animation) state =  script_state_IDLE 	 ;
	}

//EVENTO CREATE
state = script_state_IDLE;

//EVENTO STEP
state(); //ESEGUE LO SCRIPT DELLO STATO INTERESSATO
Attualmente nel mio progetto (che è molto più grande) ho optato per il secondo esempio, in quanto non ho bisogno né di inizializzare un enum né di usare uno switch per gestire gli stati. A me sembra l'opzione migliore per il momento, ma magari potrei anche sbagliarmi. Vorrei avere la certezza che questa sia la strada giusta da percorrere, in modo da cambiare tutto il resto del codice in questo modo.
Spero che qualcuno di voi mi illumini, grazie!

Avatar utente
Xeryan
Newbie
Messaggi: 13
Iscritto il: 06/05/2009, 9:52
Uso: GM:Studio 2
Località: United Earth, 2468
Contatta:

Re: Switch (state) o state();?

Messaggio da Xeryan »

Ciao @celeste orsa,
il buon vecchio Simsure ha sviluppato un benchmark tool per GMS 2.3 per testare proprio questa tipologia di casi: https://discord.com/channels/1684155502 ... 6470083645

Per entrare, puoi usare il link che ho in firma :sisisi:
GMI si è spostata su Discord: https://discord.gg/0wKBBPIbX2r3S32a

Rispondi

Chi c’è in linea

Visitano il forum: Nessuno e 21 ospiti