生まれてから今までいくつのゲームを遊んだだろうか

ゲームを10000本以上遊んでいる者を中心とする、ふりーむの選考委員が選出します。
10000本遊ぼうと思ったら一日一本遊んでも30年くらいかかるぞ。すごいな選考委員

僕はそんな選考委員より一本のゲームを大事に何度も遊んでくれるような選考委員に審査してほしいが。

つい先日、
割と真面目に最優秀賞か優秀賞を飾るのは妖刀伝と思ってます。
というツイートを見かけてにやにやしている。
(まだエゴサーチしてる奴)

というわけで、ふりーむの人気投票が始まりました。
僕も参加したいところだが、プレイ済みのゲームが2本くらいしかないのでどうしたもんかね。
面白そうなゲームはそこそこあるんだが全部プレイしてる暇はないね。

というかパズルゲーム2本しかないんだがパズル部門どうすんだろうな。
ちなみに投票したら

A:「お好きな市販ゲームソフト(またはCD/DVD)」を「1名様」
B:「お好きなギフトカード 500円分(例:図書カード/Amazonギフト券/QUOカード)」を「3名様」
C:「フリーゲームカレンダー2016」を「5名様」


このへんが当たるチャンスがあります。
僕去年タラタラしてんじゃねーよ当たったんだけど今年はないのだろうか。

ゲームソフト(CD/DVD)ってどういうこった?
まさか音楽CDとかでもいいわけじゃないよな?

あと正直カレンダー当たっても困るわけで。
・・・やっぱ投票しないほうがいいかな。


さて、今日はしばらくやってなかったRGSS2講座でも再開してみるとするかね。

RGSS2講座第13回、テーマは「ピクチャを背面に表示する」


ツクールにはピクチャというものがある。

ざっくり言うと画像をそのまま表示できる機能だが、普通に表示するとキャラクターの上に重なって表示されてしまう。
これをキャラクターより後ろに表示したいと思ったことはないだろうか。
僕はある。

イカナイフ1

これをなんとかするのが今日のテーマである。
しかしその前にまずはビューポートとZ座標について理解しなければなるまい。
そんなもんどうでもいいという人は下の方まで読み飛ばすがよい。

Z座標は奥行きなので、プライオリティとでも思えばよい。大きいほど手前に来る。
レイヤーという言葉でピンとくる人はレイヤーだと思えばよろしい。
ビューポートというのはよくわからないのでグループだと思うがよろしい。
ビューポート自体にZ座標があり、さらにビューポートに属しているものにもそれぞれZ座標がある。
つまり二重構造になっているというわけである。

説明が面倒になったので、もうちょっと正しい理解をしたい人は下記のURLで学ぶがよろしい。
http://cacaosoft.blog42.fc2.com/blog-entry-425.html


ここからが本題である。
まずSpriteset_Mapのビューポートの作成のところを見てみよう。
ビューポートの作成
#--------------------------------------------------------------------------
# ● ビューポートの作成
#--------------------------------------------------------------------------
def create_viewports
  @viewport1 = Viewport.new(0, 0, 544, 416)
  @viewport2 = Viewport.new(0, 0, 544, 416)
  @viewport3 = Viewport.new(0, 0, 544, 416)
  @viewport2.z = 50
  @viewport3.z = 100
end

ツクールの初期設定では、ビューポートが3つ用意されている。
ビューポート1のZ座標が0(初期値)
ビューポート2のZ座標が50
ビューポート3のZ座標が100である。


そしてさらにその下を見ていくとわかるが、
ビューポート1に設定されているのが
「タイルマップ」「遠景」「キャラクター」「飛行船の影」であり、
ビューポート2に設定されているのが
「天候」「ピクチャ」「タイマー」
ビューポート3に設定されているのが
「ウィンドウ」
と言いたいところであるが、どうもウィンドウはZ座標100だがビューポート3には設定されておらず、ビューポート3は使われていないような気がする。このへんはよくしらない。

なんで影だけ?飛行船は?
吹き出しアイコンは?
アニメーションは?
とかいろいろと疑問はありそうな気がするが、気にしないでくれたまえ。
僕にも細かいことはよくわからん。

で、例えばビューポート1の中でも細かくZ座標が決まっていたりして、
キャラクターなら、
「☆がついていないタイル」→Z座標は40
「通常キャラの下」→Z座標は60
「通常キャラと同じ」→Z座標は100
「☆がついているタイル」→Z座標は160
「通常キャラの上」→Z座標は200
となっている。
(Game_Characterの「画面 Z 座標の取得」で設定されている)

例えば「通常キャラの上」のZ座標は200だが、これはビューポート1の中でのZ座標なので、たとえ1000にしようが10000にしようがビューポート2のピクチャより上にすることはできない。

二重構造の意味がお分かりいただけただろうか。



そこで本題に戻るわけだが、読み飛ばした人はそろそろ戻ってきていただきたい。

まずは、「ピクチャ」をビューポート2から1に引きずりおろしてやる必要がある。
先ほどのSpriteset_Mapのピクチャスプライトの作成のところを見る。
ピクチャスプライトの作成
#--------------------------------------------------------------------------
# ● ピクチャスプライトの作成
#--------------------------------------------------------------------------
def create_pictures
  @picture_sprites = []
  for i in 1..20
    @picture_sprites.push(Sprite_Picture.new(@viewport2,
    $game_map.screen.pictures[i]))
  end
end

この「viewport2」の部分を「viewport1」にしてやる。

これでピクチャがキャラクターより下になったかと思いきや、まだである。
なぜなら、そもそもピクチャはZ座標が100+ピクチャ番号だからである。
「通常キャラの上」は200なのでピクチャより上に来るが、「通常と同じ」は100なので、まだピクチャより下に来てしまうであろう。

そこで、Sprite_Pictureのフレーム更新のところを見る。
スプライトピクチャ
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
  super
  if @picture_name != @picture.name
    @picture_name = @picture.name
    if @picture_name != ""
      self.bitmap = Cache.picture(@picture_name)
    end
  end
  if @picture_name == ""
    self.visible = false
  else
    self.visible = true
    if @picture.origin == 0
      self.ox = 0
      self.oy = 0
    else
      self.ox = self.bitmap.width / 2
      self.oy = self.bitmap.height / 2
    end
    self.x = @picture.x
    self.y = @picture.y
    self.z = 100 + @picture.number
    self.zoom_x = @picture.zoom_x / 100.0
    self.zoom_y = @picture.zoom_y / 100.0
    self.opacity = @picture.opacity
    self.blend_type = @picture.blend_type
    self.angle = @picture.angle
    self.tone = @picture.tone
  end
end

「self.z = 100 + @picture.number」
ここでピクチャのZ座標を「100+ピクチャ番号」にしていることがわかるだろう。
この「100」を「1」にする。
これでたぶんすべてのピクチャがキャラクターより下になるはずだ。

えっすべてのピクチャが

と思った人は、例えばこういう風にしてみよう。
if @picture.number == 20
  self.z = 1
else
  self.z = 1000 + @picture.number
end


これで、ピクチャ番号を20に設定したピクチャだけがキャラクターより下に来るようになる。
他のピクチャには一応1000足してキャラクターより上に来るようにする。(たぶん200で事足りる)
こうすれば管理しやすいのではないだろうか。
僕はこうしている。

イカナイフ2


ちなみに妖刀伝のタイトルと、「終幕」が切れるシーンはこのテクを利用している。
もものエンディングのスタッフロール(キャスト)を作った時はこのテクを知らなかったので大変なことになった。

絵が描ける人ならこのテクを使って、マップをピクチャで再現することで深みのあるマップが作成できるのではないだろうか!
僕はやっていない。


以上、RGSS2講座第13回、「ピクチャを背面に表示する」でした。
かげろうでした。


RGSS講座目次

RGSS講座番外編
スポンサーサイト

コメントの投稿

非公開コメント

Index

ブログ趣旨
メンバー紹介
制作ゲーム紹介
RGSS2講座

最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR