スプライトとピクチャ、軽量化など
137 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/10(土) 22:33:33 ID:wu6qgA9A
XPのRGSSに関する質問です。
作っているゲームの自作システムで、ピクチャを多く使っていてFPSが落ちているんです。
どこかでピクチャをスプライトに変えて表示させると軽くなると見たのでやってみようと思ってヘルプとかを読んでみたんですがわかりませんでした・・・
やり方などをお教え頂けると幸いです。
もしスレ違いだったらすみません(汗
138 名前: 名無しさん@お腹いっぱい。 投稿日: 2008/05/10(土) 22:38:37 ID:5FKt/Rzy
>>137
画像関連を総称してスプライトと呼ぶのでは?
文章表示を頻繁に実行しているとすぐに遅くなる。
文章表示で表示したい文をスプライト(画像)にして動作を軽くするってのは見たことあるよ。
139 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/10(土) 22:53:12 ID:wu6qgA9A
>>138
う~ん・・・そうなるとピクチャ表示よりも軽く表示するのは難しいんですかね・・・
$sp = Sprite.new()
$sp.bitmap = Bitmap.new(\\\"画像名\\\")
$sp.z = 9999
こういう表示方法でやってみようかと思ってるんですが、ピクチャと同じz座標に表示する方法がわからず・・・
結構詰まってます(苦笑
140 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/10(土) 22:56:19 ID:o/1omzBC
同じビューポートに入ってない時点で
z座標は永遠に噛み合いません。
141 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/10(土) 23:11:55 ID:wu6qgA9A
>>140
viewport2ってやつですかね?
それを入れようとしてみたんですが、使い方がわからず・・・
周りに聞けるような人(RGSSわかる人)がいなくて苦戦してます
143 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/11(日) 01:26:14 ID:TQ7qicY3
とりあえず重くなってる原因をはっきりさせよう。
スクリプト「Spriteset_Map」の中に
# ピクチャを更新
for sprite in @picture_sprites
sprite.update
end
と書かれてる場所があるが、ここを
# ピクチャを更新
for sprite in @picture_sprites
#sprite.update
end
に変えて軽くなるかどうか試してみて。
ピクチャが表示されなくなると思うが、これでFPSが良くなったのなら、
ピクチャスプライトの更新処理に時間がかかっているのが原因。
ピクチャスプライトの更新頻度を減らすと改善できるかもしれない。
144 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/11(日) 03:19:31 ID:dSlETHHe
>>141
スクリプトエディタのSpriteset_Mapを見てみると
ピクチャは@viewport2に表示されており、
@viewport2.z = 200
から、このビューポートのz座標は200だとわかる
$sp = Sprite.new
$sp.bitmap = Bitmap.new(\\\"画像名\\\")
$sp.z = 199
これでピクチャの下、
$sp.z = 201
これでピクチャの上に表示されると思う。
$sp.z = 200
の場合は、後で生成したオブジェクトが上に表示されるはず
ちなみに表示するビューポートを指定したい場合は
$viewport9999 = Viewport.new(0, 0, 640, 480) # (x,y,幅,高さ)
$viewport9999.z = 9999
$sp = Sprite.new($viewport9999)
$sp.bitmap = Bitmap.new(\\\"画像名\\\")
こんな感じでやればいい
適当なビューポートを宣言してそこにスプライトを複数表示し、
ビューポート自体に色調の変更をかければ
画面自体の色調は変えずに
その複数のスプライトだけ色調変更、なんてこともできる
146 名前: 137 wu6qgA9A [sage] 投稿日: 2008/05/11(日) 08:28:32 ID:6pmgmy19
>>143
試してみたところ、自作戦闘だと今まで25~32FPSだったのが28~36に改善しました。
また、メニュー画面は24FPSだったのが37FPSまで改善されました。
更新頻度を下げるために、ちょっと無理やりでしたが
if $game_variables[1] == 0
for sprite in @picture_sprites
sprite.update
$game_variables[1] = 1
end
else
$game_variables[1] = 0
end
としてやってみました。そうしたら少しだけですが改善されました。
(ただ、閉鎖された「箱庭」様のtext_pintureというRGSSが誤作動してますが・・・)
これはプレイヤーのPCのスペックに応じて設定で変更できるようにすると
高スペはそのまま、低スペは半分の更新にってできますよね。
何か改善点があればお願いします。
>>144
Spriteset_Mapを見て、そこまでは理解できました。
ただ、ピクチャ(以下Pic)の上や下でなく「Pic1とPic3の間に表示する」ということがやりたいと思っています。
その場合Picのビューポートと同じz座標に作ることが必要になりますよね。
できれば教えていただけると助かります。
147 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/11(日) 09:52:28 ID:BM7rmDZz
>>146
ピクチャの間に表示したい場合、@viewport2を指定する必要がある。
しかし@viewport2はSpriteset_Mapの中にあって、その実体の@spritesetは
Scene_Mapの中にある。それを外側から取り出すには強引な方法しかない。
つまり、問題のスプライトをSpriteset_Mapの内部に何とかして組み込むか、
逆にPic1とPic3も自前のスプライトで処理するかのどちらかが良いのでは。
148 名前: 143 [sage] 投稿日: 2008/05/11(日) 13:35:46 ID:TQ7qicY3
>>146
2フレームに1回、全ピクチャを更新するようになってるけど、
毎フレーム、全ピクチャの半分ずつ更新する方が効果あるかも。
番号が奇数のピクチャだけを更新するフレームと、
番号が偶数のピクチャだけを更新するフレームとを繰り返すようにしてみた。
$game_variables[1] += 1
$game_variables[1] %= 2
for i in 0...@picture_sprites.size
if ((i % 2) == $game_variables[1])
@picture_sprites[i].update
end
end
「$game_variables[1] %= 2」と、「(i % 2)」の2を変更すると、更新頻度を変更できる。
例えば3にすると、毎フレーム、全ピクチャの1/3ずつ更新するようになる。
また、i+1 がイベントで指定してるピクチャ番号なので、
if ((i % 2) == $game_variables[1])
を
if ((i % 2) == $game_variables[1]) || (i+1 == ○○)
と変更すると、ピクチャ番号○○のピクチャは毎フレーム更新するようになる。
動きがカクカクするのが気になるピクチャはやってみると良いかも。
149 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/11(日) 14:01:49 ID:EGwWg6JW
システム的に更新しなくていいピクチャ番号を決めて
それを更新レンジから外せば?
ただ表示させとくだけのピクチャもあるだろーし。
150 名前: 146 wu6qgA9A [sage] 投稿日: 2008/05/11(日) 14:06:53 ID:Ru0WE6uN
>>147
ピクチャを使わずに自作スプリクトで動かすのはz座標を考えればいいので問題ないのですが、
一部、文字の表示を素材RGSSで行っているんです。(文字をピクチャとして表示するRGSS)
それをスプライトで表示できればいいんですけど・・・
メニューなどのウィンドウ表示処理見てみてもよくわからないので、できれば文字を表示する方法をお教えいただけますか?
なんか質問してばっかりですみません(苦笑
>>148
そういう考え方は思いつきませんでした!
その処理方法を使わせてもらいますね。
これはピクチャで表示するだけでなく、スプライトで処理する時にも軽量化として使えますね。
ありがとうございます!
151 名前: 146 wu6qgA9A [sage] 投稿日: 2008/05/11(日) 14:09:09 ID:Ru0WE6uN
ああ・・・新着見てからにすればよかった・・・
連続で失礼を。
>>149
確かに結構な数のピクチャが一度表示されてから動くこともなく置いてあるだけですね。
すべてのピクチャを更新するから重いんですね・・・
152 名前: 147 [sage] 投稿日: 2008/05/11(日) 14:16:09 ID:BM7rmDZz
>>150
文字を表示するのは、転送元のビットマップに対してdraw_text。
でも軽量化が目的なら、そんなことせずに>>149でいいような気もする。
あとXPはデフォでピクチャが50枚もあるから、使わない分を減らすとか。
153 名前: 146 wu6qgA9A [sage] 投稿日: 2008/05/11(日) 17:48:44 ID:6pmgmy19
>>152
文字は即席でRGSS講座サイトとヘルプ見て勉強して、表示させたりすることができました!
ただ、ピクチャの移動を再現する方法がちょっとわからなくて苦戦中・・・
とりあえず二つの方法をどちらも使えるようにして、その場その場に合った方を使おうと思います。
ちなみにピクチャはデフォの50枚ギリギリまで使っているので減らすことは難しいです・・・
XPのRGSSに関する質問です。
作っているゲームの自作システムで、ピクチャを多く使っていてFPSが落ちているんです。
どこかでピクチャをスプライトに変えて表示させると軽くなると見たのでやってみようと思ってヘルプとかを読んでみたんですがわかりませんでした・・・
やり方などをお教え頂けると幸いです。
もしスレ違いだったらすみません(汗
138 名前: 名無しさん@お腹いっぱい。 投稿日: 2008/05/10(土) 22:38:37 ID:5FKt/Rzy
>>137
画像関連を総称してスプライトと呼ぶのでは?
文章表示を頻繁に実行しているとすぐに遅くなる。
文章表示で表示したい文をスプライト(画像)にして動作を軽くするってのは見たことあるよ。
139 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/10(土) 22:53:12 ID:wu6qgA9A
>>138
う~ん・・・そうなるとピクチャ表示よりも軽く表示するのは難しいんですかね・・・
$sp = Sprite.new()
$sp.bitmap = Bitmap.new(\\\"画像名\\\")
$sp.z = 9999
こういう表示方法でやってみようかと思ってるんですが、ピクチャと同じz座標に表示する方法がわからず・・・
結構詰まってます(苦笑
140 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/10(土) 22:56:19 ID:o/1omzBC
同じビューポートに入ってない時点で
z座標は永遠に噛み合いません。
141 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/10(土) 23:11:55 ID:wu6qgA9A
>>140
viewport2ってやつですかね?
それを入れようとしてみたんですが、使い方がわからず・・・
周りに聞けるような人(RGSSわかる人)がいなくて苦戦してます
143 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/11(日) 01:26:14 ID:TQ7qicY3
とりあえず重くなってる原因をはっきりさせよう。
スクリプト「Spriteset_Map」の中に
# ピクチャを更新
for sprite in @picture_sprites
sprite.update
end
と書かれてる場所があるが、ここを
# ピクチャを更新
for sprite in @picture_sprites
#sprite.update
end
に変えて軽くなるかどうか試してみて。
ピクチャが表示されなくなると思うが、これでFPSが良くなったのなら、
ピクチャスプライトの更新処理に時間がかかっているのが原因。
ピクチャスプライトの更新頻度を減らすと改善できるかもしれない。
144 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/11(日) 03:19:31 ID:dSlETHHe
>>141
スクリプトエディタのSpriteset_Mapを見てみると
ピクチャは@viewport2に表示されており、
@viewport2.z = 200
から、このビューポートのz座標は200だとわかる
$sp = Sprite.new
$sp.bitmap = Bitmap.new(\\\"画像名\\\")
$sp.z = 199
これでピクチャの下、
$sp.z = 201
これでピクチャの上に表示されると思う。
$sp.z = 200
の場合は、後で生成したオブジェクトが上に表示されるはず
ちなみに表示するビューポートを指定したい場合は
$viewport9999 = Viewport.new(0, 0, 640, 480) # (x,y,幅,高さ)
$viewport9999.z = 9999
$sp = Sprite.new($viewport9999)
$sp.bitmap = Bitmap.new(\\\"画像名\\\")
こんな感じでやればいい
適当なビューポートを宣言してそこにスプライトを複数表示し、
ビューポート自体に色調の変更をかければ
画面自体の色調は変えずに
その複数のスプライトだけ色調変更、なんてこともできる
146 名前: 137 wu6qgA9A [sage] 投稿日: 2008/05/11(日) 08:28:32 ID:6pmgmy19
>>143
試してみたところ、自作戦闘だと今まで25~32FPSだったのが28~36に改善しました。
また、メニュー画面は24FPSだったのが37FPSまで改善されました。
更新頻度を下げるために、ちょっと無理やりでしたが
if $game_variables[1] == 0
for sprite in @picture_sprites
sprite.update
$game_variables[1] = 1
end
else
$game_variables[1] = 0
end
としてやってみました。そうしたら少しだけですが改善されました。
(ただ、閉鎖された「箱庭」様のtext_pintureというRGSSが誤作動してますが・・・)
これはプレイヤーのPCのスペックに応じて設定で変更できるようにすると
高スペはそのまま、低スペは半分の更新にってできますよね。
何か改善点があればお願いします。
>>144
Spriteset_Mapを見て、そこまでは理解できました。
ただ、ピクチャ(以下Pic)の上や下でなく「Pic1とPic3の間に表示する」ということがやりたいと思っています。
その場合Picのビューポートと同じz座標に作ることが必要になりますよね。
できれば教えていただけると助かります。
147 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/11(日) 09:52:28 ID:BM7rmDZz
>>146
ピクチャの間に表示したい場合、@viewport2を指定する必要がある。
しかし@viewport2はSpriteset_Mapの中にあって、その実体の@spritesetは
Scene_Mapの中にある。それを外側から取り出すには強引な方法しかない。
つまり、問題のスプライトをSpriteset_Mapの内部に何とかして組み込むか、
逆にPic1とPic3も自前のスプライトで処理するかのどちらかが良いのでは。
148 名前: 143 [sage] 投稿日: 2008/05/11(日) 13:35:46 ID:TQ7qicY3
>>146
2フレームに1回、全ピクチャを更新するようになってるけど、
毎フレーム、全ピクチャの半分ずつ更新する方が効果あるかも。
番号が奇数のピクチャだけを更新するフレームと、
番号が偶数のピクチャだけを更新するフレームとを繰り返すようにしてみた。
$game_variables[1] += 1
$game_variables[1] %= 2
for i in 0...@picture_sprites.size
if ((i % 2) == $game_variables[1])
@picture_sprites[i].update
end
end
「$game_variables[1] %= 2」と、「(i % 2)」の2を変更すると、更新頻度を変更できる。
例えば3にすると、毎フレーム、全ピクチャの1/3ずつ更新するようになる。
また、i+1 がイベントで指定してるピクチャ番号なので、
if ((i % 2) == $game_variables[1])
を
if ((i % 2) == $game_variables[1]) || (i+1 == ○○)
と変更すると、ピクチャ番号○○のピクチャは毎フレーム更新するようになる。
動きがカクカクするのが気になるピクチャはやってみると良いかも。
149 名前: 名無しさん@お腹いっぱい。 [sage] 投稿日: 2008/05/11(日) 14:01:49 ID:EGwWg6JW
システム的に更新しなくていいピクチャ番号を決めて
それを更新レンジから外せば?
ただ表示させとくだけのピクチャもあるだろーし。
150 名前: 146 wu6qgA9A [sage] 投稿日: 2008/05/11(日) 14:06:53 ID:Ru0WE6uN
>>147
ピクチャを使わずに自作スプリクトで動かすのはz座標を考えればいいので問題ないのですが、
一部、文字の表示を素材RGSSで行っているんです。(文字をピクチャとして表示するRGSS)
それをスプライトで表示できればいいんですけど・・・
メニューなどのウィンドウ表示処理見てみてもよくわからないので、できれば文字を表示する方法をお教えいただけますか?
なんか質問してばっかりですみません(苦笑
>>148
そういう考え方は思いつきませんでした!
その処理方法を使わせてもらいますね。
これはピクチャで表示するだけでなく、スプライトで処理する時にも軽量化として使えますね。
ありがとうございます!
151 名前: 146 wu6qgA9A [sage] 投稿日: 2008/05/11(日) 14:09:09 ID:Ru0WE6uN
ああ・・・新着見てからにすればよかった・・・
連続で失礼を。
>>149
確かに結構な数のピクチャが一度表示されてから動くこともなく置いてあるだけですね。
すべてのピクチャを更新するから重いんですね・・・
152 名前: 147 [sage] 投稿日: 2008/05/11(日) 14:16:09 ID:BM7rmDZz
>>150
文字を表示するのは、転送元のビットマップに対してdraw_text。
でも軽量化が目的なら、そんなことせずに>>149でいいような気もする。
あとXPはデフォでピクチャが50枚もあるから、使わない分を減らすとか。
153 名前: 146 wu6qgA9A [sage] 投稿日: 2008/05/11(日) 17:48:44 ID:6pmgmy19
>>152
文字は即席でRGSS講座サイトとヘルプ見て勉強して、表示させたりすることができました!
ただ、ピクチャの移動を再現する方法がちょっとわからなくて苦戦中・・・
とりあえず二つの方法をどちらも使えるようにして、その場その場に合った方を使おうと思います。
ちなみにピクチャはデフォの50枚ギリギリまで使っているので減らすことは難しいです・・・
無料レンタルWIKIサービス