オーパーツは現代でも通用するのかというお話

この記事はAdventCalender 9日目の記事です.

風邪気味でつらい手羽先です.
「DxlibとSiv3Dの比較したくない?しろ」っていわれたんでちょっとだけやります.

導入について(Visual Studio 2015)

Dxlib

パッケージをダウンロードしてきて解凍するだけ, インストールとかはない.
導入自体は楽, ただ実際にプログラムを書き始める前にコンパイルのためにプロジェクトの設定をするのがすごく面倒, 本当に面倒
具体的にはここを参考に.

Siv3D

インストーラをダウンロードしてきて実行, その後PC再起動しておわり!
はやい(小並感)

新規にプロジェクトをつくるのも
1. Visual Studio 2015 を起動し、 | ファイル | → | 新規作成 | → | プロジェクト | を選択
2. | ▼テンプレート | → | ▼Visual C++ | の一覧にある | Siv3D(August2016v2) | を選択
だけと簡単.
はやい(確信)

あたり判定について

個人的に一番大きいと思ってるのがこれ, Siv3Dにはあたり判定を処理してくれる関数がある.
比較的複雑な図形同士の判定も正確に判定できるし, 違う図形同士の判定まで取れてしまう, つよい.
Dxlibでやろうとすると面倒くさい…

3Dモデルについて

Dxlib

読み込むことのできるモデルファイル形式は .x, MPO, MV1, MMD.

各ファイル形式それぞれで異なる表現をしているマテリアル情報を無理矢理DXlibのマテリアル表現で扱おうとするため、 大抵の場合モデリングソフト上とは異なった見た目になってしまう, らしい. なので, DXlibに合わせてモデルファイルのマテリアルを調整するなり, DXlibの3Dツールでマテリアルを調整してからライブラリの専用形式である mv1 形式で保存して、そのファイルを使う必要がある.

MMDのモーションやらをそのまま使えるので音ゲーにPVつけたりするのはこっちのが楽かもしれない.

Siv3D

現在のバージョンで対応している 3D モデルファイルの形式は OBJ  のみ.

3Dのわりに3Dの機能少なくない?

ちょっとしたサンプル

Dxlib

#include "DxLib.h"

class box {
 private:
 int x_start, x_end, y_start, y_end;
 int Cr;
 public:
 void setgid(int x1, int x2, int y1, int y2);
 void boxdraw(int point_x, int point_y);
};

void box::setgid(int x1, int x2, int y1, int y2) {
 x_start = x1;
 x_end = x2;
 y_start = y1;
 y_end = y2;
}

void box::boxdraw(int point_x, int point_y) {
 if (point_x > x_start&&x_end > point_x&&y_start < point_y&&y_end > point_y) {
 Cr = GetColor(0, 0, 255);
 }else {
  Cr = GetColor(255, 0, 0);
 }
 DrawBox(x_start, y_start, x_end, y_end, Cr, TRUE);
}

//メイン関数のようなもの
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow){
 ChangeWindowMode(TRUE);
 DxLib_Init();
 SetDrawScreen(DX_SCREEN_BACK);
 SetMouseDispFlag(TRUE); 

 int MouseX, MouseY;
 box hako;

 hako.setgid(100, 200, 100, 200);

 while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
  GetMousePoint(&MouseX, &MouseY);
  hako.boxdraw(MouseX, MouseY);

  ScreenFlip();
}
 DxLib_End(); 
 return 0;
}

Siv3D

#include <Siv3D.hpp>

void Main(){
 const Rect rect(20, 20, 200, 100);

 while (System::Update()) {

  // 長方形の上にカーソルがあるか
  const bool r = rect.mouseOver;

  // カーソルが重なっていたら赤、そうでなかったら黄色で図形を描く
  rect.draw(r ? Palette::Red : Palette::Yellow);
 }
}

やってるのはだいたい同じようなことです(長方形の上にマウスカーソルを置くと色が変わる).
なんだこの量の差は…

おしまいに

Siv3D強くない…?
Dxlibは強いて言うならC++じゃなくてほぼCでなんとかなるのは利点かもしれない.
リファレンスはDxlibのが充実してる, というかSiv3Dが新しいものなのでまだ充実しきってない.

私は基本Dxlibを使ってるのですが, Siv3Dにはあたり判定の処理の楽さとかいろいろ利点があるので使ってみようかなぁ, と思ってたりします.
処理速度とかも比較したかったのですけどそのあたりはまたいずれ機会があれば.

たいした比較もできてませんが記事を読んでくださりありがとうございました.


コメントを残す

メールアドレスが公開されることはありません。