-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
198 lines (173 loc) · 6.53 KB
/
script.js
File metadata and controls
198 lines (173 loc) · 6.53 KB
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
/**
* Je n'ai pas pu voir de code de tween ou de fusion là-dedans, donc j'ai supposé que c'était quelque chose d'autre
Je suppose que vous voudrez désactiver la physique lorsque la tween est en cours d'exécution (c'est à dire en collant les 2 parties ensemble) sinon
ça va avoir l'air vraiment bizarre - donc dans votre click handler, je désactiverais la physique sur les deux objets, je créerais la tween pour les
coupler et dans le tween onComplete handler j'ajouterais alors l'objet de jeu 'fish' à celui 'gameboy' auquel il est collé - c'est à dire que je
l'ajouterais dans ce conteneur - puis j'activerais la physique juste sur le 'gameboy' à nouveau, et il traînera le poisson autour de lui.
pour les séparer, il faut faire l'inverse : retirer les objets " poisson " du conteneur " gameboy " et réactiver leur physique.
vous pouvez appeler sprite.body.stop() pour l'empêcher de se déplacer, mais vous devrez désactiver la physique ou si l'un des autres objets le heurte,
il sera de toute façon entraîné.
ce qui aura l'air bizarre
*/
let config = {
type: Phaser.AUTO,
parent: "phaser-example",
width: 735,
height: 400,
physics: {
default: "arcade",
debug: true
},
scene: {
preload: preload,
create: create,
update: update
}
};
let game = new Phaser.Game(config);
const acontGameBoys = [];
const acontFishes = [];
let compteur=0;
let aContainerGrouped = [];
let clickedFirst = "";
let clickedSecond="";
function preload() {
this.load.image("gauche", "/images/gauche.png");
this.load.image("droite", "/images/droite.png");
}
function create() {
this.gameboys = [];
this.fishes = [];
this.fishCounter = 0;
this.gameBoyCounter = 0;
this.aExprFacto = [
"(x+2)(x+3)",
"(2x+1)(2x-1)",
"(x-3)(x+3)",
"(4x-1)(4x+1)"
];
this.aExprDev = ["x²+5x+6", "4x²-1", "x²-9", "16x²-1"];
this.cameras.main.setBackgroundColor("#ffffff");
for (let i = 0; i < this.aExprFacto.length; i++) {
let gameboy = this.add.image(0, 0, "gauche").setOrigin(0.5, 0.5);
let gameboyText = this.add
.text(0, 70, this.aExprFacto[i], {
fontSize: "16px",
fill: "#f00"
})
.setOrigin(0.5, 0.5);
let fish = this.add.image(0, 0, "droite").setOrigin(0.5, 0.5);
let fishText = this.add
.text(0, 70, this.aExprDev[i], {
fontSize: "16px",
fill: "#f00"
})
.setOrigin(0.5, 0.5);
//
// Create containers for gameboy and fish
let contGameBoy = this.add.container(200 + i * 50, 300, [
gameboy,
gameboyText
]);
let contFish = this.add.container(600 + i * 50, 300, [fish, fishText]);
gameboy.setInteractive();
fish.setInteractive();
// Enable physics for the containers
this.physics.world.enable(contGameBoy);
this.physics.world.enable(contFish);
// Set velocity and world bounds collision for the containers
contGameBoy.body
.setVelocity(
Phaser.Math.Between(-200, 200),
Phaser.Math.Between(-150, 150)
)
.setCollideWorldBounds(true, 1, 1, true)
.setBounce(1, 1)
.maxVelocity.set(150, 150);
contFish.body
.setVelocity(
Phaser.Math.Between(-200, 200),
Phaser.Math.Between(-150, 150)
)
.setCollideWorldBounds(true, 1, 1, true)
.setBounce(1, 1)
.maxVelocity.set(150, 150);
// Add pointerdown event listeners to the containers
contGameBoy.setInteractive(
new Phaser.Geom.Rectangle(
0,
0,
contGameBoy.width,
contGameBoy.height
),
Phaser.Geom.Rectangle.Contains
);
contFish.setInteractive(
new Phaser.Geom.Rectangle(0, 0, contFish.width, contFish.height),
Phaser.Geom.Rectangle.Contains
);
// Etat
contGameBoy.etat = "";
contFish.etat = "";
contGameBoy.groupe=false;
contFish.groupe=false;
gameboy.on("pointerdown", () => {
this.gameBoyCounter++;
// Parcourir tous les conteneurs et les réinitialiser
acontGameBoys.forEach((cont) => {
cont.etat = "";
cont.list[0].setTint(0xffffff);
});
// Activer celui qu'on a cliqué
// etatContainer(contGameBoy); remplacé par apres
// A SIMPLIFIER => fonction avec par ex container.list[0]==="fish" ou "gameboy"
// On teste si 1e clic
if (clickedFirst==="gameboy") {
// On avait déjà cliqué sur un autre container équivalent -> On change... rien
} else
if (clickedFirst==="fish") {
// On a déjà cliqué sur l'autre container
clickedSecond="gameboy"
} else {
// On n'a cliqué sur rien
clickedFirst="gameboy"
}
});
fish.on("pointerdown", () => {
this.fishCounter++;
// Parcourir tous les conteneurs et les réinitialiser
acontFishes.forEach((cont) => {
cont.etat = "";
cont.list[0].setTint(0xffffff);
});
// Activer celui qu'on a cliqué
etatContainer(contFish); // Appeler 'etatContainer'
});
} //end for
// Les collisions
let groups = [acontGameBoys, acontFishes];
for (let i = 0; i < groups.length; i++) {
for (let j = i; j < groups.length; j++) {
this.physics.add.collider(groups[i], groups[j]);
}
}
}
function etatContainer(container) {
// Le premier enfant du conteneur sera soit gameboy, soit fish
let sprite = container.list[0];
if (container.etat === "") {
container.etat = "cliqué";
if (sprite.texture.key === "gauche") {
// On a cliqué sur le sprite gauche
sprite.setTint(0x0000ff); // couleur bleue
} else if (sprite.texture.key === "droite") {
// On a cliqué sur le sprite droit
sprite.setTint(0xff0000); // couleur rouge
}
} else if (container.etat === "cliqué") {
sprite.setTint(0xffffff);
// Vous pouvez définir ce que vous voulez faire ici quand l'état est "cliqué"
}
}
function update() {
}