Partage
  • Partager sur Facebook
  • Partager sur Twitter

[LUA] Conditions redondantes une solution ?

Sujet résolu
    6 octobre 2020 à 23:01:57

    Bonjour à tous ! 

    Je viens vers vous aujourd'hui pour voir si quelqu'un peut m'aider à simplifier du code...

    En effet ce code fonctionne comme je le veux mais je le trouve moche et je suis sur qu'on peut faire mieux !

    Voici le code, ce sont les conditions que je ne trouve vraiment pas ouf...

    if level.tileType[level.grid[math.floor(hero.y / 32 + 2)][math.floor((hero.x + map.tileSize / 2) / 32 + 1)]] == "rocher" or 
            level.tileType[level.grid[math.floor(hero.y / 32 + 2)][math.floor((hero.x + map.tileSize / 2) / 32 + 1)]] == "tree" or 
            level.tileType[level.grid[math.floor(hero.y / 32 + 2)][math.floor((hero.x + map.tileSize / 2) / 32 + 1)]] == "lave" then 
          return false
        else
          return true
        end

    et voici le commentaire associé :

    --[[
    level.tileType[ tableau des noms de textures
    
    level.grid[    tableau a deux dimensions des id de textures
    
    math.floor(hero.y / 32 + 2)]     position en y du hero diviser par la taille des tiles + 2, 1 car les tableaux commencent à 1 en lua et 1 pour avoir la tuiles d'en dessous
    
    math.floor((hero.x + map.tileSize / 2) / 32 + 1)] position en x du hero pour taille d'une tuiles /2 pour avoir son centre /32 pour savoir sur quelle tuile il est +1 car les tableaux commencent à 1 en lua
    
    --]]





    Donc si vous avez mieux à me proposer ce serai super ! :D

    Merci d'avance, cordialement,

    Magrets.

    -
    Edité par MagretsDeCanard 6 octobre 2020 à 23:03:58

    • Partager sur Facebook
    • Partager sur Twitter
      8 octobre 2020 à 2:29:01

      Rien que faire des intermédiaires aère énormément le code.

      local id = level.grid[math.floor(hero.y / 32 + 2)][math.floor((hero.x + map.tileSize / 2) / 32 + 1)]
      local type = level.tileType[id]
      return type ~= "rocher" and type ~= "tree" and type ~= "lave"

      Il est aussi possible de faire prédéfinir une table de la forme {type1=true, type2=true,...} pour faire une condition du genre !types[type].

      Sinon, c'est préférable de définir des constantes pour faire référence aux types plutôt que de les convertir en string. Donc directement id == ROCHER and ...

      -
      Edité par jo_link_noir 8 octobre 2020 à 2:30:18

      • Partager sur Facebook
      • Partager sur Twitter
        8 octobre 2020 à 22:36:28

        Encore une fois merci à toi pour ce problème ainsi que le précèdent sur lequel tu m'avais déjà donné un bon coup de main ! :D
        • Partager sur Facebook
        • Partager sur Twitter

        [LUA] Conditions redondantes une solution ?

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown