Sujet n°14308
Posté par Zohran le 1 Jan - 11:03 (2015)
Titre : Nouveau problème d'update d'un bitmap[RESOLU]
Bonjour, voilà comme j'apprécie embêter la communauté avec mes divers problèmes, je n'arrive pas à résoudre celui-ci:
Je suis toujours sur la création de mon éditeur, et actuellement, il peut afficher la BDD dans un bitmap contenant la liste (ex: liste des pKmN, objets... etc)

Ce qui est bizarre, c'est que quelque soit celui que je sélectionne, la liste ne s'affiche pas intégralement, mais le plus surprenant, c'est que la liste contient bien toutes les données...
.___.

Au passage, j'ai aussi un problème avec mon curseur qui ne s'affiche pas bien en face de l'objet, plus je descend et plus il est excentré, pourtant ma formule de calcul des y semblent correcte...

Voilà l'engin de torture:


Code:
class Editor
 
  def main
    @titles = ["Editeur",
               "Editeur d'Objet",
               "Editeur de Pokémon",
               "Editeur d'Attaque",
               "Editeur de Capacités Spéciales",
               "Editeur de Nature"]
   
    @commands = ["Liste des Objets",
                 "Liste des Pokémon",
                 "Liste des Attaques",
                 "Liste des Capacités Spéciales",
                 "Liste des Natures",
                 "Quitter"]
                 
    @infos = ["Créer un nouvel objet ou éditer un objet existant.",
              "Créer un nouveau pokémon ou éditer un pokémon existant.",
              "Créer une nouvelle attaque ou éditer une attaque existante.",
              "Créer une nouvelle capacité spéciale ou éditer une capacité spéciale existante.",
              "Créer une nouvelle nature ou éditer une nature existante.",
              "Quitter l'Editeur de données."]
   
    @items_list = []
    for i in 0..$data_items.size-1
      @items_list.push(ItemData.name(i+1))
    end
             
    @pokemon_list = []
    for i in 0..$data_pokemon.size-1
      @pokemon_list.push(PokemonData.name(i+1))
    end
   
    @skills_list = []
    for i in 0..$data_skills.size-1
      @skills_list.push(SkillData.name(i+1))
    end
         
    @abilitys_list = []
    for i in 0..$data_abilitys.size-1
      @abilitys_list.push(AbilityData.name(i+1))
    end
   
    @natures_list = []
    for i in 0..$data_natures.size-1
      @natures_list.push(NatureData.name(i))
    end
   
    @lists = [@items_list,@pokemon_list,@skills_list,@abilitys_list,@natures_list]
   
    @current_title = @titles[0]
    @current_commands_list = @commands
    @current_infos_list = @infos
    @current_command = 0
    @progression_level = 0
             
    @space = 2
    @length = 0
             
    @title_sprite = Sprite.new
    make_bitmap_title_sprite
   
    @commands_sprite = Sprite.new
    make_bitmap_commands_sprite
   
    @info_sprite = Sprite.new
    @info_sprite.bitmap = Bitmap.new(100,Font.default_size)
    remake_bitmap_info_sprite
   
    @cursor = Sprite.new
    @cursor.bitmap = Bitmap.new(Directory.editor+"Curseur")
    @cursor.ox = @cursor.width/2
    @cursor.oy = @cursor.height/2
    @cursor.x = @commands_sprite.x - @cursor.width - 2
    @cursor.y = @commands_sprite.y
   
    update_title
    update_info
    update_commands_list(@current_commands_list)
   
    Graphics.transition

    loop do
      Graphics.update
      Input.update
      update
      if $scene != self
        break
      end
    end

    Graphics.freeze

    dispose
  end
 
  def update
    update_quit_command
    update_validation_command
    update_current_command
    update_cursor
    update_y_commands_sprite
    update_info
  end
 
  def make_bitmap_title_sprite
    @title_sprite.bitmap = Bitmap.new(100,Font.default_size)
    @title_length = @title_sprite.bitmap.text_size(@current_title).width
    @title_sprite.bitmap = Bitmap.new(@title_length,Font.default_size)
    @title_sprite.x = Graphics.width/2 - @title_sprite.width/2
    @title_sprite.y = 2
    @title_sprite.z = 5
  end
 
  def update_y_commands_sprite
    if @progression_level != 0
      if @cursor.y > Graphics.height/2 - @cursor.height/2 and Input.trigger?(Input::DOWN)
        @commands_sprite.y -= Font.default_size+@space
      end
      if @cursor.y > Graphics.height/2 - @cursor.height/2 and Input.trigger?(Input::UP)
        if @commands_sprite.y != @title_sprite.y + @title_sprite.height + 10
          @commands_sprite.y += Font.default_size+@space
        end
      end
    end
  end
 
  def make_bitmap_commands_sprite
    @height = @commands.size * Font.default_size + @space*(@current_commands_list.size-1)
   
    @commands_sprite.bitmap = Bitmap.new(100,@height)
   
    for i in 0..@current_commands_list.size-1
      if @commands_sprite.bitmap.text_size(@current_commands_list[i]).width > @length
        @length = @commands_sprite.bitmap.text_size(@current_commands_list[i]).width
      end
    end
             
    @commands_sprite.bitmap = Bitmap.new(@length,@height)
    @commands_sprite.x = Graphics.width/2 - @commands_sprite.width/2
    @commands_sprite.y = @title_sprite.y + @title_sprite.height + 10
  end
 
  def update_title
    @title_sprite.bitmap.clear
    make_bitmap_title_sprite
    @title_sprite.bitmap.draw_text(0,0,@title_length,Font.default_size,@current_title)
  end
 
  def update_info
    if @progression_level < 1
      @info_sprite.bitmap.clear
      remake_bitmap_info_sprite
      @info_sprite.bitmap.draw_text(0,0,@info_length,Font.default_size,@current_infos_list[@current_command])
    end
  end
 
  def remake_bitmap_info_sprite
    @info_length = @info_sprite.bitmap.text_size(@current_infos_list[@current_command]).width
    @info_sprite.bitmap = Bitmap.new(@info_length,Font.default_size)
    @info_sprite.x = Graphics.width/2 - @info_sprite.width/2
    @info_sprite.y = @commands_sprite.y + @commands_sprite.height + 10
    @info_sprite.z = 5
  end
 
  def update_commands_list(list)
    @commands_sprite.bitmap.clear
    for i in 0..list.size-1
      @commands_sprite.bitmap.draw_text(0,i*Font.default_size+@space,@length,Font.default_size,list[i])
    end
  end
 
  def update_current_command
    if Input.trigger?(Input::UP) and @current_command > 0
      @current_command -= 1
    end
   
    if Input.trigger?(Input::DOWN) and @current_command < @current_commands_list.size-1
      @current_command += 1
    end
  end
 
  def update_validation_command
    if Input.trigger?(Input::C)
      @progression_level += 1
      if @progression_level == 1
        @current_title = @titles[@current_command+1]
        @current_commands_list = @lists[@current_command]
      end
      refresh
    end
  end
 
  def update_quit_command
    if Input.trigger?(Input::B)
      @progression_level -=1
      if @progression_level == 0
        @current_title = @titles[0]
        @current_commands_list = @commands
      end
      refresh
    end
  end
 
  def refresh
    @current_infos_list = @infos
    @current_command = 0
    update_title
    update_info
    make_bitmap_commands_sprite
    update_commands_list(@current_commands_list)
    refresh_cursor
    @info_sprite.bitmap.clear
  end
 
  def refresh_cursor
    @cursor.y = @commands_sprite.y
  end
 
  def update_cursor
    @cursor.x = @commands_sprite.x - @cursor.width - 2
    if @cursor.y <= Graphics.height/2 - @cursor.height/2 or @commands_sprite.y == @title_sprite.y + @title_sprite.height + 10
      @cursor.y = @commands_sprite.y + @current_command*Font.default_size + @space*@current_command
    end
    @cursor.angle -= 3
  end
 
  def dispose
    @title_sprite.dispose
    @commands_sprite.dispose
  end
 
end

Posté par Pαlвσlѕку le 1 Jan - 12:25 (2015)
Citation:
Au passage, j'ai aussi un problème avec mon curseur qui ne s'affiche pas bien en face de l'objet, plus je descend et plus il est excentré, pourtant ma formule de calcul des y semblent correcte...

C'est ton curseur qui n'est plus en face de la liste, ou ta liste qui se décale ?

PS : Je n'ai pas trop eu le temps de lire ton code donc excuse moi si mon idée est à coté de la plaque, surtout que je ne suis pas au top ce matin. :p

Posté par Zohran le 1 Jan - 12:30 (2015)
C'est mon curseur qui n'est pas bien en face en Y

Faut dormir la nuit ! 42

Posté par Nuri Yuri le 1 Jan - 12:34 (2015)
Là aujourd'hui j'ai un peu la flemme de réfléchir à ton problème. Mais j'avais déjà programmé un système d'édition de BDD assez costaux sur le RGSS et je sais par expérience que c'est un peu chiant...
Je te proposerais un truc assez simple pour ton SK, tu dois certainement savoir que Pokémon SDK c'est pas que un Starter Kit, je développe des outils à coté pour éditer la BDD, celui que l'on a actuellement c'est Ruby Host. Qu'est-ce que c'est ?
Un exécutable qui lance Ruby 2.1.5 (bientot Ruby 2.2.0 je vais faire l'update), dans l'exécutable il y a les fenêtre sous forme de Dialog et on utilise l'API de Windows pour faire dialoguer les fenêtre qui forment l'éditeur et Ruby qui permet l'édition des fichiers en toute simplicité. Même mieux, Ruby permet de gérer les interaction avec les fenêtre par le biais d'un définition de singleton method qui agissent comme si tu écrivais un WND Proc en C++, sauf que c'est géré en Ruby (ce qui permet l'édition facile de la chose).

Si t'es pas contre ce genre d'outil, je pourrais te passer une version et t'expliquer comment cela fonctionne en détail pour que tu puisse faire ce qu'il faut pour l'édition de ton SK.

Posté par Zohran le 1 Jan - 12:38 (2015)
Nuri Yuri a écrit:
Là aujourd'hui j'ai un peu la flemme de réfléchir à ton problème. Mais j'avais déjà programmé un système d'édition de BDD assez costaux sur le RGSS et je sais par expérience que c'est un peu chiant...
Je te proposerais un truc assez simple pour ton SK, tu dois certainement savoir que Pokémon SDK c'est pas que un Starter Kit, je développe des outils à coté pour éditer la BDD, celui que l'on a actuellement c'est Ruby Host. Qu'est-ce que c'est ?
Un exécutable qui lance Ruby 2.1.5 (bientot Ruby 2.2.0 je vais faire l'update), dans l'exécutable il y a les fenêtre sous forme de Dialog et on utilise l'API de Windows pour faire dialoguer les fenêtre qui forment l'éditeur et Ruby qui permet l'édition des fichiers en toute simplicité. Même mieux, Ruby permet de gérer les interaction avec les fenêtre par le biais d'un définition de singleton method qui agissent comme si tu écrivais un WND Proc en C++, sauf que c'est géré en Ruby (ce qui permet l'édition facile de la chose).

Si t'es pas contre ce genre d'outil, je pourrais te passer une version et t'expliquer comment cela fonctionne en détail pour que tu puisse faire ce qu'il faut pour l'édition de ton SK.


NINJA POWA !
Bah écoute, c'est très gentil, merci. Tu penses que je saurais m'en servir? Scooby-doo

Posté par Nuri Yuri le 1 Jan - 12:54 (2015)
Palb' a modifié réussi à modifier l'affichage du vérificateur d'évolution donc pourquoi tu n'arriverais pas à l'utiliser :d
Cela dit, faudra attendre un peu avant que je l'envoie avec la documentation (je dois construire le site de PSP/CSP avant x)).

(Sinon dans l'update du cursor, si tu fais juste @cursor.y = @commands_sprite.y ça devrait pas fonctionner ?)

Posté par Zohran le 1 Jan - 23:10 (2015)
Nuri Yuri a écrit:
Palb' a modifié réussi à modifier l'affichage du vérificateur d'évolution donc pourquoi tu n'arriverais pas à l'utiliser :d
Cela dit, faudra attendre un peu avant que je l'envoie avec la documentation (je dois construire le site de PSP/CSP avant x)).

(Sinon dans l'update du cursor, si tu fais juste @cursor.y = @commands_sprite.y ça devrait pas fonctionner ?)

Nan, ce n'est pas ça, c'est sûr.

J'ai mis à jour le poste de mon script (j'ai réglé quelques bugs. Mais le problème d'affichage des listes persistent, si quelqu'un pouvait trouver une solution à ce bug, ça m'intéresserait Lord teatime

Voulez-vous un lien vers une démo jouable pour déboguer ?

Posté par Pαlвσlѕку le 1 Jan - 23:13 (2015)
Un lien vers une démo jouable serait le mieux je pense, on gagnerait du temps.

Envoie moi le lien, si ne je trouve pas de solutions je le renverrais à Yuri.

Posté par Zohran le 1 Jan - 23:20 (2015)
Pαlвσlѕку a écrit:
Un lien vers une démo jouable serait le mieux je pense, on gagnerait du temps.

Envoie moi le lien, si ne je trouve pas de solutions je le renverrais à Yuri.

Ok, j'upload ça et je te l'envoie dans la soirée, merci.

C'est sous RMVX ACE. Imbécile heureux

Posté par Pαlвσlѕку le 1 Jan - 23:21 (2015)
Tu as oublié les joies du humble bundle ? J'ai RMXP et RMVX ACE. Gros matou qui ronronne

Posté par Zohran le 1 Jan - 23:22 (2015)
42 Nan nan, j'ai pas oublié 42