µLua DS - Forum officiel | Official forum Index du Forum

µLua DS - Forum officiel | Official forum
Le bon endroit pour en savoir plus sur MicroLua et pour parler de vos projets ! | The right place to learn more about MicroLua and talk about your projects !

 FAQFAQ   RechercherRechercher   MembresMembres   GroupesGroupes   S’enregistrerS’enregistrer   ProfilProfil   Se connecter pour vérifier ses messages privésSe connecter pour vérifier ses messages privés   ConnexionConnexion 

[collision] comment faire ?

 
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Demande d'aide
Sujet précédent :: Sujet suivant  
Auteur Message
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Sam 2 Mar 2013 - 16:34    Sujet du message: [collision] comment faire ? Répondre en citant

Bonjours .

Je suis actuellement sur un projet de jeu RPG, mais j'ai j'ai un problème avec les collisions Shocked !
J'ai d'abord créé un système que j'ai appellé le "smooth moving", qui permet un déplacement en pixel par pixel, mais avec un alignement par rapport à la grille .
Le problème, c'est que mon système de collisions me permet de rentrer dans les murs ... Et d'y rester coincé !
Voici les codes :

la fonction collision() :

 

Code:


 function colision(mapp, pox, poy, debu)
 if debu == nil then debu = false end
 t1 = ScrollMap.getTile(mapp, math.floor(((pox+40)/16)+1), math.floor((poy+40)/16))
 t2 = ScrollMap.getTile(mapp, math.floor(((pox+40)/16)-1), math.floor((poy+40)/16))
 t3 = ScrollMap.getTile(mapp, math.floor((pox+40)/16), math.floor(((poy+40)/16)+1))
 t4 = ScrollMap.getTile(mapp, math.floor((pox+40)/16), math.floor(((poy+40)/16)-1))
 if debu == true then
  screen.print(SCREEN_DOWN, 2, 2, "t1: "..t1.." t2: "..t2.." t3: "..t3.." t4: "..t4)
  screen.print(SCREEN_DOWN, 2, 10, "pox: "..pox.." poy: "..poy)
  screen.drawFillRect(SCREEN_UP, pox+40, poy+40, pox+56, poy+56, Color.new(31,0,0))
 end
 if block[t1] == nil then
  ScrollMap.scroll(mapp, 0, 0)
  pox = 0
  poy = 0
 end
 if (block[t1]) then
  p1 = block[t1].pass
 else p1 = false end
 if (block[t2]) then
  p2 = block[t2].pass
 else p2 = false end
 if (block[t3]) then
  p3 = block[t3].pass
 else p3 = false end
 if (block[t4]) then
  p4 = block[t4].pass
 else p4 = false end
 return p1, p2, p3, p4
end




le jeu :


Code:


 Debug.ON()
keyt = Timer.new()
frame = 2
menu = false
x = 48--posx * 16
y = 48--posy * 16
tiles = Image.load("img/tileset.png", VRAM)
if not (actmap) then
 loadMap("map", tiles)
end
c = {}
keyt:start()
while not Keys.held.Select do
   Controls.read()
   startDrawing()
   c[1], c[2], c[3], c[4] = colision(actmap, x, y, true) --gestion des collisions
   --déplacements
   if Keys.held.Up and menu == false and c[2] == true then
      if Keys.held.B then
       y = y - 2
      else
       y = y - 1
      end
      diry = "up"
   elseif Keys.held.Down and menu == false and c[1] == true then
      if Keys.held.B then
       y = y + 2
      else
       y = y + 1
      end
      diry = "down"
   elseif Keys.held.Left and menu == false and c[4] == true then
      if Keys.held.B then
       x = x - 2
      else
       x = x - 1
      end
      dirx = "left"
   elseif Keys.held.Right and menu == false and c[3] == true then
      if Keys.held.B then
       x = x + 2
      else
       x = x + 1
      end
      dirx = "right"
   else
      frame = 5
   end
   if keyt:time() >= 110 then
      keyt:stop() end
   ---***correct***---
   if not Keys.held.Up and not Keys.held.Down or menu == true then
    if diry == "up" and y/16 ~= math.floor(y/16) then
     y = y - 1
    end
    if diry == "down" and y/16 ~= math.floor(y/16) then
     y = y + 1
    end
   end
   if not Keys.held.Left and not Keys.held.Right or menu == true then
    if dirx == "left" and x/16 ~= math.floor(x/16) then
     x = x - 1
    end
    if dirx == "right" and x/16 ~= math.floor(x/16) then
     x = x + 1
    end
   end
   ScrollMap.scroll(actmap, x+8, y+8)
   ---******---
   ScrollMap.draw(SCREEN_UP, actmap)
   ---**menu**---
   if Keys.newPress.Start then
    if menu == false then menu = true choix = 1
    elseif menu == true then menu = false choix = nil end
   end
   if menu == true then
    screen.drawFillRect(SCREEN_UP, 196, 0, 256, 192, Color.new(31,31,31))
    screen.print(SCREEN_UP, 200, 2, "", Color.new(0,0,0))
    screen.print(SCREEN_UP, 200, 11, "", Color.new(0,0,0))
    screen.print(SCREEN_UP, 200, 20, "SAC", Color.new(0,0,0))
    screen.print(SCREEN_UP, 200, 29, sauv["info"]["name"], Color.new(0,0,0))
    screen.print(SCREEN_UP, 200, 38, "REGLAGES", Color.new(0,0,0))
    screen.print(SCREEN_UP, 200, 47, "SAUVER", Color.new(0,0,0))
    if Keys.newPress.Down then choix = choix + 1
    elseif Keys.newPress.Up then choix = choix - 1 end
    if choix < 1 then choix = 1 end
    if choix > 6 then choix = 6 end
    if choix == 1 then
     screen.print(SCREEN_UP, 200, 2, "", Color.new(31,0,0))
     if Keys.held.A then

      Controls.read()
     end
    elseif choix == 2 then
     screen.print(SCREEN_UP, 200, 11, "", Color.new(31,0,0))
     if Keys.held.A then
      Controls.read()
     end
    elseif choix == 6 then
     screen.print(SCREEN_UP, 200, 47, "SAUVER", Color.new(31,0,0))
     if Keys.newPress.A then
      screen.drawFillRect(SCREEN_UP, 0, 172, 256, 192, Color.new(31,31,31))
      if Keys.newPress.A then
       screen.print(SCREEN_UP, 2, 174, "Sauvegarde ...", Color.new(0,0,0))
       INI.save("save/save.ini", sauv)
      end
     end
    end
   end
   ---******---
   stopDrawing()
end
keyt:reset()
menu = nil
keyt = nil
ScrollMap.destroy(actmap)
actmap = nil
Debug.OFF()





Voilà, j'espère que quelqu'un trouvera le bug Wink
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Dernière édition par geeker le Sam 9 Mar 2013 - 16:30; édité 2 fois
Revenir en haut
Visiter le site web du posteur
Publicité






MessagePosté le: Sam 2 Mar 2013 - 16:34    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Reylak
Administrateur

Hors ligne

Inscrit le: 24 Nov 2008
Messages: 2 838
Localisation: Toulouse

MessagePosté le: Sam 2 Mar 2013 - 16:39    Sujet du message: [collision] comment faire ? Répondre en citant

Les balises [code ] et [/ code] sont tes amies (sans les espaces). Okay
_________________


Plein d'infos sur le SourceForge !


Revenir en haut
Visiter le site web du posteur MSN Skype
spectrenoir06


Hors ligne

Inscrit le: 13 Jan 2012
Messages: 184
Localisation: Paris

MessagePosté le: Sam 2 Mar 2013 - 16:43    Sujet du message: [collision] comment faire ? Répondre en citant

Ton smooth moving c'est des déplacement a la pokemon ?

Revenir en haut
Visiter le site web du posteur
thermo_nono
Modérateur

Hors ligne

Inscrit le: 31 Déc 2008
Messages: 2 415
Localisation: La Géhenne

MessagePosté le: Sam 2 Mar 2013 - 18:21    Sujet du message: [collision] comment faire ? Répondre en citant

moi c'est des commentaires dans le code que j'aurais aimé avoir.. ça m'aurait aidé pour la relecture. 
_________________
“Qui reçoit une idée de moi reçoit de la connaissance sans diminuer la mienne, comme celui qui allume sa chandelle à la mienne reçoit la lumière sans me plonger dans l’obscurité.” - Thomas Jefferson


Revenir en haut
Visiter le site web du posteur MSN
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Sam 2 Mar 2013 - 19:07    Sujet du message: [collision] comment faire ? Répondre en citant

1: oui effectivement, c'est du déplacement à la pokemon Wink
2: pour les commentaires, j'en met très peu, mais il n'y en a pas besoin: mon code est (je trouve) assez clair, mais si tu as besoin de comms', ce sera demain (je suis sur DS) .
3:
Code:
 et
, je les avais oubliées celles-là Wink .
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
spectrenoir06


Hors ligne

Inscrit le: 13 Jan 2012
Messages: 184
Localisation: Paris

MessagePosté le: Sam 2 Mar 2013 - 22:48    Sujet du message: [collision] comment faire ? Répondre en citant

Moi je partirait du principe que tu test uniquement le tile devant toi.
ensuite moi j'utiliserait 2 fonctions - une qui renvoi l'id du tile
- et une autre qui utilise la précédente pour renvoyer si le tile est traversable

exemple:
- function scanTile(map,x,y,direction) -- returne l'id
- function scanCol(map,x,y,direction) -- returne true ou false

regarde les sources de diamant je l'ai fait en fonctionnel


Revenir en haut
Visiter le site web du posteur
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Dim 3 Mar 2013 - 13:29    Sujet du message: [collision] comment faire ? Répondre en citant

J'ai regardé ton code, mais je ne vois pas comment l'adapter à mon jeux ... On a pas le même mode de déplacement !


Sinon, (un peu HS), je ne trouve pas la uLibrary pour compiler Microlua avec l'efs ...
trouvé, et ça marche !!!
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
spectrenoir06


Hors ligne

Inscrit le: 13 Jan 2012
Messages: 184
Localisation: Paris

MessagePosté le: Dim 3 Mar 2013 - 18:30    Sujet du message: [collision] comment faire ? Répondre en citant

geeker a écrit:
J'ai regardé ton code, mais je ne vois pas comment l'adapter à mon jeux ... On a pas le même mode de déplacement !


comment sa c'est bien du déplacement case par case a la pokemon ?


Revenir en haut
Visiter le site web du posteur
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Dim 3 Mar 2013 - 19:05    Sujet du message: [collision] comment faire ? Répondre en citant

moi c'est la map qui bouge, pas le sprite =]
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Mar 5 Mar 2013 - 12:19    Sujet du message: [collision] comment faire ? Répondre en citant

Up ! Je suis en train de rajouter les PNJs, mais avec ce bug, ça marche pas ! Ils se décalent toujours sur les côtés quand je bouge !
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
geeker


Hors ligne

Inscrit le: 23 Déc 2012
Messages: 363

MessagePosté le: Mar 12 Mar 2013 - 12:06    Sujet du message: [collision] comment faire ? Répondre en citant

Toujours pas d'idées ? J'ai essayé avec des math.floor() et des math.ceil() mais la hitBox du perso se décale toujours ... Très zarby ... J'ai essayé avec la libColision mais du coup, mon perso se déplace aussi dans l'écran ...
_________________
Beta-testeur de l'extrème
Tox: FFBDC8B34DC3CDE51F8F1CB0A628147DE740ACD1D44682EB5492A681F6541E32E8D8BB6052B3
CtrµLua: ctrulua.github.io
Des p'tits true, des p'tits true, toujours des p'tits true ...


Revenir en haut
Visiter le site web du posteur
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 03:50    Sujet du message: [collision] comment faire ?

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    µLua DS - Forum officiel | Official forum Index du Forum -> Section française -> Demande d'aide Toutes les heures sont au format GMT + 1 Heure
Page 1 sur 1

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Traduction par : phpBB-fr.com