マップ上でピクチャーをウィンドウ前に表示したい

Nekoball
記事: 2
登録日時: 2021年2月03日(水) 01:18

マップ上でピクチャーをウィンドウ前に表示したい

投稿記事by Nekoball » 2021年2月03日(水) 01:28

はじめまして、ゲーム制作中の者ですが、ご協力いただきたい事があり投稿させてください。
指定したピクチャー番号のピクチャーをウィンドウ前に表示出来るスクリプトを探しています。
ツクマテ内で同じ内容のスクリプトがあり使わせていただきましたが、そのスクリプトを単体で使用しても何故かラグが酷くゲームがカクカクしてしまいます…
別サイト様でバトル用のピクチャウィンドウ前表示スクリプトは問題なく動く為、スクリプト次第ではラグがなくなると思います。宜しければご協力頂けると幸いです!

ショウ
記事: 149
登録日時: 2016年8月10日(水) 19:52

Re: マップ上でピクチャーをウィンドウ前に表示したい

投稿記事by ショウ » 2021年2月05日(金) 04:26

多分俺のかな、色々試した所ACEはforよりこっちの方が良いみたい。
修正したので試してみて下さい。
http://tm.lucky-duet.com/viewtopic.php?f=43&t=6089&p=22198#p22198
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: マップ上でピクチャーをウィンドウ前に表示したい

投稿記事by TOMO » 2021年3月01日(月) 17:09

あんまり言うのもどうかと思ったけど、
ショウさんのスクリプトにちょっと問題がありそうだったので作ってみました
ビューポートをピクチャに設定するタイミングの辺

コード: 全て選択

class Spriteset_Map
  #--------------------------------------------------------------------------
  # ● ビューポートの作成
  #--------------------------------------------------------------------------
  alias tomo_foreground_picture_create_viewports create_viewports
  def create_viewports
    tomo_foreground_picture_create_viewports
    @viewport4 = Viewport.new
    @viewport4.z = 300
  end
  #--------------------------------------------------------------------------
  # ● ビューポートの解放
  #--------------------------------------------------------------------------
  alias tomo_foreground_picture_dispose_viewports dispose_viewports
  def dispose_viewports
    tomo_foreground_picture_dispose_viewports
    @viewport4.dispose
  end
  #--------------------------------------------------------------------------
  # ● ピクチャスプライトの更新
  #--------------------------------------------------------------------------
  def update_pictures
    $game_map.screen.pictures.each do |pic|
      case pic.number
      when 21..30
        @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport4, pic)
      else
        @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
      end
      @picture_sprites[pic.number].update
    end
  end
  #--------------------------------------------------------------------------
  # ● ビューポートの更新
  #--------------------------------------------------------------------------
  alias tomo_foreground_picture_update_viewports update_viewports
  def update_viewports
    tomo_foreground_picture_update_viewports
    @viewport4.color.set($game_map.screen.flash_color)
    @viewport4.update
  end
end
21~30番が手前に来ます

create_picturesでやってたのをupdate_picturesでやり
解放&更新処理の追加と、画面のフラッシュの対応もしておきました

ラグに関しては、原因のスクリプトがどれなのか分からないので何とも言えません
(本当にショウさんの?)
ただ、これ以上軽くするのは難しいと思うので、
『別サイト様』とやらのもこんな感じなのかな?


規約に関しては、一応改変素材なのでショウさんのと同じにします
(改変自由&素材単体での販売禁止)


※おまけ1
競合対策してないupdate_picturesを競合対策したい場合

コード: 全て選択

  alias tomo_foreground_picture_update_pictures update_pictures
  def update_pictures
    $game_map.screen.pictures.each do |pic|
      case pic.number
      when 21..30
        @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport4, pic)
      end
    end
    tomo_foreground_picture_update_pictures
  end
該当する部分をこちらに差し替えると競合対策されます
(22~32行目辺り)

ただ、ラグが問題だったようなので、
少し重くなるこれにするのはやめておきました


※おまけ2
戦闘画面でも手前に来るようにしたい場合

コード: 全て選択

class Spriteset_Battle
  #--------------------------------------------------------------------------
  # ● ビューポートの作成
  #--------------------------------------------------------------------------
  alias tomo_foreground_picture_create_viewports create_viewports
  def create_viewports
    tomo_foreground_picture_create_viewports
    @viewport4 = Viewport.new
    @viewport4.z = 300
  end
  #--------------------------------------------------------------------------
  # ● ビューポートの解放
  #--------------------------------------------------------------------------
  alias tomo_foreground_picture_dispose_viewports dispose_viewports
  def dispose_viewports
    tomo_foreground_picture_dispose_viewports
    @viewport4.dispose
  end
  #--------------------------------------------------------------------------
  # ● ピクチャスプライトの更新
  #--------------------------------------------------------------------------
  def update_pictures
    $game_troop.screen.pictures.each do |pic|
      case pic.number
      when 21..30
        @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport4, pic)
      else
        @picture_sprites[pic.number] ||= Sprite_Picture.new(@viewport2, pic)
      end
      @picture_sprites[pic.number].update
    end
  end
  #--------------------------------------------------------------------------
  # ● ビューポートの更新
  #--------------------------------------------------------------------------
  alias tomo_foreground_picture_update_viewports update_viewports
  def update_viewports
    tomo_foreground_picture_update_viewports
    @viewport4.color.set($game_troop.screen.flash_color)
    @viewport4.update
  end
end
3か所変えただけです
(Spriteset_Map→Spriteset_Battle、$game_map→$game_troop)

こっちもおまけ1が使えます
($game_mapを$game_troopにする必要がありますが)
ショウ
記事: 149
登録日時: 2016年8月10日(水) 19:52

Re: マップ上でピクチャーをウィンドウ前に表示したい

投稿記事by ショウ » 2021年3月01日(月) 23:52

直書き&慣れない移植はこういう時あかんね(笑)
ちなみにラグに関してはとりあえず修正前の奴はたしかにちょっとラグってました。
ただ最初に投稿した当時はラグって無かったのでもしかしたら環境によるものも
あるかもしれません。

あとVXでupdate_picturesでやるとくっそ重くなる上ピクチャも荒くなるので
create_picturesを使ったんですがACEとの違いってなんなんでしょうか?
それとも作り方の問題なのかな?
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: マップ上でピクチャーをウィンドウ前に表示したい

投稿記事by TOMO » 2021年3月02日(火) 17:32

VXが最初から0~20番目まで用意されてるのに対し、
VXAceのGame_Picturesは最初は空配列で、
「||=」で後から使う度に追加されます

その為、initializeで実行するcreate_picturesだと、
タイミング的に次マップからになります
ショウ
記事: 149
登録日時: 2016年8月10日(水) 19:52

Re: マップ上でピクチャーをウィンドウ前に表示したい

投稿記事by ショウ » 2021年3月03日(水) 00:14

なるほどそういう事か、勉強になりました。
Nekoball
記事: 2
登録日時: 2021年2月03日(水) 01:18

Re: マップ上でピクチャーをウィンドウ前に表示したい

投稿記事by Nekoball » 2021年7月03日(土) 20:23

御二方、お返事いただきありがとうございました!

“VX / Ace:スクリプト素材のリクエスト” へ戻る