実際にDXライブラリと連携させながらその都度必要な機能を足していくことにする。
ゲームのシステム層もある程度仕組みが必要になってくるしね。
まず画像配置・オブジェクトの演出処理などはスクリプトに追い出したい
public class SceneTitle : SceneBase{
public override void init(){
base.init();
loadAssembly( "resource/script/title/title.ss" );
}
public override void onUpdate(){
base.onUpdate();
}
public override void onDraw(){
base.onDraw();
DX.DrawString( 0 , 0 , "Title" , DX.GetColor( 255 , 255 , 255 ) );
}
}
シーンクラスも継承しないで読み込むリソースファイルの対応表テーブルを作ってしまって
一か所にしてしちゃってもいいかもしれない。
シーン基底の処理では
public void onInit(){
m_assemblyInfo = null;
m_lyt = LayoutManager.Instance.CreateLayout( "SceneLayout" );
m_nextScene = 0;
init();
m_driver.execFunc( "init" );
}
public virtual void onUpdate(){
if( m_driver == null ) return;
m_driver.execFunc( "update" );
m_driver.update_coroutine();
}
そしてスクリプト側の実装
int lyt;
void init(){
lyt = Lyt_Get( "SceneLayout" );
Lyt_LoadGraph( lyt , "resource/img/title/00.png" , "背景" );
Lyt_LoadGraph( lyt , "resource/img/title/02.png" , "射命丸" );
Lyt_LoadGraph( lyt , "resource/img/title/01.png" , "タイトルロゴ" );
Lyt_LoadGraph( lyt , "resource/img/title/press_to_enter.png" , "ぷれすとぅーえんたぁ" );
レイアウト参照を取得するのと指定のレイアウトにテクスチャをロードする。
private void Lyt_Get( ss.SSDriver d ){
string objectName = d.popMemory().string_value;
for( int i = 0 ; i < LayoutManager.Instance.rootLayout.childCount ; i++ ){
if( LayoutManager.Instance.rootLayout[i].ObjectName == objectName ){
d.Return( LayoutManager.Instance.rootLayout[i].HandleID );
return;
}
}
}
private void Lyt_LoadGraph( ss.SSDriver d ){
Console.WriteLine( "Lyt_LoadGraph called!!" );
string objectName = d.popMemory().string_value;
string fileName = d.popMemory().string_value;
int lytHandle = (int)d.popMemory().value;
LayoutObject lyt = LayoutManager.Instance.GetLayout( lytHandle );
lyt.Lyt_LoadGraph( fileName , objectName );
}
Lyt_EntryPictObjで指定のレイアウト参照に画像描画用オブジェクトを生成する。
Lyt_SetPictPosで画像の座標を変更
この画像の座標はそのうちPSDレイアウトのコンバータでも作って初期位置を定義した上で
オフセット座標を渡す感じで制御したいかもしれない。
と、システムAPIに頼りっぱなしだがこれだけでもとりあえず画像が制御できる。
まだまだ苛め貫かなければね