【解決済み】複数の画像を1枚に合成して表示させたい

aiueo
記事: 50
登録日時: 2016年5月09日(月) 23:33

【解決済み】複数の画像を1枚に合成して表示させたい

投稿記事by aiueo » 2017年6月19日(月) 00:04

複数の画像を1枚に合成して表示させたい

こんにちは。
以下の内容のRGSS3ツクールVXAce用スクリプトをリクエストさせて頂きます。

複数の画像を合成し、1枚の画像として表示するスクリプトをお願いいたします。
それによってイベントコマンドの「ピクチャの表示」を繰り返すより、
表示が一瞬で、処理が重くなったりせず、ピクチャ番号が1つで済む、
というのが希望です。

イメージしたのは、
イベント編集画面の右半分の「実行内容」の中で、
イベントコマンド「スクリプト」で、
複数の画像ファイルを指定し、
表示の順番(階層)も指定し、、
1枚の画像(ひとつのピクチャ番号消費)として表示させる、
といったものです。

ネットを検索していて
§ RGSS講座07「複数画像ファイルの合成方法」
http://edlogtkool.blog36.fc2.com/blog-entry-574.html
という記事や
(!注意:以下のリンク先は性的表現が含まれています)
画像を合成するプラグイン
https://cobrara.blogspot.jp/
(これはACEではなくMVのプラグインですが)
という記事を見て
RGSS3で出来ればいいなと思いリクエストさせて頂きました。

以上よろしくお願いいたします。
最後に編集したユーザー aiueo on 2017年7月27日(木) 20:18 [ 編集 2 回目 ]

TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 複数の画像を1枚に合成して表示させたい

投稿記事by TOMO » 2017年6月19日(月) 02:58

とりあえず作ってみましたが、
MVのリンク先みたいな使い方は、自動合成の為、無理です

コード: 全て選択

# ※使用方法
# 判定画像名の画像を使うと、自動で合成されていきます

module TOMO
  module BlendBitmap
    # 合成画像リスト
    # 判定画像名 => ["合成画像名1", "合成画像名2", …],
    #
    # (「判定画像→合成画像1→ …」の順に合成していきます)
    Name = {
      "Test1" => ["Test1_1", "Test1_2", "Test1_3"],
    }
  end
end

class << Cache
  alias tomo_blend_bitmap_load_bitmap load_bitmap
  def load_bitmap(folder_name, filename, hue = 0)
    @cache ||= {}
    if !filename.empty? && TOMO::BlendBitmap::Name[filename]
      blend_bitmap(folder_name, filename)
    else
      tomo_blend_bitmap_load_bitmap(folder_name, filename, hue)
    end
  end
 
  def blend_bitmap(folder_name, filename)
    path = folder_name + filename
    unless include?(path)
      @cache[path] = Bitmap.new(path)
      TOMO::BlendBitmap::Name[filename].each do |name|
        src_bitmap = load_bitmap(folder_name, name)
        @cache[path].blt(0, 0, src_bitmap, src_bitmap.rect)
      end
    end
    @cache[path]
  end
end

ちなみに、ピクチャだけでなく、全画像で使用可能なので、
同名の画像名を使わないように気を付けて下さい

あと、MVのリンク先がR-18なので、
注意書きくらいした方がいいと思います
aiueo
記事: 50
登録日時: 2016年5月09日(月) 23:33

Re: 複数の画像を1枚に合成して表示させたい

投稿記事by aiueo » 2017年6月19日(月) 20:43

TOMO様 ありがとうございます。
R-18の注意書きの件すみませんでした、追記しました。

今回作成していただいたスクリプトですが、使用方法が分かりません。
以下の作業を行いました。

■1
RPGツクールVXAceのプロジェクトを用意。
■2
スクリプト画面で

▼ 素材
VXAce_SP1
RPGツクールVX Ace Fun Patch(※1)
画面サイズVGA(RPGツクールVX Ace)(※2)
画像合成(※3)
( ここに追加 )

▼ メイン
Main

という風にセットしました。
(※1)
CACAO様 RPGツクールVX Ace Fun Patch
http://cacaosoft.webcrow.jp/script/rgss3/cao_sp.html
(※2)
initialization様 □ No.023 画面サイズVGA(RPGツクールVX Ace)
サイト不明
(※3)
今回TOMO様が作成されたスクリプト

■3
Graphicsフォルダ内のPicturesフォルダに
Test1_1.png
Test1_2.png
Test1_3.png
という画像ファイルを用意。

■4_1
マップイベントを作成し、実行内容に
イベントコマンドの「スクリプト」で
a = screen.pictures
a[1].show("Test1", 0, 0, 0, 100, 100, 255, 0)
と記述し、イベントに話しかけると、
ファイルが見つかりません
Graphics/Pictures/Test1
とエラー表示されます。

■4_2
イベントコマンドの「ピクチャの表示」で
Test1_1.pngを表示させると
普通にTest1_1.pngだけが表示されます。

このスクリプトはどのようにして使用すればよいでしょうか。
以上よろしくお願いいたします。
TOMO
記事: 343
登録日時: 2015年11月16日(月) 20:12
連絡を取る:

Re: 複数の画像を1枚に合成して表示させたい

投稿記事by TOMO » 2017年6月19日(月) 21:01

いや、スクリプト内に書いてる通り「判定画像」が必要です

つまり「Test1」も用意して下さい
aiueo
記事: 50
登録日時: 2016年5月09日(月) 23:33

Re: 複数の画像を1枚に合成して表示させたい

投稿記事by aiueo » 2017年6月19日(月) 22:29

すみませんでした、やっとわかりました。
追加で以下の作業を行いました。

■1
Graphicsフォルダ内のPicturesフォルダに
Test1.png
Test1_1.png
Test1_2.png
Test1_3.png
Gazou.png
Gazou_1.png
Gazou_2.png
Gazou_3.png
という画像ファイルを用意(すべて同サイズ)。

■2
セットした今回のスクリプトの冒頭を

# (「判定画像→合成画像1→ …」の順に合成していきます)
Name = {
"Test1" => ["Test1_1", "Test1_2", "Test1_3"],
"Gazou" => ["Gazou_1", "Gazou_2", "Gazou_3"],
}
end

と変更。

■3_1
マップイベントの実行内容にてイベントコマンド「ピクチャの表示」で、
◆ピクチャの表示:1、’Test1’、左上(0,0)、(100%、100%)、255、通常
◆ピクチャの表示:2、’Gazou’、左上(0,0)、(100%、100%)、255、通常
と設定。
イベントに話しかけると、
下層                        上層
Test1 Test1_1 Test1_2 Test1_3 Gazou Gazou_1 Gazou_2 Gazou_3
の順に合成表示されました。

■3_2
イベントコマンド「スクリプト」で
a = screen.pictures
a[2].show("Gazou", 0, 0, 0, 100, 100, 255, 0)
a = screen.pictures
a[1].show("Test1", 0, 0, 0, 100, 100, 255, 0)
で同じように出来ることを確認しました。


ありがとうございました!

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