Amazon 初売り

« Windows 8.1 Pro 64bit版のインストール作業中におきた問題 | トップページ | GitHubのお勉強 »

2015.10.18

ssbpLib 1.0.1 → 1.1.1 に変更した時、ちょっと「つまずいた」ので手順をまとめてみた

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

本題に入る前に、軽く、近況などを。

久々のブログの更新になります。

作業途中だったメニュー関連のイージング関数対応は、
一区切りしてたんですが
仕事で10月から新しいプロジェクトに入ったので
覚えることが多くて勉強とかしたりしてたこともあって
ブログの更新をサボってしまいました。

今思うとメニューの処理が一区切りついたところで
1つ記事を書いておけば良かったかもね。

さて、そろそろ本題のssbpLibに入りましょう。
実は、下記のツイートを見逃していたことに今日気づきました。

なので早速、ssbpLibのバージョンを上げることにして
せっかくなので手順をまとめようと思って作業を始めたところ
ちょっと「つまずく」ことがあったので
tracだけじゃなく、ブログにも記事を書くことにしました。

▼2015/11/01追記ここから▼
かげさんが作業した時には、調べながらだったのでつまづきましたが、
D.KさんがGitHubのWikiに情報記載してくれたので
2015/10/22以降にGitHubのWikiを見た人は、つまづかないと思います。



▲2015/11/01追記ここまで▲

まずダウンロードするものですが
SpriteStudio5-SDK
必要なのはSs5Converterだけなのでコチラでも良いです。

それと「ssbpLib」の2つです。

なお、ssbpLibは、新しいのをダウンロードする時に
前のバージョンのファイル一式は消さずに残しておきましょう。
消しちゃった場合は、以前のと同じバージョンも一緒にダウンロードしましょう。
(後で差分比較に使うので、古いバージョンも展開するのを忘れずに)

ダウンロードしたファイルを展開したら
ssbpLibのPlayers\ssbpLibフォルダにあるファイル一式を
F:\Visual Studio 2008\Projects\HatsuneMikuBoukenki\SSPlayer
に上書きコピーし
ssbpLibのsamples\DXLibrary\basic\Resources\character_template_comipoフォルダにあるファイル一式を
F:\Visual Studio 2008\Projects\HatsuneMikuBoukenki\character_template_comipo
に上書きコピーする。
(F:\Visual Studio 2008\Projects\HatsuneMikuBoukenki\は各自の環境に合わせてね)

さて、このままビルドすると大量にエラーやワーニングが出ます。
前回と違って

warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。

というメッセージはでてませんでしたが、
SSPlayerフォルダにあるソースファイルが、文字コードがUTF-8になっているのが原因です。

SSPlayerフォルダにあるソースとヘッダファイル全部の文字コードをSJISにします。
初音ミク冒険記はSJISで作っているのでSJISにしましたが
DXライブラリのUnicode版を使っている人はUnicodeに変換するのが良いのだと思います。

合わせて改行コードもCRLFにしておきます。
こういう時、EmEditorを使っていると
メニュー「ファイル」-「すべてのエンコードを指定して保存」で
EmEditorで開いている全ファイルの文字コードと改行コードを
一括で変更してくれるので便利です。

これで、かなりの量のエラーや警告が減るんですが
なんと、前のバージョンにあったpauseやresumeメソッドが無いというエラーが出てます。
(pauseやresumeを使っていない人には関係ないかもしれません。)

はい、ここで前のバージョンとの比較が必要になります。
かげさんは、フォルダ単位でも比較ができるフリーソフトのDFというので
今回バージョンと前バージョンの比較をしました。

DFの場合、起動した後に比較対象フォルダをドラッグ&ドロップすると
比較できます。
(かげさんは面倒なので、送るメニューにDFを入れて送るメニューから起動してます)

Ssbplibverup01

どうやら関数名が
pause → animePause
resume → animeResume
と変わったようです。

なので、冒険記側で呼び出す時の関数名を新しいものに変更します。

で、これで解消されるのは、このエラーだけで
わんさかリンクエラーが残ります。

これは、今回のバージョンアップでエフェクトに対応しているので
ソースが増えているのが原因です。

再びフォルダ比較をします。
Ssbplibverup02

一番上の階層のフォルダにはソースの増減はないようです。

次にcommonフォルダ。

Ssbplibverup03

Animater
Helper
Loader
と3つフォルダが増えています。
さらに、ssplayer_matrix.cppとssplayer_matrix.hがなくなっています。

実は、かげさん、この段階では
Animater
Helper
Loader
のフォルダが増えているのには気づいていて
上記の3つのフォルダのソースをVC++のプロジェクトを選択して
右クリックメニュー「追加」-「既存の項目」で
プロジェクトに取り込むというところまでは、やっていたいました。

が、ソースのフォルダを比較してなかったので
commonフォルダからssplayer_matrix.cppとssplayer_matrix.hがなくなっていることに
気づいてませんでした。
(実際にはこの2つのソースはAnimaterフォルダに移動されてました)

そうなると、どうなるか?
はい、新旧のssplayer_matrix.cppとssplayer_matrix.hが
VC++プロジェクトに混在した形になります。

つまり、ssplayer_matrix.cppの関数が重複しているので
リンクエラーが残るのです・・・

普通ならソリューションエクスプローラ上で
同じソースが2つ並んでたら、すぐに気づきそうなものですが
かげさんは、フィルターを使ってソースを階層構造で管理しているので
同じのが2つあるのに気づいてませんでした。

そう、フィルターにソースを入れても
エクスプローラ上ではフォルダ階層が異なるので
重複ファイルにならないのです・・・

ここはフォルダ比較するまで気づきませんでした・・・

ということで、古い方のssplayer_matrix.cppとssplayer_matrix.hは
VC++プロジェクトから削除します。

この時、物理的に消すなら「クリア」じゃなく「削除」なんですが
かげさんは、ソースのバージョン管理をしている関係で
この段階で物理的にファイル削除されちゃうと面倒なんで「クリア」にして
プロジェクトファイルからだけ削除しました。

さて、これで動くと思ったのですが
次は起動時にアプリケーションエラーが出るようになりました。

SpriteStudio関連のロジック以外は、変更していないので
今回の変更が原因なのは確定です。

まず最初に疑ったのは、ssbpファイルのバージョンでした。
まだ冒険記ではssbpLibのサンプルの
character_template_comipoのssbpしか動かしていないので
ファイルを見たんですが、今回のssbpLibのサンプルと同じssbpファイルになってます。

???

よくわからないのでssbpLib関連のロジックの呼び出し元を止めてみました。
すると問題なく起動します。

なんでだ? と思ったらSpriteStudio for Indeiを使う条件となっていた
スプラッシュスクリーンのssbpの存在を忘れてて、新しくし忘れてただと!?

はい、ここでSs5Converterが必要になります。
対象が1ファイルだけなのでコマンドライン版でも良かったのですが
今回は、GUI版の「Ss5ConveterGUI.exe」を起動します。

Ssbplibverup04

シンプルな画面なので使い方も簡単です。
該当のsspjファイルを上のリストボックスにドラッグ&ドロップして
「Convert Start」ボタンをクリックするだけ。
これで「Status」に「Convert Sucsess!」と出ればOKです。

GUI版の「Ss5ConveterGUI.exe」だと「List Save」というボタンがあります。
これで先ほどドラッグ&ドロップしたsspjファイル」のリストが保存できます。

今後、変換が必要になるsspjファイルは増えるはずなので
今からリストを作る意識をつけておくって寸法です。

これでビルドが通るようになりました。

が、なんかssplayer->setPositionの仕様が変わっているっぽくて
前のバージョンと同じ場所に表示されないから
最初表示されなくなったと思って結構焦った

たぶん、初音ミク冒険記で言うと
スクリーン座標指定がスクロール対応したマップ座標指定に変わって
表示キャラクターの原点座標も変わっていると思われる。
もしかすると原点座標が左上から左下に変わったのかもしれないが・・・

▼2015/11/01追記ここから▼
その後、教えてもらった情報


かげさんの対応としては、#define UP_MINUSを有効にすることにした。
なお、定義するのは、ss5player.hの
#define UP_MINUSがコメントアウトされている行のコメントアウトを解除することにした。
これは、namespaceの都合でこうしました。
▲2015/11/01追記ここまで▲

こういう変更が入るとなると
直接呼ぶ形式だと問題解消が大変になるから
やっぱりssbpLibのラッパー関数を冒険記側で作っておかないと
こういった仕様変更を吸収するのが大変になりそうだなぁと思った。

とりあえずHSP版のDLLのソースを参考にして
ラッパー関数を作らないとダメそうだな。

そこではゲーム内座標から画面表示座標に変換できるようにしておこう。


 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

このエントリーへのリンク

このエントリーのリンクを入れるHTML:

トラックバック

この記事へのトラックバックの一覧です: ssbpLib 1.0.1 → 1.1.1 に変更した時、ちょっと「つまずいた」ので手順をまとめてみた:

コメント

このブログの新着コメントをRSSリーダに登録する為のxml




←名前とメールアドレスは必須です。
URLも記入すれば、URLのみが公開されます。
メールアドレスのみですと、メールアドレスが公開されてしまいますので、御注意ください。

↓コメント本文では、「a href」「b」「i」「br/」「p」「strong」「em」「ul」「ol」「li」「blockquote」「pre」のタグが使えます。絵文字をクリックすると、本文にタグを挿入できます。