Apricotのキャラクター作成に関するFAQ

Apricotのキャラクター作成に関してのFAQをまとめてみました。キャラクター作成の助けになれば幸いです。

台詞の組み換えを無効にするには?

Apricotには、XMLファイルから読み込まれた台詞を組み替えることにより新しい台詞を生成する機能を持っています。但し、この機能はActivateのsequenceに書かれたmessegeを対象としています。
なので、この機能を無効にするには、Activateのsequenceから他のActivateWithoutRecombinationなどのsequenceを呼び出すことで可能です。

<sequence name="Activate">
<call name="ActivateWithoutRecombination">
</sequence>
<sequence name="ActivateWithoutRecombination">
<message>ほげほげ</message>
(省略)
</sequence>
<sequence name="ActivateWithoutRecombination">
<message>はろーわーるど</message>
(省略)
</sequence> 

バルーン(噴出し)の位置を変更するには?

バルーンの位置を変更するには、x座標とy座標で方法が異なります。

まず、x座標についてですが、バルーンはcharacterタグで設定されたwidthを2で割った値の位置を基点として表示されます。
なので、画像を表示する際にimageタグのx座標を設定することでバルーンの表示位置を調整出来ますが、characterタグのoffset-x属性の値を変更し原点を設定しなおす事でバルーンの表示位置を調整することも出来ます。

次に、y座標の変更の仕方は、characterタグのoffset-yの値を変更分の値を設定します。その後、imageタグの属性yの値を、変更分の値に-1(マイナス)を掛けた値を設定します。(変更分の値が25の場合には-25)

下の例では、変更分は25ピクセルですが、上に跳ねるアニメーションをするため余白を60ピクセル空けています。

  <character name="すってんうどんげ" x="0" y="0" width="320" height="320" offset-x="40" offset-y="85">
    <sequence name="Neutral">
      <motion fps="8" z-index="0">
        <image x="0" y="-25" width="240" height="196">Images\Udon.png</image>
      </motion>
    </sequence>
(省略)
  </character>

台詞を外部から取得してきたものを使うには?

Twitterなどの発言や、外部のファイルに書かれた台詞を使うにはXSLTを使います。
XSLTを使うには、まずキャラクターが定義しているXMLファイルに「」を宣言し、「Script.xsl」ファイルをXSLTで使用するように設定します。

<?xml version="1.0" encoding="utf-8" ?>
<?xml-stylesheet type="text/xsl" href="Script.xsl" ?>
<script id="ネムケ">
(省略)
</script>

次に、XSLに基づいた「Script.xsl」ファイルを作ります。下記の例では、Twitterから取得した発言(XML)を、キャラクターが喋る台詞として追加しています。

<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes" />
  <xsl:template match="/">
    <script>
      <xsl:attribute name="id">
        <xsl:value-of select="/script/@id" />
      </xsl:attribute>
      <character>
        <xsl:attribute name="name">
          <xsl:value-of select="/script/character/@name" />
        </xsl:attribute>
        <xsl:attribute name="x">
          <xsl:value-of select="/script/character/@x" />
        </xsl:attribute>
        <xsl:attribute name="y">
          <xsl:value-of select="/script/character/@y" />
        </xsl:attribute>
        <xsl:attribute name="width">
          <xsl:value-of select="/script/character/@width" />
        </xsl:attribute>
        <xsl:attribute name="height">
          <xsl:value-of select="/script/character/@height" />
        </xsl:attribute>
        <xsl:attribute name="offset-x">
          <xsl:value-of select="/script/character/@offset-x" />
        </xsl:attribute>
        <xsl:attribute name="offset-y">
          <xsl:value-of select="/script/character/@offset-y" />
        </xsl:attribute>
        <xsl:copy-of select="/script/character/sequence" />
        <xsl:for-each select="document('http://twitter.com/statuses/user_timeline/14358639.xml')/statuses/status/text">
          <sequence name="Activate">
            <message>
              <xsl:value-of select="." />
            </message>
            <call name="Say" />
          </sequence>
        </xsl:for-each>
      </character>
    </script>
  </xsl:template>
</xsl:stylesheet>

メッセージを改行するには?

メッセージを任意の場所で改行するには、breakタグをmessegeタグの中で使用することで出来ます。

<message>くるくるくる〜ぱぁ!<break />わたしは、はてなようせい!</message>


参考:
Apricot 解説サイト