ゆっくりしていってね!!
ゆっくりしていってね!!
掲示板
掲示板でゆっくりしていってね!!
ゆっくりしていってね!!
Classファイル
.Net2.0で作り始めた人が居るみたいなので、キャラクターファイルに同梱されているxmlを解くクラスを置いておくですね
VBで作ってるキャラクターファイル生成ツールから抜き出しているので、最新です


構造は比較的単純なので、他言語への変換器へ入れてもかなり正確に変換してくれると思います
VB以外を使っている場合は、各種変換を使用してくださいませ
Dim loadYukkuri = (New Yukkuri).SettingRead(strPath & "\Yukkuri.xml")
で読み込ませることが出来ます
loadYukkuri.YukkuriUnits()
により、定義情報の入ったクラスの配列を呼び出すことが出来ます

ゆっくりたちは、以下の基本的な構造により定義されています

YukkuriUnits() -- YukkuriUnit Classの配列

YukkuriUnit Classの構成
ImageID() As String = {}
MovePoint() As Point = {}
EventName As String


YukkuriUnitを動作パターンの数だけ配置し、プログラム内部でそれをランダムに呼び出す事によりフラフラ動く動作を作り出しています


動作:
ゆっくりたちは、秒間10回描画されるように作られています
ImageIDやMovePointの配列も、ソレに伴い10の倍数で構成されています
一秒間に一回、YukkuriUnitsから全動作パターンを呼び出し、その中からランダムに一つチョイスします
そしてそのチョイスしたパターンを使用して、その一秒間の動作を決定します

0.0秒 -- 一秒間の動作パターン決定
    配列0番目のImageIDの絵を描画し、配列0番目のMovePoint分だけ移動
0.1〜0.9秒 -- 配列の1〜9番目のImageIDの絵を描画し、配列1〜9番目のMovePoint分だけ移動

特記事項:
一部のキャラクター定義には、10パターンを超えてるモノが存在します
動作パターン絵が多すぎて、10パターンでは全てが描ききれないからです
そこで、動作パターン決定する時に直前一秒間で使用した動作パターンをチェックし、パターン数が10を超過してる場合続きを呼び出す処理をしています

0.0秒 -- 直前一秒の動作を呼び出し
    直前一秒間のパターンが10超過か確認
    ・超過してる場合は、超過分を処理
    ・超過して無い場合は、次の処理をランダムに決定
以下、コード全文
Public Class YukkuriUnit
    Public ImageID() As String = {}
    Public MovePoint() As Point = {}
    Public EventName As String
    Public Sub New()
    End Sub
    Public Function Clone() As YukkuriUnit
        Dim sa As YukkuriUnit = New YukkuriUnit
        sa.MovePoint = Me.MovePoint
        sa.EventName = Me.EventName
        sa.ImageID = CopyList(Me.ImageID)
        Return sa
    End Function
    Private Function CopyList(ByVal strList() As String) As String()
        Dim iid(strList.Length - 1) As String
        Dim intCount As Integer = 0
        For Each str As String In strList
            iid(intCount) = str
            intCount += 1
        Next
        Return iid
    End Function
End Class
Public Class Yukkuri
    <Xml.Serialization.XmlArrayItem(Type:=GetType(Image))> Private _YukkuriUnits As YukkuriUnit()
    Public Property YukkuriUnits() As YukkuriUnit()
        Get
            Return _YukkuriUnits
        End Get
        Set(ByVal Value As YukkuriUnit())
            _YukkuriUnits = Value
        End Set
    End Property

    Public Sub New()
    End Sub

    Public Function Clone()
        Dim yuk As Yukkuri = New Yukkuri
        yuk.YukkuriUnits = CopyList(YukkuriUnits)
        Return yuk
    End Function

    Private Function CopyList(ByVal strList() As YukkuriUnit) As YukkuriUnit()
        Dim list(strList.Length - 1) As YukkuriUnit
        Dim intCount As Integer = 0
        For Each dat As YukkuriUnit In strList
            list(intCount) = dat.Clone
            intCount += 1
        Next
        Return list
    End Function

    Public Sub SettingWrite(ByVal strPath)
        Dim serializer1 As New System.Xml.Serialization.XmlSerializer(GetType(Yukkuri))
        'ファイルを開く
        Dim fs1 As New System.IO.FileStream(strPath, System.IO.FileMode.Create)
        'シリアル化し、XMLファイルに保存する
        serializer1.Serialize(fs1, Me)
        '閉じる
        fs1.Close()
    End Sub

    Public Function SettingRead(ByVal strFile As String) As Yukkuri
        Dim serializer2 As New System.Xml.Serialization.XmlSerializer(GetType(Yukkuri))
        'ファイルを開く
        Dim appSettings As New Yukkuri
        Try
            Dim fs2 As New System.IO.FileStream(strFile, System.IO.FileMode.Open)
            'XMLファイルから読み込み、逆シリアル化する
            appSettings = CType(serializer2.Deserialize(fs2), Yukkuri)
            '閉じる
            fs2.Close()
        Catch
        End Try

        Return appSettings
    End Function
End Class