Sujet n°11090
Posté par Renkys le 4 Mar - 22:40 (2012)
Titre : Afficher les pokemon de l'équipe.
Bonjour, en parcourant le forum, je suis tombé sur un script de : Nagato Yuki 
Celui sert à affichier les 6 pokemon de l'équipe.
Bref, j'ai donc installer le script, le voici:
Script
Code:
class New_Interface
  include POKEMON_S   
  def initialize  
    tmp_coor=[32,0,64,0,96,0,128,0,160,0,192,0]  
    @sprites=[]  
    for i in 0...6  
      @sprites[i]=Sprite.new  
      @sprites[i].bitmap=Bitmap.new(32,32)  
      @sprites[i].x=tmp_coor[i*2]  
      @sprites[i].y=tmp_coor[i*2+1]  
      @sprites[i].z=1000  
    end  
    @rect=Rect.new(0,0,32,32)  
  end 
  def dispose  
  for i in 0...6  
    @sprites[i].bitmap.dispose  
    @sprites[i].dispose  
  end  
end
  def refresh
    for i in 0...6  
      @sprites[i].bitmap.clear  
      if $pokemon_party.actors[i]  
        bmp=RPG::Cache.character(sprintf("pkm %03d.png",$pokemon_party.actors[i].id),0)  
        @sprites[i].bitmap.blt(0,0,bmp,@rect)  
      end  
    end  
  end  
end






Maintenant pour le faire fonctionner, je dois appeler le script.
J'ai donc mis : ligne ajoutée à la ligne: 18 (script: Scene_Map, le premier)
Code
Code:
#==============================================================================  
# ■ Scene_Map  
#------------------------------------------------------------------------------  
#  マップ画面の処理を行うクラスです。  
#==============================================================================  
  
class Scene_Map  
  #--------------------------------------------------------------------------  
  # ● メイン処理  
  #--------------------------------------------------------------------------  
  def main  
    # スプライトセットを作成  
    @spriteset = Spriteset_Map.new
    # メッセージウィンドウを作成  
    @message_window = Window_Message.new  
    @interface = Interface_Echap.new if $game_map.map_id != POKEMON_S::MAPSCENA 
    @button_red = Bouton_Rouge.new
    @interface = New_Interface.new
    # トランジション実行  
    Graphics.transition  
    # メインループ  
    loop do  
      # ゲーム画面を更新  
      Graphics.update  
      # 入力情報を更新  
      Input.update          
      update        
      @interface = Interface_Echap.new if @interface.nil? and $game_map.map_id != POKEMON_S::MAPSCENA 
      @interface.refresh if not @interface.nil?
      @button_red.refresh
      # 画面が切り替わったらループを中断  
      if $scene != self  
        break  
      end  
    end 






Et dans la def update ceci: ligne ajoutée à la ligne 26. (script: Scene_Map, le premier)
Code
Code:
def update  
    # ループ  
    loop do  
      # マップ、インタプリタ、プレイヤーの順に更新  
      # (この更新順序は、イベントを実行する条件が満たされているときに  
      #  プレイヤーに一瞬移動する機会を与えないなどの理由で重要)
      $game_map.update  
      $game_system.map_interpreter.update  
      $game_player.update  
      # システム (タイマー)、画面を更新  
      $game_system.update  
      $game_screen.update  
      # プレイヤーの場所移動中でなければループを中断  
      unless $game_temp.player_transferring  
        break  
      end  
      # 場所移動を実行  
      transfer_player  
      # トランジション処理中の場合、ループを中断  
      if $game_temp.transition_processing  
        break  
      end  
    end  
    # スプライトセットを更新  
    @spriteset.update
    @interface.refresh
    # メッセージウィンドウを更新  
    @message_window.update  
    # ゲームオーバーの場合  
    if $game_temp.gameover  
      # ゲームオーバー画面に切り替え  
      $scene = Scene_Gameover.new  
      return  
    end






Seulement j'ai un petit bug, il suffit que je fasse quelques pas et mon menu disparaît. Il me suffit de cliquer sur "x" pour que celui ci réapparaisse mais bon, c'est assez gênant.



Voici au cas ou, mon script Scene_Map:
Script
Code:
#==============================================================================  
# ■ Scene_Map  
#------------------------------------------------------------------------------  
#  マップ画面の処理を行うクラスです。  
#==============================================================================  
  
class Scene_Map  
  #--------------------------------------------------------------------------  
  # ● メイン処理  
  #--------------------------------------------------------------------------  
  def main  
    # スプライトセットを作成  
    @spriteset = Spriteset_Map.new
    # メッセージウィンドウを作成  
    @message_window = Window_Message.new  
    @interface = Interface_Echap.new if $game_map.map_id != POKEMON_S::MAPSCENA 
    @button_red = Bouton_Rouge.new
    @interface = New_Interface.new
    # トランジション実行  
    Graphics.transition  
    # メインループ  
    loop do  
      # ゲーム画面を更新  
      Graphics.update  
      # 入力情報を更新  
      Input.update          
      update        
      @interface = Interface_Echap.new if @interface.nil? and $game_map.map_id != POKEMON_S::MAPSCENA 
      @interface.refresh if not @interface.nil?
      @button_red.refresh
      # 画面が切り替わったらループを中断  
      if $scene != self  
        break  
      end  
    end  
    # トランジション準備  
    Graphics.freeze  
    # スプライトセットを解放  
    @spriteset.dispose  
    @interface.dispose if $game_map.map_id != POKEMON_S::MAPSCENA  
    @button_red.dispose 
    # メッセージウィンドウを解放  
    @message_window.dispose     
    if $scene.is_a?(Scene_Title)  
      # 画面をフェードアウト  
      Graphics.transition  
      Graphics.freeze  
    end  
  end  
  #--------------------------------------------------------------------------  
  # ● フレーム更新  
  #--------------------------------------------------------------------------  
  def update  
    # ループ  
    loop do  
      # マップ、インタプリタ、プレイヤーの順に更新  
      # (この更新順序は、イベントを実行する条件が満たされているときに  
      #  プレイヤーに一瞬移動する機会を与えないなどの理由で重要)
      $game_map.update  
      $game_system.map_interpreter.update  
      $game_player.update  
      # システム (タイマー)、画面を更新  
      $game_system.update  
      $game_screen.update  
      # プレイヤーの場所移動中でなければループを中断  
      unless $game_temp.player_transferring  
        break  
      end  
      # 場所移動を実行  
      transfer_player  
      # トランジション処理中の場合、ループを中断  
      if $game_temp.transition_processing  
        break  
      end  
    end  
    # スプライトセットを更新  
    @spriteset.update
    @interface.refresh
    # メッセージウィンドウを更新  
    @message_window.update  
    # ゲームオーバーの場合  
    if $game_temp.gameover  
      # ゲームオーバー画面に切り替え  
      $scene = Scene_Gameover.new  
      return  
    end  
    # タイトル画面に戻す場合  
    if $game_temp.to_title  
      # タイトル画面に切り替え  
      $scene = Scene_Title.new  
      return  
    end  
    # トランジション処理中の場合  
    if $game_temp.transition_processing  
      # トランジション処理中フラグをクリア  
      $game_temp.transition_processing = false  
      # トランジション実行  
      if $game_temp.transition_name == ""  
        Graphics.transition(20)  
      else  
        Graphics.transition(40, "Graphics/Transitions/" +  
          $game_temp.transition_name)  
      end  
    end  
    # メッセージウィンドウ表示中の場合  
    if $game_temp.message_window_showing  
      return  
    end  
    # エンカウント カウントが 0 で、エンカウントリストが空ではない場合  
    if $game_player.encounter_count == 0 and $game_map.encounter_list != []  
      # イベント実行中かエンカウント禁止中でなければ  
      unless $game_system.map_interpreter.running? or  
             $game_system.encounter_disabled  
        # トループを決定  
        n = rand($game_map.encounter_list.size)  
        troop_id = $game_map.encounter_list[n]  
        # トループが有効なら  
        if $data_troops[troop_id] != nil  
          # バトル呼び出しフラグをセット  
          $game_temp.battle_calling = true  
          $game_temp.battle_troop_id = troop_id  
          $game_temp.battle_can_escape = true  
          $game_temp.battle_can_lose = false  
          $game_temp.battle_proc = nil  
        end  
      end  
    end  
    # B ボタンが押された場合  
    if Input.trigger?(Input::B)  
      # イベント実行中かメニュー禁止中でなければ  
      unless $game_system.map_interpreter.running? or  
             $game_system.menu_disabled  
        # メニュー呼び出しフラグと SE 演奏フラグをセット  
        $game_temp.menu_calling = true  
        $game_temp.menu_beep = true  
      end  
    end  
    # デバッグモードが ON かつ F9 キーが押されている場合  
    if $DEBUG and Input.press?(Input::F9)  
      # デバッグ呼び出しフラグをセット  
      $game_temp.debug_calling = true  
    end  
    # プレイヤーの移動中ではない場合  
    unless $game_player.moving?  
      # 各種画面の呼び出しを実行  
      if $game_temp.battle_calling  
        call_battle  
      elsif $game_temp.shop_calling  
        call_shop  
      elsif $game_temp.name_calling  
        call_name  
      elsif $game_temp.menu_calling  
        call_menu  
      elsif $game_temp.save_calling  
        call_save  
      elsif $game_temp.debug_calling  
        call_debug  
      end  
    end  
  end  
  #--------------------------------------------------------------------------  
  # ● バトルの呼び出し  
  #--------------------------------------------------------------------------  
  def call_battle  
    # バトル呼び出しフラグをクリア  
    $game_temp.battle_calling = false  
    # メニュー呼び出しフラグをクリア  
    $game_temp.menu_calling = false  
    $game_temp.menu_beep = false  
    # エンカウント カウントを作成  
    $game_player.make_encounter_count  
    # マップ BGM を記憶し、BGM を停止  
    $game_temp.map_bgm = $game_system.playing_bgm  
    $game_system.bgm_stop  
    # バトル開始 SE を演奏  
    $game_system.se_play($data_system.battle_start_se)  
    # バトル BGM を演奏  
    $game_system.bgm_play($game_system.battle_bgm)  
    # プレイヤーの姿勢を矯正  
    $game_player.straighten  
    # バトル画面に切り替え  
    $scene = Scene_Battle.new  
  end  
  #--------------------------------------------------------------------------  
  # ● ショップの呼び出し  
  #--------------------------------------------------------------------------  
  def call_shop  
    # ショップ呼び出しフラグをクリア  
    $game_temp.shop_calling = false  
    # プレイヤーの姿勢を矯正  
    $game_player.straighten  
    # ショップ画面に切り替え  
    $scene = Scene_Shop.new  
  end  
  #--------------------------------------------------------------------------  
  # ● 名前入力の呼び出し  
  #--------------------------------------------------------------------------  
  def call_name  
    # 名前入力呼び出しフラグをクリア  
    $game_temp.name_calling = false  
    # プレイヤーの姿勢を矯正  
    $game_player.straighten  
    # 名前入力画面に切り替え  
    $scene = Scene_Name.new  
  end  
  #--------------------------------------------------------------------------  
  # ● メニューの呼び出し  
  #--------------------------------------------------------------------------  
  def call_menu  
    # メニュー呼び出しフラグをクリア  
    $game_temp.menu_calling = false  
    # メニュー SE 演奏フラグがセットされている場合  
    if $game_temp.menu_beep  
      # 決定 SE を演奏  
      $game_system.se_play($data_system.decision_se)  
      # メニュー SE 演奏フラグをクリア  
      $game_temp.menu_beep = false  
    end  
    # プレイヤーの姿勢を矯正  
    $game_player.straighten  
    # メニュー画面に切り替え  
    $scene = Scene_Menu.new  
  end  
  #--------------------------------------------------------------------------  
  # ● セーブの呼び出し  
  #--------------------------------------------------------------------------  
  def call_save  
    # プレイヤーの姿勢を矯正  
    $game_player.straighten  
    # セーブ画面に切り替え  
    $scene = Scene_Save.new  
  end  
  #--------------------------------------------------------------------------  
  # ● デバッグの呼び出し  
  #--------------------------------------------------------------------------  
  def call_debug  
    # デバッグ呼び出しフラグをクリア  
    $game_temp.debug_calling = false  
    # 決定 SE を演奏  
    $game_system.se_play($data_system.decision_se)  
    # プレイヤーの姿勢を矯正  
    $game_player.straighten  
    # デバッグ画面に切り替え  
    $scene = Scene_Debug.new  
  end  
  #--------------------------------------------------------------------------  
  # ● プレイヤーの場所移動  
  #--------------------------------------------------------------------------  
  def transfer_player  
    # プレイヤー場所移動フラグをクリア  
    $game_temp.player_transferring = false  
    # 移動先が現在のマップと異なる場合  
    if $game_map.map_id != $game_temp.player_new_map_id  
      # 新しいマップをセットアップ  
      $game_map.setup($game_temp.player_new_map_id)  
    end  
    # プレイヤーの位置を設定  
    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)  
    # プレイヤーの向きを設定  
    case $game_temp.player_new_direction  
    when 2  # 下  
      $game_player.turn_down  
    when 4  # 左  
      $game_player.turn_left  
    when 6  # 右  
      $game_player.turn_right  
    when 8  # 上  
      $game_player.turn_up  
    end  
    # プレイヤーの姿勢を矯正  
    $game_player.straighten  
    # マップを更新 (並列イベント実行)  
    $game_map.update  
    # スプライトセットを再作成  
    @spriteset.dispose  
    @spriteset = Spriteset_Map.new  
    # トランジション処理中の場合  
    if $game_temp.transition_processing  
      # トランジション処理中フラグをクリア  
      $game_temp.transition_processing = false  
      # トランジション実行  
      Graphics.transition(20)  
    end  
    # マップに設定されている BGM と BGS の自動切り替えを実行  
    $game_map.autoplay  
    # フレームリセット  
    Graphics.frame_reset  
    # 入力情報を更新  
    Input.update  
  end  
end








Merci d'avance pour votre aide.

 


Posté par Sphinx le 4 Mar - 22:59 (2012)
Je pense savoir d'où vient ton soucis, et si je ne fais pas erreur voici comment tu peux le corriger :

Dans le script de Nagato Yuki, rajoute :
Code:
@sprites[i].update


après :
Code:
@sprites[i].bitmap.clear

Posté par Nuri Yuri le 4 Mar - 23:35 (2012)
Mettre à jour un sprite .___. Tu sais que ça ne sert que quand on flash un sprite ?
Je vais te dire les lignes qui vont pas dans la partie main de Scene_Map : 16, 18, 28 => Objets totalement aléatoire.

Les quelques pas c'est la suppression automatique des objets/sprites par ruby/graphics et le x c'est le relancement de main de la classe Scene_Map.

Posté par Renkys le 5 Mar - 14:22 (2012)
Nagato Yuki a écrit:


Je vais te dire les lignes qui vont pas dans la partie main de Scene_Map : 16, 18, 28 => Objets totalement aléatoire.


Les lignes 16 et 28 sont les lignes que j'ai ajoutées.
C'est toi même qui les donnes dans ce post: ici

Posté par Sphinx le 5 Mar - 16:50 (2012)
Nagato Yuki a écrit:
Mettre à jour un sprite .___. Tu sais que ça ne sert que quand on flash un sprite ?


Je remarque aussi qu'un sprite qui n'est pas mis à jour tend à disparaitre quelques secondes après. Le plus simple est d'essayer ceci dit. Soit l'update est bien la solution et ca marche, soit ca ne règle pas le soucis... Moi, je procède ainsi pour faire persister mes sprites.

Posté par Renkys le 5 Mar - 16:55 (2012)
J'ai essayé Sphinx, et malheureusement cela ne change rien.
De plus je ne comprend pas comment découper, le chara, cela m'affiche qu'une toute petite partie à peine visible :x

Posté par Pαlвσlѕку le 5 Mar - 16:56 (2012)
Un sprite non mis à jour sera effacé au bout de 10 secondes, d'où la nécessité de le mettre à jour.

De plus je viens de remarquer que la variable @interface était utilisé deux fois pour deux choses différentes, ce qui peut poser problème.

Posté par Renkys le 5 Mar - 17:07 (2012)
Bon voici à quoi ressemble le script pour le moment:class New_Interface
Code:
  include POKEMON_S   
  def initialize  
    tmp_coor=[100,100,64,0,96,0,128,0,160,0,192,0]  
    @sprites=[]  
    for i in 0...6  
      @sprites[i]=Sprite.new  
      @sprites[i].bitmap=Bitmap.new(32,32)  
      @sprites[i].x=tmp_coor[i*2]  
      @sprites[i].y=tmp_coor[i*2+1]  
      @sprites[i].z=1000
      @sprites[i].zoom_x = @sprites[i].zoom_y = 0.5
    end  
    @rect=Rect.new(0,0,32,32)  
  end 
  def dispose  
  for i in 0...6  
    @sprites[i].bitmap.dispose  
    @sprites[i].dispose  
  end  
end
  def refresh
    for i in 0...6  
      @sprites[i].bitmap.clear
      @sprites[i].update
      if $pokemon_party.actors[i]  
        bmp=RPG::Cache.character(sprintf("pkm %03d.png",$pokemon_party.actors[i].id),0)  
        @sprites[i].bitmap.blt(0,0,bmp,@rect)  
      end  
    end  
  end  
end 

Ajout de sphinx: 
Code:
@sprites[i].update 

Mon ajout:
Code:
@sprites[i].zoom_x = @sprites[i].zoom_y = 0.5 

Sinon le chara est trop grand.


Mes problèmes: _Comment réglé le "découpage" en effet je n'arrive pas à le réglé et cela ne m'affiche qu'une toute petite partie.
      _Problème expliqué dans le post 1 toujours d'actualité.


Lignes ajoutées dans Scene_Map (le premier):
Code:
@interface = New_Interface.new   

Code:
@interface.refresh 

Mon script Scene_Map
Scene_Map

Code:
Scene_Map:[font=Consolas, 'Courier New', Courier, mono, serif]#==============================================================================  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]# ■ Scene_Map  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]#------------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]#  マップ画面の処理を行うクラスです。  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]#==============================================================================  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]class Scene_Map  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  # ● メイン処理  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  def main  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # スプライトセットを作成  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @spriteset = Spriteset_Map.new[/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # メッセージウィンドウを作成  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @message_window = Window_Message.new  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @interface = Interface_Echap.new if $game_map.map_id != POKEMON_S::MAPSCENA [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @button_red = Bouton_Rouge.new[/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @interface = New_Interface.new[/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # トランジション実行  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    Graphics.transition  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # メインループ  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    loop do  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # ゲーム画面を更新  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      Graphics.update  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # 入力情報を更新  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      Input.update          [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      update        [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      @interface = Interface_Echap.new if @interface.nil? and $game_map.map_id != POKEMON_S::MAPSCENA [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      @interface.refresh if not @interface.nil?[/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      @button_red.refresh[/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # 画面が切り替わったらループを中断  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      if $scene != self  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        break  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # トランジション準備  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    Graphics.freeze  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # スプライトセットを解放  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @spriteset.dispose  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @interface.dispose if $game_map.map_id != POKEMON_S::MAPSCENA  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @button_red.dispose [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # メッセージウィンドウを解放  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @message_window.dispose     [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    if $scene.is_a?(Scene_Title)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # 画面をフェードアウト  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      Graphics.transition  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      Graphics.freeze  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  # ● フレーム更新  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  def update  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # ループ  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    loop do  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # マップ、インタプリタ、プレイヤーの順に更新  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # (この更新順序は、イベントを実行する条件が満たされているときに  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      #  プレイヤーに一瞬移動する機会を与えないなどの理由で重要)[/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_map.update  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_system.map_interpreter.update  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_player.update  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # システム (タイマー)、画面を更新  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_system.update  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_screen.update  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # プレイヤーの場所移動中でなければループを中断  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      unless $game_temp.player_transferring  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        break  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # 場所移動を実行  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      transfer_player  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # トランジション処理中の場合、ループを中断  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      if $game_temp.transition_processing  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        break  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # スプライトセットを更新  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @spriteset.update[/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @interface.refresh[/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # メッセージウィンドウを更新  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @message_window.update  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # ゲームオーバーの場合  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    if $game_temp.gameover  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # ゲームオーバー画面に切り替え  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $scene = Scene_Gameover.new  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      return  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # タイトル画面に戻す場合  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    if $game_temp.to_title  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # タイトル画面に切り替え  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $scene = Scene_Title.new  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      return  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # トランジション処理中の場合  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    if $game_temp.transition_processing  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # トランジション処理中フラグをクリア  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_temp.transition_processing = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # トランジション実行  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      if $game_temp.transition_name == ""  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        Graphics.transition(20)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      else  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        Graphics.transition(40, "Graphics/Transitions/" +  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]          $game_temp.transition_name)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # メッセージウィンドウ表示中の場合  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    if $game_temp.message_window_showing  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      return  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # エンカウント カウントが 0 で、エンカウントリストが空ではない場合  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    if $game_player.encounter_count == 0 and $game_map.encounter_list != []  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # イベント実行中かエンカウント禁止中でなければ  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      unless $game_system.map_interpreter.running? or  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]             $game_system.encounter_disabled  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        # トループを決定  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        n = rand($game_map.encounter_list.size)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        troop_id = $game_map.encounter_list[n]  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        # トループが有効なら  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        if $data_troops[troop_id] != nil  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]          # バトル呼び出しフラグをセット  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]          $game_temp.battle_calling = true  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]          $game_temp.battle_troop_id = troop_id  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]          $game_temp.battle_can_escape = true  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]          $game_temp.battle_can_lose = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]          $game_temp.battle_proc = nil  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # B ボタンが押された場合  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    if Input.trigger?(Input::B)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # イベント実行中かメニュー禁止中でなければ  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      unless $game_system.map_interpreter.running? or  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]             $game_system.menu_disabled  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        # メニュー呼び出しフラグと SE 演奏フラグをセット  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        $game_temp.menu_calling = true  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        $game_temp.menu_beep = true  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # デバッグモードが ON かつ F9 キーが押されている場合  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    if $DEBUG and Input.press?(Input::F9)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # デバッグ呼び出しフラグをセット  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_temp.debug_calling = true  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # プレイヤーの移動中ではない場合  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    unless $game_player.moving?  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # 各種画面の呼び出しを実行  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      if $game_temp.battle_calling  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        call_battle  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      elsif $game_temp.shop_calling  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        call_shop  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      elsif $game_temp.name_calling  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        call_name  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      elsif $game_temp.menu_calling  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        call_menu  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      elsif $game_temp.save_calling  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        call_save  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      elsif $game_temp.debug_calling  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]        call_debug  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  # ● バトルの呼び出し  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  def call_battle  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # バトル呼び出しフラグをクリア  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_temp.battle_calling = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # メニュー呼び出しフラグをクリア  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_temp.menu_calling = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_temp.menu_beep = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # エンカウント カウントを作成  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_player.make_encounter_count  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # マップ BGM を記憶し、BGM を停止  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_temp.map_bgm = $game_system.playing_bgm  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_system.bgm_stop  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # バトル開始 SE を演奏  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_system.se_play($data_system.battle_start_se)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # バトル BGM を演奏  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_system.bgm_play($game_system.battle_bgm)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # プレイヤーの姿勢を矯正  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_player.straighten  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # バトル画面に切り替え  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $scene = Scene_Battle.new  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  # ● ショップの呼び出し  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  def call_shop  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # ショップ呼び出しフラグをクリア  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_temp.shop_calling = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # プレイヤーの姿勢を矯正  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_player.straighten  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # ショップ画面に切り替え  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $scene = Scene_Shop.new  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  # ● 名前入力の呼び出し  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  def call_name  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # 名前入力呼び出しフラグをクリア  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_temp.name_calling = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # プレイヤーの姿勢を矯正  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_player.straighten  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # 名前入力画面に切り替え  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $scene = Scene_Name.new  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  # ● メニューの呼び出し  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  def call_menu  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # メニュー呼び出しフラグをクリア  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_temp.menu_calling = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # メニュー SE 演奏フラグがセットされている場合  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    if $game_temp.menu_beep  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # 決定 SE を演奏  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_system.se_play($data_system.decision_se)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # メニュー SE 演奏フラグをクリア  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_temp.menu_beep = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # プレイヤーの姿勢を矯正  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_player.straighten  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # メニュー画面に切り替え  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $scene = Scene_Menu.new  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  # ● セーブの呼び出し  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  def call_save  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # プレイヤーの姿勢を矯正  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_player.straighten  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # セーブ画面に切り替え  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $scene = Scene_Save.new  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  # ● デバッグの呼び出し  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  def call_debug  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # デバッグ呼び出しフラグをクリア  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_temp.debug_calling = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # 決定 SE を演奏  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_system.se_play($data_system.decision_se)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # プレイヤーの姿勢を矯正  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_player.straighten  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # デバッグ画面に切り替え  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $scene = Scene_Debug.new  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  # ● プレイヤーの場所移動  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  #--------------------------------------------------------------------------  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  def transfer_player  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # プレイヤー場所移動フラグをクリア  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_temp.player_transferring = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # 移動先が現在のマップと異なる場合  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    if $game_map.map_id != $game_temp.player_new_map_id  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # 新しいマップをセットアップ  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_map.setup($game_temp.player_new_map_id)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # プレイヤーの位置を設定  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # プレイヤーの向きを設定  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    case $game_temp.player_new_direction  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    when 2  # 下  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_player.turn_down  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    when 4  # 左  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_player.turn_left  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    when 6  # 右  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_player.turn_right  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    when 8  # 上  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_player.turn_up  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # プレイヤーの姿勢を矯正  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_player.straighten  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # マップを更新 (並列イベント実行)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_map.update  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # スプライトセットを再作成  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @spriteset.dispose  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    @spriteset = Spriteset_Map.new  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # トランジション処理中の場合  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    if $game_temp.transition_processing  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # トランジション処理中フラグをクリア  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      $game_temp.transition_processing = false  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      # トランジション実行  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]      Graphics.transition(20)  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # マップに設定されている BGM と BGS の自動切り替えを実行  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    $game_map.autoplay  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # フレームリセット  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    Graphics.frame_reset  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    # 入力情報を更新  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]    Input.update  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]  end  [/font]
[font=Consolas, 'Courier New', Courier, mono, serif]end  [/font]

 

Posté par Nuri Yuri le 5 Mar - 18:17 (2012)
@Sphinx & Palb', les sprites ne sont jamais effacés si ils ne sont pas mis à jour au bout de 10 secondes, ils le sont que si ce sont des objets inutilisés comme pour l'effacement d'un Array par le GC.
La preuve simple : le cadre de PSP DS ce sprite est littéralement abandonné dans l'objet principal le temps de l'exécution des scripts jusqu'au prochain RGSSReset.

Si ton interface est considéré comme un objet libérable les objets qui sont dedans le sont aussi dans le cas où ils ne sont pas utilisés par une autre variable et seront donc libérés.

Le script d'interface :
Code:
class New_Interface 
  include POKEMON_S   
  def initialize 
    tmp_coord=[32,0,64,0,96,0,128,0,160,0,192,0] 
    @sprites=[] 
    for i in 0...6 
      @sprites[i]=Sprite.new 
      @sprites[i].bitmap=Bitmap.new(32,32) 
      @sprites[i].x=tmp_coor[i*2] 
      @sprites[i].y=tmp_coor[i*2+1] 
      @sprites[i].z=1000 
    end 
    @rect=Rect.new(0,0,32,32) 
  end 
  def refresh 
    for i in 0...6 
      @sprites[i].bitmap.clear 
      if $pokemon_party.actors[i] 
        bmp=RPG::Cache.characters(sprintf("pkmn_%03d.png",$pokemon_party.actors[i].id),0) 
        @sprites[i].bitmap.blt(0,0,bmp,@rect) 
      end 
    end 
  end 
  def dispose 
    for i in 0...6 
      @sprites[i].bitmap.dispose 
      @sprites[i].dispose 
    end 
  end 
end 

Le script Scene_Map :
Map
Code:
#============================================================================== 
# ■ Scene_Map 
#------------------------------------------------------------------------------ 
#  マップ画面の処理を行うクラスです。 
#============================================================================== 
 
class Scene_Map 
  #-------------------------------------------------------------------------- 
  # ● メイン処理 
  #-------------------------------------------------------------------------- 
  def main 
    # スプライトセットを作成 
    @spriteset = Spriteset_Map.new 
    # メッセージウィンドウを作成 
    @message_window = Window_Message.new 
    if $game_map.map_id != POKEMON_S::MAPSCENA
      @interface = Interface_Echap.new
      @interface2 = New_Interface.new
    end
    @button_red = Bouton_Rouge.new
    # トランジション実行 
    Graphics.transition 
    # メインループ 
    loop do 
      # ゲーム画面を更新 
      Graphics.update 
      # 入力情報を更新 
      Input.update         
      update       
      if @interface.nil? and $game_map.map_id != POKEMON_S::MAPSCENA
        @interface = Interface_Echap.new
        @interface2 = New_Interface.new
      elsif !@interface.nil?
        @interface.refresh
        @interface2.refresh
      end
      @button_red.refresh
      # 画面が切り替わったらループを中断 
      if $scene != self 
        break 
      end 
    end 
    # トランジション準備 
    Graphics.freeze 
    # スプライトセットを解放 
    @spriteset.dispose
    if $game_map.map_id != POKEMON_S::MAPSCENA 
      @interface2.dispose
      @interface.dispose
    end
    @button_red.dispose 
    # メッセージウィンドウを解放 
    @message_window.dispose     
    if $scene.is_a?(Scene_Title) 
      # 画面をフェードアウト 
      Graphics.transition 
      Graphics.freeze 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● フレーム更新 
  #-------------------------------------------------------------------------- 
  def update 
    # ループ 
    loop do 
      # マップ、インタプリタ、プレイヤーの順に更新 
      # (この更新順序は、イベントを実行する条件が満たされているときに 
      #  プレイヤーに一瞬移動する機会を与えないなどの理由で重要) 
      $game_map.update 
      $game_system.map_interpreter.update 
      $game_player.update 
      # システム (タイマー)、画面を更新 
      $game_system.update 
      $game_screen.update 
      # プレイヤーの場所移動中でなければループを中断 
      unless $game_temp.player_transferring 
        break 
      end 
      # 場所移動を実行 
      transfer_player 
      # トランジション処理中の場合、ループを中断 
      if $game_temp.transition_processing 
        break 
      end 
    end 
    # スプライトセットを更新 
    @spriteset.update     
    # メッセージウィンドウを更新 
    @message_window.update 
    # ゲームオーバーの場合 
    if $game_temp.gameover 
      # ゲームオーバー画面に切り替え 
      $scene = Scene_Gameover.new 
      return 
    end 
    # タイトル画面に戻す場合 
    if $game_temp.to_title 
      # タイトル画面に切り替え 
      $scene = Scene_Title.new 
      return 
    end 
    # トランジション処理中の場合 
    if $game_temp.transition_processing 
      # トランジション処理中フラグをクリア 
      $game_temp.transition_processing = false 
      # トランジション実行 
      if $game_temp.transition_name == "" 
        Graphics.transition(20) 
      else 
        Graphics.transition(40, "Graphics/Transitions/" + 
          $game_temp.transition_name) 
      end 
    end 
    # メッセージウィンドウ表示中の場合 
    if $game_temp.message_window_showing 
      return 
    end 
    # エンカウント カウントが 0 で、エンカウントリストが空ではない場合 
    if $game_player.encounter_count == 0 and $game_map.encounter_list != [] 
      # イベント実行中かエンカウント禁止中でなければ 
      unless $game_system.map_interpreter.running? or 
             $game_system.encounter_disabled 
        # トループを決定 
        n = rand($game_map.encounter_list.size) 
        troop_id = $game_map.encounter_list[n] 
        # トループが有効なら 
        if $data_troops[troop_id] != nil 
          # バトル呼び出しフラグをセット 
          $game_temp.battle_calling = true 
          $game_temp.battle_troop_id = troop_id 
          $game_temp.battle_can_escape = true 
          $game_temp.battle_can_lose = false 
          $game_temp.battle_proc = nil 
        end 
      end 
    end 
    # B ボタンが押された場合 
    if Input.trigger?(Input::B) 
      # イベント実行中かメニュー禁止中でなければ 
      unless $game_system.map_interpreter.running? or 
             $game_system.menu_disabled 
        # メニュー呼び出しフラグと SE 演奏フラグをセット 
        $game_temp.menu_calling = true 
        $game_temp.menu_beep = true 
      end 
    end 
    # デバッグモードが ON かつ F9 キーが押されている場合 
    if $DEBUG and Input.press?(Input::F9) 
      # デバッグ呼び出しフラグをセット 
      $game_temp.debug_calling = true 
    end 
    # プレイヤーの移動中ではない場合 
    unless $game_player.moving? 
      # 各種画面の呼び出しを実行 
      if $game_temp.battle_calling 
        call_battle 
      elsif $game_temp.shop_calling 
        call_shop 
      elsif $game_temp.name_calling 
        call_name 
      elsif $game_temp.menu_calling 
        call_menu 
      elsif $game_temp.save_calling 
        call_save 
      elsif $game_temp.debug_calling 
        call_debug 
      end 
    end 
  end 
  #-------------------------------------------------------------------------- 
  # ● バトルの呼び出し 
  #-------------------------------------------------------------------------- 
  def call_battle 
    # バトル呼び出しフラグをクリア 
    $game_temp.battle_calling = false 
    # メニュー呼び出しフラグをクリア 
    $game_temp.menu_calling = false 
    $game_temp.menu_beep = false 
    # エンカウント カウントを作成 
    $game_player.make_encounter_count 
    # マップ BGM を記憶し、BGM を停止 
    $game_temp.map_bgm = $game_system.playing_bgm 
    $game_system.bgm_stop 
    # バトル開始 SE を演奏 
    $game_system.se_play($data_system.battle_start_se) 
    # バトル BGM を演奏 
    $game_system.bgm_play($game_system.battle_bgm) 
    # プレイヤーの姿勢を矯正 
    $game_player.straighten 
    # バトル画面に切り替え 
    $scene = Scene_Battle.new 
  end 
  #-------------------------------------------------------------------------- 
  # ● ショップの呼び出し 
  #-------------------------------------------------------------------------- 
  def call_shop 
    # ショップ呼び出しフラグをクリア 
    $game_temp.shop_calling = false 
    # プレイヤーの姿勢を矯正 
    $game_player.straighten 
    # ショップ画面に切り替え 
    $scene = Scene_Shop.new 
  end 
  #-------------------------------------------------------------------------- 
  # ● 名前入力の呼び出し 
  #-------------------------------------------------------------------------- 
  def call_name 
    # 名前入力呼び出しフラグをクリア 
    $game_temp.name_calling = false 
    # プレイヤーの姿勢を矯正 
    $game_player.straighten 
    # 名前入力画面に切り替え 
    $scene = Scene_Name.new 
  end 
  #-------------------------------------------------------------------------- 
  # ● メニューの呼び出し 
  #-------------------------------------------------------------------------- 
  def call_menu 
    # メニュー呼び出しフラグをクリア 
    $game_temp.menu_calling = false 
    # メニュー SE 演奏フラグがセットされている場合 
    if $game_temp.menu_beep 
      # 決定 SE を演奏 
      $game_system.se_play($data_system.decision_se) 
      # メニュー SE 演奏フラグをクリア 
      $game_temp.menu_beep = false 
    end 
    # プレイヤーの姿勢を矯正 
    $game_player.straighten 
    # メニュー画面に切り替え 
    $scene = Scene_Menu.new 
  end 
  #-------------------------------------------------------------------------- 
  # ● セーブの呼び出し 
  #-------------------------------------------------------------------------- 
  def call_save 
    # プレイヤーの姿勢を矯正 
    $game_player.straighten 
    # セーブ画面に切り替え 
    $scene = Scene_Save.new 
  end 
  #-------------------------------------------------------------------------- 
  # ● デバッグの呼び出し 
  #-------------------------------------------------------------------------- 
  def call_debug 
    # デバッグ呼び出しフラグをクリア 
    $game_temp.debug_calling = false 
    # 決定 SE を演奏 
    $game_system.se_play($data_system.decision_se) 
    # プレイヤーの姿勢を矯正 
    $game_player.straighten 
    # デバッグ画面に切り替え 
    $scene = Scene_Debug.new 
  end 
  #-------------------------------------------------------------------------- 
  # ● プレイヤーの場所移動 
  #-------------------------------------------------------------------------- 
  def transfer_player 
    # プレイヤー場所移動フラグをクリア 
    $game_temp.player_transferring = false 
    # 移動先が現在のマップと異なる場合 
    if $game_map.map_id != $game_temp.player_new_map_id 
      # 新しいマップをセットアップ 
      $game_map.setup($game_temp.player_new_map_id) 
    end 
    # プレイヤーの位置を設定 
    $game_player.moveto($game_temp.player_new_x, $game_temp.player_new_y) 
    # プレイヤーの向きを設定 
    case $game_temp.player_new_direction 
    when 2  # 下 
      $game_player.turn_down 
    when 4  # 左 
      $game_player.turn_left 
    when 6  # 右 
      $game_player.turn_right 
    when 8  # 上 
      $game_player.turn_up 
    end 
    # プレイヤーの姿勢を矯正 
    $game_player.straighten 
    # マップを更新 (並列イベント実行) 
    $game_map.update 
    # スプライトセットを再作成 
    @spriteset.dispose 
    @spriteset = Spriteset_Map.new 
    # トランジション処理中の場合 
    if $game_temp.transition_processing 
      # トランジション処理中フラグをクリア 
      $game_temp.transition_processing = false 
      # トランジション実行 
      Graphics.transition(20) 
    end 
    # マップに設定されている BGM と BGS の自動切り替えを実行 
    $game_map.autoplay 
    # フレームリセット 
    Graphics.frame_reset 
    # 入力情報を更新 
    Input.update 
  end 
end 


Le script affiche les deux interfaces car je sais pas vraiment ce que tu veux faire mais normalement avec ce code l'interface ne devrait pas disparaitre sauf dans l'entrée du menu vu qu'elle est disposé.

Posté par Renkys le 5 Mar - 18:47 (2012)
Effectivement, cela marche, merci à toi.


Par contre cela ne m'affiche qu'un tout petit bout du chara, je ne comprend pas comment le régler, j'ai essayer tout et n'importe quoi je ne vois pas.
Par contre comme tu le dis, l'affichage des Pokemon disparaît lorsque j'ouvre le menu, et réapparaît quand je le referme. y a t-il un moyen pour qu'il reste affiché même lorsque le menu est ouvert ?


Ps: Avez un site à me conseiller pour apprendre le ruby ?

Posté par Nuri Yuri le 5 Mar - 18:57 (2012)
Il faut ajouter l'interface dans la scène du menu et elle s'affiche.
Après le script peut être optimisé car cette version n'est pas très propre...
Pour le site, je sais pas trop...

Posté par Renkys le 5 Mar - 19:04 (2012)
Merci, cela marche, je vais manger, je verrais si il y a des problèmes après.A toute et bon ap' pour ceux qui vont manger !

Posté par Nuri Yuri le 5 Mar - 19:07 (2012)
Copier coller bêtement ne change rien, tu dois modifier la scène du menu après il faut voir avec ceux qui connaissent PSP DS mieux que moi car j'ai pas les scripts en tête.

Posté par Renkys le 8 Mar - 17:00 (2012)
Je viens d'éditer mon message, j'ai été *con*, pour que cela s'affiche sur la map,  suffit d'ajouter dans le script scene_map @interface2 = New_Interface.new dans la def main et @interface2.refresh dans la def update, bah pour le menu c'est la même.
J'suis fatigué >< c'est en me relisant et en te relisant que je me suis dit: "quel con" XD
Nagato Yuki a écrit:
Il faut ajouter l'interface dans la scène du menu et elle s'affiche.
Après le script peut être optimisé car cette version n'est pas très propre...
Pour le site, je sais pas trop...





Edit: Me revoilà  Bon il ne me reste seul problème, comment faire pour qu'on vois le chara en entier ?

Quelqu'un saurais m'aider ?

Posté par Nuri Yuri le 8 Mar - 18:36 (2012)
Essaie avec ce script :
Code:
class New_Interface
  include POKEMON_S
  COORD=[32,0,64,0,96,0,128,0,160,0,192,0] 
  def initialize
    @sprites=[]
    6.times do |i|
      @sprites[i]=Sprite.new
      @sprites[i].x=COORD[i*2]
      @sprites[i].y=COORD[i*2+1]
      @sprites[i].z=1000   
    end
  end
  def refresh
    6.times do |i|
      if $pokemon_party.actors[i]
        @sprites[i].bitmap=bmp=RPG::Cache.characters(sprintf("pkmn_%03d.png",$pokemon_party.actors[i].id),0)
        @sprites[i].src_rect.set(0,0,bmp.width/4,bmp.height/4)
      else
        @sprites[i].bitmap=nil
      end
    end
  end
  def dispose
    6.times do |i| 
      @sprites[i].bitmap.dispose
      @sprites[i].dispose
    end
  end
end

Posté par Sphinx le 8 Mar - 19:36 (2012)
Par contre, où fais tu l'update ? (parce que la méthode refresh risque de prendre pas mal de CPU si elle est appelée à chaque frame)

Posté par Nuri Yuri le 8 Mar - 20:05 (2012)
Ce n'est pas un Window et j'ai réduit considérablement la manipulation de bitmap. Par contre à cause de RPG::Cache et sprintf ça va bouffer un peu de RAM.
J'ai modifié le script pour qu'il ne recharge pas les bitmaps quand ils ont étés chargés.
Code:
class New_Interface
  include POKEMON_S
  COORD=[32,0,64,0,96,0,128,0,160,0,192,0] 
  def initialize
    @sprites=[]
    @ids=[]
    6.times do |i|
      @sprites[i]=Sprite.new
      @sprites[i].x=COORD[i*2]
      @sprites[i].y=COORD[i*2+1]
      @sprites[i].z=1000
    end
  end
  def refresh
    6.times do |i|
      if $pokemon_party.actors[i]
        id=$pokemon_party.actors[i].id
        next if @ids[i]==id
      @ids[i]=id
        @sprites[i].bitmap=bmp=RPG::Cache.characters(sprintf("pkmn_%03d.png",id),0)
        @sprites[i].src_rect.set(0,0,bmp.width/4,bmp.height/4)
      else
        @sprites[i].bitmap=nil
      end
    end
  end
  def dispose
    6.times do |i|
      @sprites[i].bitmap.dispose
      @sprites[i].dispose
    end
  end
end

Le refresh de cette classe bouffera largement moins de CPU que Game_Map à chaque frame en bouffe.

Posté par Renkys le 9 Mar - 14:45 (2012)
Cela marche, merci, les pokemon s'affiche en entier mais il y a un bug lorsque j'ouvre le menu:







Et voici le log:

Log.txt
---------- Erreur de script : Affichage_poké ----------
----- Version du logiciel : PSP DS v0.4
----- Type
NoMethodError


----- Message
- ARGS - []
undefined method `dispose' for nil:NilClass


----- Position dans Affichage_poké
Ligne 29


----- Backtrace
Script : Affichage_poké | Ligne : 29 | Méthode : in `dispose'
Script : Affichage_poké | Ligne : 28 | Méthode : in `times'
Script : Affichage_poké | Ligne : 28 | Méthode : in `dispose'
Script : Scene_Map | Ligne : 48 | Méthode : in `main'
Script : Main | Ligne : 58


Merci encore de ton aide.

Posté par Nuri Yuri le 9 Mar - 16:21 (2012)
Désolé j'ai oublié de supprimer une ligne :
Code:
class New_Interface
  include POKEMON_S
  COORD=[32,0,64,0,96,0,128,0,160,0,192,0] 
  def initialize
    @sprites=[]
    @ids=[]
    6.times do |i|
      @sprites[i]=Sprite.new
      @sprites[i].x=COORD[i*2]
      @sprites[i].y=COORD[i*2+1]
      @sprites[i].z=1000
    end
  end
  def refresh
    6.times do |i|
      if $pokemon_party.actors[i]
        id=$pokemon_party.actors[i].id
        next if @ids[i]==id
      @ids[i]=id
        @sprites[i].bitmap=bmp=RPG::Cache.characters(sprintf("pkmn_%03d.png",id),0)
        @sprites[i].src_rect.set(0,0,bmp.width/4,bmp.height/4)
      else
        @sprites[i].bitmap=nil
      end
    end
  end
  def dispose
    6.times do |i|
      @sprites[i].dispose
    end
  end
end

Voilà maintenant ça ne dois pas bugguer.

Posté par Renkys le 9 Mar - 17:11 (2012)
Tout marche à la perfection, merci encore.