忍者ブログ

主にウディタを使ってのゲーム製作についてのブログです  ※更新は不定期

描画順序を求める処理
久しぶりのブログ更新

とはいえウディタでの開発は一時中断中なので書くことがないので
アルゴリズムの記事でも書こうかなっと

とりあえず
描画に関するアルゴリズムについて今回は書こうと思います。

描画とはいえいろいろあるわけですが、
この画像のようにキャラがオブジェクトの後ろ側か手前側かで
描画順序を変える処理(描画順序を求める処理)についてまとめたいと思います。


マップ上で不特定多数のキャラと不特定多数のオブジェクト同士の
描画順序を求めるアルゴリズムという感じですかね。

というわけで本題に入ります。

まず描画グループとグループ同士の描画順序を設定します。
ここでは例として

描画グループは
・主人公や味方
・敵
・オブジェクト
の3つ。

各グループの描画順序は
(前面)>「主人公や味方」>「敵」>「オブジェクト」>(背面)
とします。

また、
マップ上の32ピクセルを1座標(1マス)とした
マップ座標系でこの描画順序を管理し、

ピクチャは1000枚まで使用可能。
(この描画順序処理において描画できる最大の枚数的な感じ)

マップは縦10マス横10マスとします。

とりあえず例としての設定はこんな感じで。


じゃあこれでどうやって順序を求めるかというと
割と単純な話で
各マップY座標別に描画IDを割り当てるという感じになります。


これだと説明不足なので細かく説明していきたいと思います。

まずマップが縦10マス(Y座標0~9)なので
それらの各Y座標にグループを割り当てます。
次に割り当てたグループに描画IDを割り当てます。
データ構造のイメージは以下のような感じです。
 
まぁ描画IDというか描画できる枚数というかそんな感じかも。

もっと詳細に書くと
Y座標0~9にそれぞれ3つのグループを割り当てる(主人公味方,敵,オブジェクト)
その3つのグループはそれぞれ最大でN個ピクチャを登録できるように設定する。

ここでN個の求め方だけど
まずピクチャ(描画)は最大で1000枚まで登録可能で
マップは縦10マス、グループは3つ。
つまり
『N = (1000/10)/3』

(1000/10)は各座標に割り当てれるピクチャの最大数
その最大数をグループの数、3で割ることで
各グループに割り当てれるピクチャの最大数が求まる。

この例の場合
(1000/10)/3 = 33(小数点以下は切り捨て

よって
1グループにつき33枚まで登録が可能になる。


もうこれで終わりになります。
あとは登録して描画するだけ。

Y座標が2の主人公のピクチャを登録するときは
Y座標「2」のグループ「主人公味方」に登録。

次にY座標が同じく2の味方を登録するとしたら
Y座標「2」のグループ「主人公味方」に登録。
このとき「主人公のピクチャ」がすでに登録されているので
次のIDに味方を登録するようにする。
よって以下のようなデータ構造になります。


あとはこの登録したデータをもとに描画処理を行います。

マップ上でY座標が0に近づけば近づくほど(マップ上側)背面
Y座標が9に近づけば近づくほど(マップ下側)前面に描画されるべきなので
ウディタであればピクチャ番号の配分を
「Y座標が小さい方」の登録データを小さいピクチャ番号
「Y座標が大きい方」の登録データを大きいピクチャ番号になるように
割り当てて描画すればいい感じ。

ウディタとかのピクチャ番号という概念がない場合は
マップY座標0から順に描画していく。

もちろんグループ内の順序も忘れなく。

ちなみにここでは描画の順序を決める処理を書いただけで
実際に描画処理と連携する部分は書いていないのでその辺は自分で考えましょう
(書くのめんどい)

ウディタならちょっとめんどくさいことになりそうな予感はするけどね。

あくまでこの処理はC言語で実装した処理なので
ウディタで使いやすいように最適化はしていないので注意。


あと登録するときに主人公等のY座標をもとに登録してたけど、
この場合主人公の足元の座標のマップY座標を使うようにしないと
描画が変なことになるので注意ね。

ここまで書いて思ったけどアルゴリズムというより
単なる描画順序保存用のデータ構造の例だよねこれw

あとなんかいろいろ説明が変な気もする。
まぁ細かいことは気にしない。
というわけでこの辺で終わりにしたいと思います。

(今回の説明ではデータとして登録していく流れで説明したけど
 それとは別の方法をとって
 各座標の各グループの各描画IDを全て1つの連番IDにまとめて
 そのIDを計算で吐き出す処理に書き換えれば
 ウディタとかのピクチャ番号を計算する処理もできると思う)



拍手

PR
COMMENT
Vodafone絵文字 i-mode絵文字 Ezweb絵文字
 管理人のみ閲覧
 
  • 無題
  • from: たかねぇ
アリゴリズム体操~(^^)v
WoditorOptimizer - Ver2.0.1
┗最新版公開日 : 2017/08/31

WoditorOptimizer - Ver1.00 -
┗旧バージョン : 2015/04/18

WECDeletor - Ver1.01 -
┗最新版公開日 : 2012/11/03
09 2017/10 11
S M T W T F S
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
HN:
K-Shin07
性別:
男性
趣味:
ゲーム製作
自己紹介:
趣味でゲームを作っています
プログラマーです

開発ツール・使用言語等
WOLF RPG エディター
・HSP
・C
・VB
・Java
・C++
・C++/CLI
・C#
・アセンブラ
・Haskell

・PHP
・Ruby

・WPF

・DirectX( 9.0c )
・PhysX( 3.X系 )

Mail
 k07.alpha.stella[あっとマーク]gmail.com
[02/26 たかねぇ]
[02/24 たかねぇ]
[06/07 たかねぇ]
[04/23 たかねぇ]
Copyright ©  -- α-Stella[R]_ブログ --  All Rights Reserved

Design by CriCri  /  Material by 妙の宴  /  Background by K-Shin07  /  powered by NINJA TOOLS / 忍者ブログ / [PR]