Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Jerelink

Pages: [1]
1
Development / Diagonales avec le mouvement de type "straight"
« on: August 25, 2017, 09:28:51 pm »
Salut la communauté !

Je suis embêté par un petit problème concernant le mouvement de type "straight".
J'aimerais pouvoir déplacer une entité dans les quatre directions diagonales, seulement je ne comprends pas bien le concept de math.pi au delà des directions de base.

Autrement, est-il possible de faire cela différemment ? C'est dans le contexte d'un script de déplacement customisé pour certain type de pnj.

Merci et bonne soirée :)

2
Bonjour a tous !

  Je me présente, Jerelink, membre de ZS depuis un long moment déjà, je m’intéresse depuis peu au moteur Solarus et souhaite par conséquent obtenir de l'aide sur ce forum  :).

  Tout d’abord, je tiens à m'excuser de ne pas poster ce message en anglais, mes connaissances sont faibles, de ce fait je trouve qu'il est plus judicieux de procéder ainsi plutôt qu'utiliser Google traduction (sauf si vous préférez ce dernier évidement) .

Voici mon problème:
  Débutant que je suis, j’essaie de créer un menu des sauvegardes en me basant sur les tutos de Christopho ( E46 et E47), seulement, il y a quelques petits problèmes de compatibilités entre les versions 1.1 et l'actuelle. Pour commencer,
Code: [Select]
game_manager:create(file_name) ne fonctionne pas sous 1.5. Je l'ai donc remplacé par
Code: [Select]
start_game même si je doute que ça soit son équivalent, mais n'ayant rien trouvé d'autre dans l'api...

  Ensuite, le hearts_builder pour afficher les cœurs sur la/les parties existantes. Ma version du HUD est la même que dans le tuto HUD en 1.5 (EP 33) et dans le script "hearts.lua", la function "hearts_builder" fait appelle a un deuxième paramètre hearts_builder:new(game, config) et c'est là que vient le plus gros du problème.  A l’exécution, tout ce passe correctement, mais dès l'ajout de cette ligne
Code: [Select]
draw_hearts(game, surface) dans la fonction "read_savegames()", j'ai ce message d'erreur qui s'affiche:
Quote
Error: In on_started: [string "scripts/hud/hearts.lua"]:12: attempt to index local 'config' (a nil value)

J'ai essayé pas mal de choses pour contourner ce bug mais rien y fait.

Voici mon code :

Code: [Select]
local savegames_menu = {}

local game_manager = require("scripts/game_manager")
local gui_designer = require("scripts/lib/gui_designer")
local hearts_builder = require("scripts/hud/hearts")

local cursor_img = sol.surface.create("menus/link_cursor.png")
local cursor_position
local savegames_surfaces = {}
local games = {}

local layout

local function build_layout()

  layout = gui_designer:create(320, 240)
  layout:make_background()
  layout:make_big_wooden_frame(16, 8, 160, 32)
  layout:make_text(sol.language.get_string("savegames_menu.title"), 96, 16, "center")
  layout:make_wooden_frame(16, 48, 288, 32)
  layout:make_wooden_frame(16, 96, 288, 32)
  layout:make_wooden_frame(16, 144, 288, 32)
end

-- Places the cursor on the savegame 1, 2 or 3.
local function set_cursor_position(index)

  cursor_position = index
  cursor_img:set_xy(26, 2 + index * 48)
end

local function get_savegame_file_name(index)
  return "save" .. index .. ".dat"
end

-- Draws the hearts of a game on a savegame surface.
local function draw_hearts(game, surface)

  local hearts = hearts_builder:new(game)
  hearts:on_started()
  hearts:on_draw(surface)
end

-- Reads the existing savegames and creates the savegames surfaces.
local function read_savegames()

  for i = 1, 3 do
    local file_name = get_savegame_file_name(i)
    local surface = sol.surface.create(240, 16)
    surface:set_xy(56, 8 + i * 48)
    savegames_surfaces[i] = surface
   
    if not sol.game.exists(file_name) then
      games[i] = nil
    else
      -- Existing file.
      local game = game_manager:start_game(file_name)
      games[i] = game
     
      --draw_hearts(game, surface)
    end
  end
end

function savegames_menu:on_started()

  build_layout()
  read_savegames()
  sol.audio.play_music("game_over")
  set_cursor_position(1)
end

function savegames_menu:on_draw(dst_surface)

  layout:draw(dst_surface)
 
  for i = 1, 3 do
    savegames_surfaces[i]:draw(dst_surface)
  end
  cursor_img:draw(dst_surface)
end

function savegames_menu:on_key_pressed(key)

  local handled = false

  if key == "space" then
    local file_name = get_savegame_file_name(cursor_position)
    game_manager:start_game(file_name)
    sol.menu.stop(savegames_menu)
    handled = true

  elseif key == "down" then
    if cursor_position < 3 then
      set_cursor_position(cursor_position + 1)
    else
      set_cursor_position(1)
    end
    sol.audio.play_sound("cursor")
    handled = true

  elseif key == "up" then
    if cursor_position > 1 then
      set_cursor_position(cursor_position - 1)
    else
      set_cursor_position(3)
    end 
    sol.audio.play_sound("cursor")
    handled = true

  end

  return handled
end

return savegames_menu

Je pense avoir tout dit, je vous remercie de m'avoir lu, bonne journée a tous  ;).

Pages: [1]