Bonjour,
Voilà je travaille sur un projet de jeu vidéo mais je n'arrive pas a gérer les collisions entre mon personnage et les mur et les objets de ma map. Mon jeu est vue de dessus et je ne voulais pas faire comme les rpg ou l'on peut se déplacer que case par case mais mon personnage se déplace que dans 4 directions. Pour éviter d'avoir d'avoir trop de différentes tiles, j'ai un calque qui rassembles les murs, un calque qui rassemble les objets inertes, un calque pour les objets avec des animations, etc... Or c'est la que survient mon problème, je n'arrive pas a gérer les collision. Voici mon main.lua, mon joueur.lua et mon fichier map.lua
main.lua :
joueur.lua :
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 require ("map") require ("joueur") function love.load() end function love.update(dt) function updateSprite (player, dt) local collide = false --droite if player.x == player.x + 1 then collide = CollideRight(player, dt) end --gauche if player.x == player.x - 1 then collide = CollideLeft(player, dt) end --bas if player.y ==player.y + 1 then collide = CollideDown(player, dt) end --haut if player.y == player.y - 1 then collide = CollideUp(player, dt) end --Collision if collide then player.v = 0 end collide = false end function isSolid (id) if id == map.imgSol then return false end if id == map.imgMur then return true end if id == map.imgObjet then return true end end function CollideRight(player) local id = getTileAt(player.x + 1) return isSolid(id) end function CollideLeft(player) local id = getTileAt(player.x - 1) return isSolid(id) end function CollideUp(player) local id = getTileAt(player.y - 1) return isSolid(id) end function CollideDown(player) local id = getTileAt(player.y + 1) return isSolid(id) end end function love.draw() love.graphics.draw(map.imgSol) love.graphics.draw(map.imgMur) love.graphics.draw(map.imgObjet) love.graphics.draw(player.img, player.x, player.y, math.rad(player.angle),1,1,player.img:getWidth()/2, player.img:getHeight()/2) end
et map.lua :
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 player = {} player.x = 500 player.y = 500 player.v = 0.7 player.frame = 0 player.run = false player.angle = 0 player.img = love.graphics.newImage("pistolet/rechargement stoïque/sprite_0.png") function updatePlayer (player, dt) -- clavier if love.keyboard.isDown("right") then player.x = player.x + player.v player.angle = 90 player.run = true end if love.keyboard.isDown("left") then player.x = player.x - player.v player.angle = -90 player.run = true end if love.keyboard.isDown("up") then player.y = player.y - player.v player.angle = 0 player.run = true end if love.keyboard.isDown("down") then player.y = player.y + player.v player.angle = 180 player.run = true end end
le code actuel montre mon personnage qui ne peut pas bouger, j'ai beau appuyez sur les flèches directionnelles, il ne bouge pas.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 map = {} map.imgSol = love.graphics.newImage("Nouveau dossier/Chambre/sol.png") map.imgMur = love.graphics.newImage("Nouveau dossier/Chambre/mur collision.png") map.imgObjet = love.graphics.newImage("Nouveau dossier/Chambre/objet de collisions.png")
Si quelqu'un pourrait m'aidez rapidement ce serait génial, sinon je vais devoir me remettre au case par case mais sa va ralentir un max mon jeu et il va aussi perdre de sa jouabilité.
Merci d'avance pour votre aide
Partager