独学ツクールブログ

ツクールでのオリジナル作品の話を中心に創作関係の徒然な語り。

<< 吉里吉里予習1:処理順を把握する | main | 吉里吉里予習2:Config.tjs >>

[ - ] スポンサーサイト

一定期間更新がないため広告を表示しています

| 2018.05.23 Wednesday | - | - |

[ RGSS奮闘記 ] ナイスブロック

RGSSをやってると、「インスタンスの配列」が必要になってくることがある。 それはActorかもしれないしSpriteかもしれないが、個人的に最たるものはWindowであると思う。 例えばプリセットのScene_FileではWindow_SaveFileの配列を作って管理している。 しかしその定義のコードを見てみると……

@savefile_windows = []
for i in 0..3
  @savefile_windows.push(Window_SaveFile.new(i, make_filename(i)))
end
┌┴┐┌┴┐┌┴┐ -┼-  ̄Tフ ̄Tフ __ / /
  _ノ   _ノ   _ノ ヽ/|    ノ    ノ       。。
       /\___/ヽ
    /ノヽ       ヽ、
    / ⌒''ヽ,,,)ii(,,,r'''''' :::ヘ
    | ン(○),ン <、(○)<::|  |`ヽ、
    |  `⌒,,ノ(、_, )ヽ⌒´ ::l  |::::ヽl  
.   ヽ ヽ il´トェェェイ`li r ;/  .|:::::i |
   /ヽ  !l |,r-r-| l!   /ヽ  |:::::l |
  /  |^|ヽ、 `ニニ´一/|^|`,r-|:「 ̄
  /   | .|           | .| ,U(ニ 、)ヽ
 /    | .|           | .|人(_(ニ、ノノ
いつもいつも思うがなんでforなんだよ! んでなんで無駄にpushは使ってるんだよ! 例えば、Windowの配列を作る場合、上記のコードのように空配列にpushするか、
@savefile_windows = Array.new(3) {|i|
  Window_SaveFile.new(i, make_filename(i))
}
とArray#newに引数を渡して生成する。 ここではWindow_SaveFileをnewしただけだが、これがSpriteになるとどうだろうか? Spriteクラスの場合、通常は生成後にbitmapプロパティに何らかの値を渡す。が、
@sprites = Array.new(3) {|i|
  Sprite.new.bitmap = RPG::Cache.picture("picture#{i}")
}
のようにしても上手くいかない。なぜなら、Sprite.new.bitmapとした時の戻り値はBitmapクラスになるからだ。 ここで、戻り値をSpriteにするための原始的な手順としては
@sprites = Array.new(3) {|i|
  s = Sprite.new.bitmap = RPG::Cache.picture("picture#{i}")
  s
}
というのがあるが、これが非常にダサいのは言うまでもない。 ということでお出ましなのがObject#tapメソッド。 だいぶ前にベーススクリプトのところで名前だけは出したこのメソッドが活躍する。 tapは「ブロックを評価した後selfを返す」という個性的なメソッド。この「selfを返す」裏を返せば「ブロックの評価結果を返さない」という特徴がいろいろな場面で役に立つ。その一つが、まさに上に述べた「インスタンスの配列」である。
@sprites = Array.new(3) {|i|
  Sprite.new.tap {|s|
    s.bitmap = RPG::Cache.picture("picture#{i}")
  }
}
tapの戻り値はself、ブロックパラメータもselfだ。つまりこうすることでめでたくSpriteの配列を作ることができた。 tapが「ブロックを評価してselfを返す」と分かっていればこんなに簡単な記述はない。 ということで非常におすすめである。 ちなみに拙作Script No.002 セーブファイル数増量でも実際に使用している。

タグ:[Ruby] [RGSS] [Object#tap]

| 2015.02.09 Monday 21:58 | comments(0) | trackbacks(0) |

[ - ] スポンサーサイト

| 2018.05.23 Wednesday 21:58 | - | - |

コメント

コメントする






この記事のトラックバックURL

トラックバック

このページの先頭へ▲

Twitter

WebClap

Blogram

ブログランキングならblogram

calendar

S M T W T F S
  12345
6789101112
13141516171819
20212223242526
2728293031  
<< October 2019 >>

categories

archives

Amazon

selected entries

recent comment

recent trackback

recent ranking

links

search this site.

sponsored links

others

mobile

qrcode

powered

無料ブログ作成サービス JUGEM