Sujet n°14377
Posté par Zohran le 21 Jan - 18:49 (2015)
Titre : Aide PMP - Script de combat[résolu]
Bonjour, voilà je commence à attaquer le script de combat actuellement. Jusque là tout s'affichait correctement. Puis je me suis dis que je pourrais créer une condition qui afficherait un GIF si le fichier existe sinon, il chargerait une image normal. Bah depuis que j'ai créé la condition, si il n'y a pas de gif, l'image s'affiche bien, mais si j'ai un gif, bah il s'affiche pas... Pourquoi?

CODE:
(c'est encore très sommaire, c'est même à l'état embryonnaire)
Code:
class Battle
 
  def initialize(enemy,player_ground_name,enemy_ground_name,background_name,sky,caught_training=false,safari_mode=false)
    @enemy = enemy
    @weather = $game_map.weather
    @player_ground_name = player_ground_name.to_s
    @enemy_ground_name = enemy_ground_name.to_s
    @background_name = background_name.to_s
    @sky = sky
    @caught_training = caught_training
    @safari_mode = safari_mode
    @group_battle = enemy.is_a?(Group)
   
    case @group_battle
    when true
      @enemy.type == 0 ? @trainer_battle = false : @trainer_battle = true
    when false
      @trainer_battle = @enemy.is_a?(Trainer)
    end
  end
 
  def main
    @enemys_bonus_states = []
    @players_bonus_states = []
   
    Audio.bgm_play(Directory.battle_music+"Combat Pokémon XY",100)
    Audio.me_play(Directory.battle_music+"Pré-Combat Pokémon XY")
   
    @background = Sprite.new
    @background.bitmap = Bitmap.new(Directory.background+@background_name)
    @background.z = 0
   
    @enemy_ground = Sprite.new
    @enemy_ground.bitmap = Bitmap.new(Directory.ground+@enemy_ground_name+"enemy")
    @enemy_ground.x = @background.bitmap.width - @enemy_ground.bitmap.width + 11
    @enemy_ground.y = 100
    @enemy_ground.z = 1
   
    case FileTest.exist?(@enemy.face+".gif")
    when true
      @enemy_sprite = GifSprite.new(@enemy.face+".gif")
    when false
      @enemy_sprite = Sprite.new
      @enemy_sprite.bitmap = Bitmap.new(@enemy.face)
    end
    @enemy_sprite.x = @enemy_ground.x + @enemy_ground.bitmap.width/2 - @enemy_sprite.bitmap.width/2
    @enemy_sprite.y = @enemy_ground.y + @enemy_ground.bitmap.height/2 - @enemy_sprite.bitmap.height
    @enemy_sprite.z = 2
   
    @player_ground = Sprite.new
    @player_ground.bitmap = Bitmap.new(Directory.ground+@player_ground_name)
    @player_ground.x = -68
    @player_ground.y = @background.bitmap.height - @player_ground.bitmap.height/2
    @player_ground.z = 3
   
    case FileTest.exist?($player.team[0].back+".gif")
    when true
      @player_sprite = GifSprite.new($player.team[0].back+".gif")
    when false
      @player_sprite = Sprite.new
      @player_sprite.bitmap = Bitmap.new($player.team[0].back)
    end
    @player_sprite.zoom_x = @player_sprite.zoom_y = 2
    @player_sprite.x = @player_ground.x + @player_ground.bitmap.width/2 - @player_sprite.bitmap.width/2 * @player_sprite.zoom_x
    @player_sprite.y = @player_ground.y + @player_ground.bitmap.height/2 - @player_sprite.bitmap.height * @player_sprite.zoom_y+50
    @player_sprite.z = 4
   
    show_text(Vocabulary.waiting_sentence(0,$player.team[0]))
   
    Graphics.transition

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

    Graphics.freeze

    dispose
    Audio.me_stop
  end
 
  def update
    if Input.trigger?(Input::B)
      $scene = SceneMap.new
      $game_map.autoplay
    end
    @enemy_sprite.update
    @player_sprite.update
  end
 
  def show_text(texts)
    @message_text_length = 0
    @space = 2
   
    @message_text = Sprite.new
    @message_text.bitmap = Bitmap.new(Directory.battle+"Fond Message")
    @message_text.y = @background.bitmap.height - @message_text.bitmap.height
    @message_text.z = 5
   
    case texts.is_a?(Array)
    when true
      texts.size.times do |i|
        if @message_text.bitmap.text_size(texts[i]).width > @message_text_length
          @message_text_length = @message_text.bitmap.text_size(texts[i]).width
        end
      end
     
      texts.size.times do |i|
        @message_text.bitmap.draw_text(0,i*Font.default_size+@space,@message_text_length,Font.default_size,texts[i])
      end
    when false
      @message_text_length = @message_text.bitmap.text_size(texts).width
      @message_text.bitmap.draw_text(16,12,@message_text_length,Font.default_size,texts)
    end
  end
 
  def erase_text
    @message_text.dispose
  end
 
  def refresh
   
  end
 
  def dispose
    @background.dispose
    @enemy_ground.dispose
    @enemy_sprite.dispose
    @player_ground.dispose
    @player_sprite.dispose
    erase_text
  end
 
end

Posté par Nuri Yuri le 21 Jan - 20:47 (2015)
Franchement on pourra pas beaucoup t'aider, je dis à tout le monde de ne pas utiliser ce lecteur complètement buggué et dangereux pour la santé des disque dur donc si t'espère trouver une aide quelconque là dessus x)

Regarde dans la corps de GifSprite si la méthode update est bien appelée x)

Posté par Zohran le 21 Jan - 20:54 (2015)
x) J'avoue ce lecteur est gavant, en plus il peut y avoir des bugs d'affichage x)

Tu sais pas sinon si on peut avoir des pixels art de tous les pokémon (6G compris) ?

Posté par Nuri Yuri le 21 Jan - 20:57 (2015)
On peut. Schneitizel m'en a récupéré pas mal (back inclus).

Posté par Zohran le 21 Jan - 20:58 (2015)
Le pack est téléchargeable?

Posté par Nuri Yuri le 21 Jan - 21:44 (2015)
Nope, faudra trouver les images et tout découper à la main x)
Pour l'instant j'ai pas l'autorisation de diffuser ces ressources ^^

Posté par Pαlвσlѕку le 21 Jan - 22:43 (2015)
Zohran a écrit:
x) J'avoue ce lecteur est gavant, en plus il peut y avoir des bugs d'affichage x)

Tu sais pas sinon si on peut avoir des pixels art de tous les pokémon (6G compris) ?

La dll est buguée, les problèmes graphiques viennent de là.
De plus, comme l'a souligné Yuri, j'ai découvert lors de mes tentatives pour le corriger que le script écrivait l'ensemble des frames qui composent le gif dans le dossier temporaire de Windows. Bien qu'elles soient supprimés par la suite, ça fait écriture sur le disque, c'est pas terrible niveau performance et de plus ça use prématurément nos disques durs.

Ce script est à bannir, le bug présent dans la dll ne peut être résolu sans le code source. Si la dll avait pu être débugué, j'aurais pu réécrire proprement le script pour éviter l'écriture sur le disque (et donc faire toutes les opérations en mémoire).