前回でアニメーションの方針が決まりました。
今回はモデルクラスの修正をやってみましょう!
現状のモデルクラスには背景作成用とキャラ作成用のメソッドがありますね。
CreateBackとCreateCharaです。
背景はそのままでいいのでキャラの方にアニメーションさせるための情報を渡すようにします。
アニメーションの情報はModelDataクラスで渡すことにします。
というわけで、ソースを追加しましょう!

ModelData.javaを追加しました。
次にメンバ変数を追加しましょう。
必要な物は、アニメーションの一コマの表示領域ですね。
なのでまずはデータを定義します。
package com.hitman.Model;
// モデルデータ
public class ModelData
{
// シーンの表示領域
public class DrawArea
{
// コンストラクタ
public DrawArea( float left, float top, float right, float bottom )
{
super();
m_Left = left;
m_Top = top;
m_Right = right;
m_Bottom = bottom;
}
// 領域取得
public float GetLeft() { return m_Left; }
public float GetTop() { return m_Top; }
public float GetRight() { return m_Right; }
public float GetBottom() { return m_Bottom; }
private float m_Left;
private float m_Top;
private float m_Right;
private float m_Bottom;
}
}
ここからは一コマのことをシーンと呼ぶようにします。
次に、一つのアニメに付き一つの画像を持つ必要があるのでアニメ毎のデータを定義します。
このクラスに↑の表示領域も持っちゃいます。
// 1アニメの情報
public class AnimData
{
// コンストラクタ
public AnimData( String strImageName, TextureResource.TEXTURE_TYPE imageType )
{
super();
m_Image = App.GetTextureResource().Load( strImageName, imageType );
m_aDrawArea = null;
}
// シーンの数設定
public void SetSceneNum( int num )
{
m_aDrawArea = new DrawArea[ num ];
}
// シーンの設定
public void SetSceneData( float left, float top, float right, float bottom, int sceneIndex )
{
m_aDrawArea[ sceneIndex ] = new DrawArea( left, top, right, bottom );
}
// テクスチャ取得
public Texture GetTexture()
{
return m_Image;
}
// 表示領域取得
public DrawArea GetDrawArea( int sceneIndex )
{
return m_aDrawArea[ sceneIndex ];
}
private Texture m_Image;
private DrawArea[] m_aDrawArea;
}
このクラスをModelDataクラスで持つようにします。
アニメの数だけ必要なので配列で持てるようにします。
// モデルデータ
public class ModelData
{
:
:
private AnimData[] m_aAnimData;
private TextureResource.TEXTURE_TYPE m_ImageType;
}
ついでにテクスチャタイプも持たせるようにしちゃいました。。。
あとはアニメの数の設定、シーンの設定を行うメソッドを追加します。
// 用途別に作成
static public ModelData CreateBack()
{
return new ModelData( TextureResource.TEXTURE_TYPE.BACK );
}
static public ModelData CreateChara()
{
return new ModelData( TextureResource.TEXTURE_TYPE.CHARA );
}
// アニメの数設定
public void SetAnimNum( int animNum )
{
m_aAnimData = new AnimData[ animNum ];
}
// アニメ情報の設定
public void SetAnimData( String strImageName, int sceneNum, int animIndex )
{
m_aAnimData[ animIndex ] = new AnimData( strImageName, m_ImageType );
m_aAnimData[ animIndex ].SetSceneNum( sceneNum );
}
// シーン情報設定
public void SetSceneData( float left, float top, float right, float bottom, int sceneIndex, int animIndex )
{
m_aAnimData[ animIndex ].SetSceneData( left, top, right, bottom, sceneIndex );
}
// アニメデータ取得
public AnimData GetAnimData( int animIndex )
{
return m_aAnimData[ animIndex ];
}
// コンストラクタ
private ModelData( TextureResource.TEXTURE_TYPE imageType )
{
super();
m_aAnimData = null;
m_ImageType = imageType;
}
これでモデルデータができました。
かなり長くなったので続きはまた今度。。。