Bonjour je sollicite votre aide car je coince depuis quelques heures maintenant et ça commence à me rendre fou. Je doit passer à coté de quelque chose mais impossible de savoir quoi.

Je suis en train de développer un jeu avec Phaser 2.2 et j'essaye de faire un système de collision.

Le principe est simple les zones vertes ne doivent pas être accessible, ainsi que le mur
Nom : Capture d’écran 2015-01-21 à 16.46.24.png
Affichages : 408
Taille : 463,4 Ko

Voici le code complet
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
 
var game = new Phaser.Game(512, 512, Phaser.CANVAS, 'phaser-example', { preload: preload, create: create, update: update, render: render });
 
function preload() {
 
    game.load.tilemap('bar', 'assets/maps/bar.json', null, Phaser.Tilemap.TILED_JSON);
    game.load.image('cafe_tiles', 'assets/tiles/cafe.png');
    game.load.image('wall_tiles', 'assets/tiles/cafewall.png');
    game.load.atlas('player', 'assets/sprites/tremel.png', 'assets/sprites/tremel.json');
 
}
 
var map;
var layer_wall;
var layer_sol;
var layer_couche_1;
var layer_couche_2;
var layer_couche_3;
 
var keys;
var sprite;
var marker;
var player;
 
function create() {
 
    game.physics.startSystem(Phaser.Physics.ARCADE);
 
    map = game.add.tilemap('bar');
 
    map.addTilesetImage('bar', 'cafe_tiles');
    map.addTilesetImage('cafewall', 'wall_tiles');
 
    layer_sol = map.createLayer('sol');
    layer_wall = map.createLayer('wall');
    layer_couche_1 = map.createLayer('couche_1');
    layer_couche_2 = map.createLayer('couche_2');
    layer_couche_3 = map.createLayer('couche_3');
 
    map.setCollisionBetween(1, 1000, true, layer_wall);
    map.setCollisionBetween(1, 1000, true, layer_couche_1);
    map.setCollisionBetween(1, 1000, true, layer_couche_2);
    map.setCollisionBetween(1, 1000, true, layer_couche_3);
    layer_couche_1.debug = true;
    layer_couche_2.debug = true;
    layer_couche_3.debug = true;
    layer_wall.debug = true;
    layer_sol.resizeWorld();
 
    player = game.add.sprite(200, 200, 'player', 'tremel1');
    player.animations.add('walk_down', Phaser.Animation.generateFrameNames('tremel', 1, 4, '', 1), 30, true);
    player.animations.add('walk_up', Phaser.Animation.generateFrameNames('tremel', 13, 16, '', 1), 30, true);
    player.animations.add('walk_left', Phaser.Animation.generateFrameNames('tremel', 5, 8, '', 1), 30, true);
    player.animations.add('walk_right', Phaser.Animation.generateFrameNames('tremel', 9, 12, '', 1), 30, true);
 
    game.physics.arcade.enable(player);
    player.body.collideWorldBounds = true;
 
    keys = game.input.keyboard.createCursorKeys();
 
}
 
function update() 
{	
	game.physics.arcade.collide(player, layer_couche_1);
 
	if(keys.left.isDown) 
	{	
		player.x -= 3;
	   	player.animations.play('walk_left', 8, true);
	}
	else if(keys.right.isDown) {
		player.x += 3;
		player.animations.play('walk_right', 8, true);
	}
	else if(keys.up.isDown) 
	{
		player.y -= 3;
		player.animations.play('walk_up', 8, true);
	}
	else if(keys.down.isDown) 
	{
		player.y += 3;
		player.animations.play('walk_down', 8, true);
	}
	else
	{
		player.animations.stop()
	}	
}
Comme je l'ai vu de nombreuses fois sur le net + sur la doc de Phaser, pour gérer la collision il faut déclarer les collisions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
 map.setCollisionBetween(1, 1000, true, layer_wall);
    map.setCollisionBetween(1, 1000, true, layer_couche_1);
    map.setCollisionBetween(1, 1000, true, layer_couche_2);
    map.setCollisionBetween(1, 1000, true, layer_couche_3);
Puis ensuite ajouter la physique au joueur
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 game.physics.arcade.enable(player);
Et enfin normalement rajoute juste ceci dans la méthode update()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
game.physics.arcade.collide(player, layer_couche_1);
Sauf que game.physics.arcade.collide(player, layer_couche_1); me renvois false systématiquement et je ne sais pas pk ?

Merci d'avance pour votre aide