(SOLVED)Problèmes de compatibilités [scripts savegames]

Started by Jerelink, March 13, 2017, 09:40:01 PM

Previous topic - Next topic
Vérifie que le game que tu passes n'est pas nil. En faisant un print par exemple.

April 04, 2017, 09:27:36 PM #16 Last Edit: April 04, 2017, 09:29:51 PM by MetalZelda
game est un raccourci pour sol.game.load("sauvegarde dans le dossier d'écriture") six jeunes m'abusent, si une sauvegarde est inexistante, game retournera nil.

J'ai tenté le print, il affiche "nil".
Si je lance je jeu sans sauvegarde enregistré, tout ce passe bien et je peut commencer une partie. En revanche, avec une sauvegarde, il me renvoi l'erreur mentionné précédemment.
Je précise quand même que le print ne fonctionne que dans "on_started", si je le met a la suite de:
Code (lua) Select
  local hearts = hearts_builder:new(game, { x = 0, y = 0 })
Alors rien ne se passe.
J'ai pas pour habitude de venir demander de l'aide au premier problème, mais là je sèche totalement '-'.

April 04, 2017, 10:02:13 PM #18 Last Edit: April 04, 2017, 10:03:47 PM by MetalZelda
J'aimerais bien voir ta fonction game_manager:start_game(file_name)
Les coeurs sont visible a l'écran ?

Code (lua) Select
local game_manager = {}

local initial_game = require("scripts/initial_game")

-- Starts the game from the given savegame file,
-- initializing it if necessary.
function game_manager:start_game(file_name)

  local exists = sol.game.exists(file_name)
  local game = sol.game.load(file_name)
  if not exists then
    -- Initialize a new savegame.
    initial_game:initialize_new_savegame(game)
  end
  game:start()


Justement oui, en jeu les cœurs sont présent et fonctionnent parfaitement.

April 05, 2017, 01:11:53 AM #20 Last Edit: April 05, 2017, 01:16:54 AM by MetalZelda
En jeu oui, mais dans ton menu de sauvegarde je parle ^^
Si non, alors il faut charger les 3 sauvegardes dans read_savegame dans une variable par exemple et de l'utiliser quand tu dessines ton menu

Code (lua) Select
-- Existing file.
    local game = game_manager:start_game(file_name)
    games[i] = game
     
    draw_hearts(game, surface)


N'est pas bon car tu cherches a démarrer les 3 sauvegardes et game:start_game() ne retourne aucune valeur.
Comme dit plus haut, on peut résumer la variable game ici par sol.game.load, ton fichier est chargé, mais n'est aucunement executé, sauf si game:start est appellé, cependant, tu peux modifier et charger des valeures depuis ce dernier. Très utile ici

Code (lua) Select
local game = sol.game.load(file_name)
    games[i] = game
    draw_hearts(game, surface)


Devrait fonctionner

Alors dans le menu non, aucun affichage. J'ai suivi ton conseil et remplacé:
Code (lua) Select
local game = game_manager:start_game(file_name)
par:
Code (lua) Select
local game = sol.game.load(file_name)

Je n'ai plus d'erreur, mais toujours pas de cœur affiché.
J'ai chargé une partie, ça fonctionne. J'ai même lancé un print dans cette condition "else" afin de savoir si celle ci était traité et elle l'est.

Si il n'y a plus d'erreur alors la seule chose manquante se situe au niveau du on_draw, sois la surface auquel tu dessines tes coeurs, sois le on_draw  du script des coeurs.

J'ai finalement trouvé une solution, je n'ai trouvé d'erreur nul part, du coup j'ai choisi d'utiliser une partie du script de Zelda ROTH:
Code (lua) Select
local function draw_hearts(game, game_surface)

  local life = game:get_life()
  local max_life = game:get_max_life()
  for j = 1, max_life do
    if j % 2 == 0 then
      local x, y
      if j <= 20 then
        x = 40 + 4 * j
        y = 0
      else
        x = 40 + 4 * (j - 20)
        y = 8
      end
      if life >= j then
        hearts_img:draw_region(0, 0, 8, 8, game_surface, x, y)
      else
        hearts_img:draw_region(16, 0, 8, 8, game_surface, x, y)
      end
    end
  end
  if life % 2 == 1 then
    local x, y
    if life <= 20 then
      x = 40 + 4 * (life + 1)
      y = 0
    else
      x = 40 + 4 * (life - 19)
      y = 8
    end
    hearts_img:draw_region(8, 0, 8, 8, game_surface, x, y)
  end
end


Comme ça je n'ai plus a faire appel au script "hearts.lua"  8)

Merci a vous d'y avoir consacré du temps .