forked from LegoGMI/ManualeGM
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path205_00_objects.html
129 lines (108 loc) · 6.28 KB
/
205_00_objects.html
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head>
<title>Di più sugli object</title>
<link href="style.css" rel="stylesheet" type="text/css">
</head>
<body background="images/back.gif">
<!--START-->
<h1>Di più sugli object</h1>
Quando crei un object in Advanced Mode, puoi cambiare qualche
opzione avanzata addizionale.
<h3>Depth (profondità)</h3>
Per prima cosa, puoi impostare la <b>Depth</b> (profondità) delle istanze dell' object.
Quando le istanze sono disegnate sullo schermo sono disegnate secondo la loro depth.
Le istanze con depth maggiore sono disegnate per prime (quindi stanno dietro). Le istanze con la
depth minore sono disegnate per ultime (quindi stanno davanti). quando delle istanze hanno uguale
depth, si segue l'ordine secondo cui sono state create. Se vuoi essere sicuro che
un object stia davanti agli altri, dagli una depth negativa. Se vuoi
essere sicuro che stia dietro alle altre istanze, dagli una depth grande e positiva.
Puoi anche cambiare la depth di un'istanza durante il gioco usando la
variabile chiamata "depth".
<h3>Object persistenti (persistent)</h3>
In secondo luogo, puoi far diventare un object persistente (persistent). Un object persistente
continuerà a esistere quando ti sposti da una room a un'altra.
Scompare solo se lo distruggi esplicitamente. Devi solo mettere
un'istanza di quell'object nella prima room e poi rimarrà disponibile
in tutte le room. È molto utile quando, per esempio, hai un personaggio principale che si muove
da una room all'altra. L'uso object persistenti è un meccanismo potente ma
può portare facilmente a errori.
<h3>Parents (Object "genitori" e "figli")</h3>
Ogni object può avere un object che è il suo parent ("genitore"). Quando un object ha un parent,
eredita il comportamento del parent. Detto diversamente, l'object è una specie
di caso speciale del suo parent. Per esempio, se hai 4 diverse
palle, chiamate ball1, ball2, ball3 e ball4, che si comportano tutte allo stesso modo ma
hanno diversi sprite, puoi impostare ball1 come parent degli altri tre.
Ora devi solo specificare gli eventi per ball1. Gli altri erediteranno gli
event e si comporteranno esattamente allo stesso modo. Inoltre, quando ti riferisci alle
istanze di un object che è parent, ti riferisci contemporaneamente anche ai "figli".
Quindi, per esempio, se distruggi tutte le istanze di ball1, anche le istanze di
ball2, ball3 e ball4 verranno distrutte. Questo ti fa risparmiare un bel po' di lavoro.
<p>
Spesso, gli object dovrebbero comportarsi in modo praticamente identico ma
con qualche piccola differenza. Per esempio, un mostro potrebbe doversi mouvere su e giù e
l'altro a sinistra e destra. Per il resto hanno esattamente lo stesso comportamento.
In questo caso quasi tutti gli event dovrebbero avere le stesse azioni ma uno o due
dovrebbero essere diversi. Di nuovo possiamo impostare un object come parent dell'altro.
Ma in questo caso dobbiamo ancge definire degli event per l'object "figlio". Questi
event "hanno la precedenza" sugli event del parent. Quindi se un event del
"figlio" contiene azioni, queste sono eseguite al posto di quelle contenute nell'event
del parent. Se vuoi eseguire anche l'event del parent puoi richiamare il
cosiddetto ""inherited event"" (event ereditato) usando l'apposita azione.
<p>
In alcuni casi può essere una buona cosa creare un object di base.
Quest'object contiene tutti i comportamenti di base
ma non viene mai usato nel gioco. Tutti gli object hanno quest'object di base come parent.
Gli object impostati come parent possono avere un parent, e così via. (ovviamente non
puoi creare cicli. (Ad esempio: non puoi dire che obj1 è parent di obj2 E CONTEMPORANEAMENTE che obj2 è parent di obj1.))
Così puoi creare una gerarchia di object. È molto utile per tenere ben strutturato il tuo gioco
e ti consiglio vivamente di imparare a usare questo meccanismo.
<p>
C'è anche un secondo utilizzo dei parent. Il "figlio" eredita anche il
comportamento del "padre" quando collide con altri object. Lascia che ti spieghi con un esempio.
Mettiamo che hai quattro object pavimento differenti. Quando una palla colpisce il pavimento
deve cambiare direzione. Questo va specificato nel collision event della
palla col pavimento. Visto che hai quattro diversi pavimenti dobbiamo
mettere lo stesso codice in quattro diversi collision event nella palla. Ma se
crei un object "pavimento di base" e lo rendi parent dei quattro
object pavimento, dovrai solo specificare la collisione con questo
"pavimento di base". Le altre collisioni avvieranno lo stesso evento. Di nuovo, ciò ti fa risparmiare
molto lavoro di copiatura.
<p>
Come indicato, ovunque usi un object, usi anche i suoi "discendenti".
Ciò accade quando, in un'azione, indichi che quell'azione deve essere
applicata alle istanze di un determinato object. accade anche quando usi
l'istruzione <tt>with()</tt> nel codice (vedi più in basso). E funziona quando chiami
funzioni come <tt>instance_position</tt>, <tt>instance_number</tt>, ecc.
Infine, funziona quando ti riferisci a variabili in altri oggetti.
Nell'esempio qui sopra quando imposti <tt>ball1</tt>.speed a 10 si applica anche a
ball2, ball3 e ball4.
<h3>Maschere di Collisione (Collision Masks)</h3>
Quando due istanze collidono, si verifica un Collision Event. Per decidere se due
istanze si intersecano, sono usati gli sprite. È così in molti casi, ma a volte
vorrai far basare le collisioni su una forma differente. Per esempio, se
vuoi creare un gioco isometrico, gli object hanno solitamente un'altezza (per dar loro una
visuale 3D). Ma per le collisioni vorrai usare solo la parte in basso dello
sprite. Puoi farcela creando uno sprite separato che è usato come
maschera di collisione per l'object.
<h3>Informazioni</h3>
Il pulsante <b>Show Information</b> (mostra informazioni) ti dà una panoramica di tutte le informazioni
dell'object, che possono anche essere stampate. È particolarmente utile quando
vuoi vedere una panoramica di tutte le tue azioni ed eventi.
<!--END-->
</body>
</html>
<!-- KEYWORDS
depth
persistent objects
persistence, objects
parent object
inheritance
masks
object information
profondità
object persistenti
persistenza, object
parent object
eredità
maschere
-->