Sujet n°12274
Posté par Ray' le 22 Déc - 17:12 (2012)
Titre : Problème de Ruby
Bonjour à tous.
J'aurais besoin d'aide car je suis en train de modifier l'interface de combat de mon projet.
En réalité, le problème se pose surtout pour l'ensemble actor_status (hp bar, nom du pokémon, level, etc...), que je n'arrive pas à déplacer (la position que je souhaite est vraiment différente de la position de base dans battle_core 1).
J'avais d'abord recherché les coordonnées de chacun des éléments individuellement, mais sans succès. De plus, je n'en trouve aucune qui pourraient correspondre. Je pense donc qui les éléments de cet ensemble sont placées selon leurs positions par rapport aux autres et que la position de l'ensemble lui-même est définie par rapport à la position des chacun des éléments...
C'est un peu ambigu, mais en définitive je souhaite juste modifier la taille de l'ensemble (sans conserver les proportions) et la position des éléments, or mes rares connaissances en ruby ne me permettent que de placer des images ou des éléments NORMALEMENT (ayant tenté de modifier le script par moi-même ou ajouter des éléments, je me retrouve avec un actor_status en dehors de l'écran, mais ce n'est pas vraiment un problème dans le sens où je peux toujours retrouver le script d'origine).
Donc voilà, j'espère que quelqu'un pourra m'aider, et si vous voulez des précisions en plus ou même un schéma de mes idées, n'hésitez pas .

Posté par Opale le 26 Déc - 18:56 (2012)
Tu peux gérer tout ça ligne 2827 pour l'adversaire et 2829 pour le joueur je crois.

Posté par Ray' le 29 Déc - 19:09 (2012)
Apparemment ce sont à ces lignes que se gèrent les coordonnées de l'ensemble, mais je cherche surtout à modifier la position de chacun des éléments individuellement ^^.

Posté par Opale le 29 Déc - 20:17 (2012)
Dans la classe Pokemon_Battle_Status, dans refresh, tu as tout ! Ça se situe dans Battle_Core_1.
(Les lignes que je t'ai donné sont dans la classe.)

Posté par Ray' le 8 Fév - 19:59 (2013)
Oh, merci :p.
J'ai essayé de modifier le refresh, mais malgré les bonnes coordonnées, la fenêtre "Pokemon_Battle_Status" est toujours décalée de 141 pixels vers la droite, c'est-à-dire la moitié de la largeur de la fenêtre de jeu (et elle est aussi un peu trop basse).
Et si je met -141 en abscisse pour le bitmap (qui est aussi grande que la fenêtre), l'image est coupée jusqu'à 141 pixels...

EDIT : Même en m'étant plus renseigné sur le ruby, je ne comprends toujours pas ce décallage...

Posté par Sphinx le 9 Fév - 05:04 (2013)
Et si tu soustrais 141px de ta coordonnée x actuelle ?

Posté par Pαlвσlѕку le 9 Fév - 09:41 (2013)
Dans le script des combats, il y a des fenêtres dans des fenêtres, d'où la difficulté de déplacer quelque chose : si tu déplaces la fenêtre fille mais pas la fenêtre mère tu te retrouves avec des sprites coupés.
Le problème dans tout ça c'est que je ne me souviens plus du tout où sont codées ces fenêtres.

Posté par Ray' le 9 Fév - 11:50 (2013)
Sphinx a écrit:
Et si tu soustrais 141px de ta coordonnée x actuelle ?


Non, j'ai essayé, mais l'image est bien placée en fait, c'est juste qu'elle est coupée à gauche de 141 pixels (par contre elle est aussi un peu décalée vers le bas mais à la limite c'est le truc que je comprends pas qui me gêne le moins pour l'instant ._.).

Pαlвσlѕку a écrit:
Dans le script des combats, il y a des fenêtres dans des fenêtres, d'où la difficulté de déplacer quelque chose : si tu déplaces la fenêtre fille mais pas la fenêtre mère tu te retrouves avec des sprites coupés.
Le problème dans tout ça c'est que je ne me souviens plus du tout où sont codées ces fenêtres.


Code:
 
class Pokemon_Battle_Status < Window_Base
    def initialize(pokemon, enemy, z_level = 15)
      @enemy = enemy # True / False
      if @enemy
        super(0,0,282,432)
      else
        super(0,0,282,432)
      end
      self.contents = Bitmap.new(width, height)     
      self.contents.font.size = $fontsmallsize     
      self.opacity = 0
      self.z = z_level
      @pokemon = pokemon     
      refresh
    end


J'ai mis toutes les fenêtres que j'ai vu à la taille de la fenêtre de jeu (282, 432) mais je pense pas les avoir toutes trouvées (pour l'instant je me concentre sur la "fenêtre" du Pokémon de l'équipe.
D'après ce que j'ai compris, dans la classe Pokemon_Battle_Status (qui hérite ses propriétés de Window_base), deux fenêtres sont créées : une pour l'ennemi (avec la variable @enemy vraie), et une pour le Pokémon du héros (avec @enemy fausse).

Code:
     
else
        src_rect = Rect.new(0, 0, 282, 432)
        @hpbar_actor = Sprite.new
        @hpbar_actor.x = 0
        @hpbar_actor.y = 0
        bitmap = RPG::Cache.picture("battle_sprite2.png")
        self.contents.blt(0, 0, bitmap, src_rect, 255)
        draw_hp_bar(203,185, level)
        self.contents.font.name = "Pokemon BW Battle"
        self.contents.font.size = 9
        draw_text_battle(26, 193, 249, $fs, @pokemon.given_name)
        self.contents.font.name = "Pokemon Platine Special"
        self.contents.font.size = 6
        draw_text_battle(154, 192, 249, $fs, "N." + @pokemon.level.to_s)
        string = @pokemon.hp < 0 ? 0 : @pokemon.hp
        draw_text_battle(-24, 197, 233, $fs, string.to_s + "/" + @pokemon.maxhp_basis.to_s, 1)
        if @pokemon.level < MAX_LEVEL
          level = @pokemon.next_exp.to_f /
            (@pokemon.exp_list[@pokemon.level+1] - @pokemon.exp_list[@pokemon.level]).to_f
        else
          level = 96
        end
        draw_exp_bar(171, 178, 1.0 - level, 96)
       
        width_text = self.contents.text_size(@pokemon.given_name).width + 3
        draw_gender(17, 191, @pokemon.gender)
        if @pokemon.status != 0
          string = "stat" + @pokemon.status.to_s + ".png"
          src_rect = Rect.new(0, 0, 60, 24)
          bitmap = RPG::Cache.picture(string)
          self.contents.blt(0, 0, bitmap, src_rect, 255)
        end
      end


Ici on a le contenu de la fenêtre du héros. Donc normalement un rectangle de la taille de la fenêtre est créé pour "couper" et afficher battle_sprite2 (l'image de la fenêtre de statut du Pokémon de l'équipe), sachant que le rectangle est l'image font la même taille.

Donc je ne comprends pas pourquoi ça ne marche pas (ceci dit j'ai peut être mal interprété quelque chose, ou alors je suis totalement à côté de la plaque niveau ruby ^^). Sinon si vous voulez je vous fait un schéma, pour mieux visualiser.
En tout cas merci pour vos réponses Clin d'œil foireux.

Posté par og_loc-TATOO le 9 Fév - 18:22 (2013)
Si tu faisais un screen test ?
Ce serai plus facile pour t'aider, en plus je crois que j'ai eu le même problème, et que Opale avait réussi à corriger.

Posté par Nuri Yuri le 9 Fév - 22:20 (2013)
Solution : Sprites *fuit*
Le problème a été évoqué par Palb' en partie, fenêtre dans fenêtre et mère mal déplacée. Regarde sur cette piste.

Posté par Ray' le 16 Fév - 19:30 (2013)
Citation:
Solution : Sprites *fuit*


Hein ? x)
Vu que tout semble être contenu dans la classe Pokemon_Battle_Satus, je pense que le problème réside dans ce bout de script uniquement (2823, 2975), or je n'en voit aucun T-T.
Il y a des lignes que je ne comprends pas, mais vu qu'elles ne contiennent aucune coordonnées...
Sinon Og je te ferait bien une capture d'écran mais on ne voit même plus la barre de PV.

Sinon Yuri, de quelles fenêtres tu parles (j'en ai vu qu'une mais là est peut être le problème) ?

Posté par Nuri Yuri le 16 Fév - 20:04 (2013)
Je ne sais pas trop... Dans des cas comme ça je préfère coder mon interface plutôt que de me les casser à comprendre le fonctionnement d'une autre surtout quand elle est basé sur les Window...

Posté par Ray' le 16 Fév - 23:20 (2013)
Bah j'avais pensé à changer un peu la structure de ce bout de script, mais ça risque de bouleverser tout le reste, non (d'autant que Battle_core n'est pas le plus simple...) ?
En fait je me demande surtout si la modification d'une classe (ici Pokemon_Battle_Status) peut entraîner des modifications dans d'autres classes, ou si tout est isolé.

Edit : En fait l'image n'est pas coupée, mais juste décalée de 141 pixels (soit la moitié de la largeur de la fenêtre) vers la droite, et je suis presque sûr que c'est à cause de l'animation lors de l'apparition de la fenêtre de statut de l'actor (elle apparaît à droite en dehors de l'écran et "glisse" vers la gauche).
Problème, je ne sais pas où se règle cette animation dans le script.
Le nom de l'objet est actor_status :

Code:
 @actor_status = Pokemon_Battle_Status.new(@actor, false, @z_level + 15)


EDIT 2 : En fait, j'ai fini par trouver d'où venait le problème (c'est la fenêtre status qui fait ch*er), et j'ai réussi à bien placer tous les éléments.
Par contre en testant le tout, lorsque je met KO le Pokémon adverse, la scène se bloque (ce n'est pas un bug vu que la musique tourne encore) avant l'augmentation de l'expérience, et il faut redémarrer le tout...

*fuit*