MAX Factory

Icon

モバイル(フィーチャーフォン、スマートフォン、タブレット)を中心とした技術メモ

デジハリ・オンラインスクールでスマートフォンサイト構築講座の講師やります!

スマートフォンサイトをこれから始めたい方は、是非一度を覗いてみてください。

スマートフォンサイト構築講座

[flash lite]スクリプトによる動的生成(テキストのみ)

今回はサーバスクリプトのみで携帯flashを動的生成する方法です。
※動的に出力できるのはテキストのみです。

下記にある動的生成クラスを利用すれば、簡単に動的生成することが可能です。
サーバスクリプトのみなので、特別なアプリケーションのインストールが不要(phpは必要)です。

■利用ファイル
・SwfGen.php 動的生成クラス
・sample01.php 動的出力テキスト設定・実行ファイル
・sample01.swf テンプレートflash

■各ファイルソース

◯動的生成クラス 言語:php5
ファイル名:SwfGen.php

<?php

class SwfGen
{
public static function execute($swf, $datas = array())
{
$doactiontag = SwfGen::_maketag($datas);

//road
$fr = fopen($swf,"rb");

$headtmp = fread($fr,9);
$rb = ord(substr($headtmp,8,1))>>3; // rectbit
$headlen = ceil(((( 8 - (($rb*4+5)&7) )&7)+ $rb*4 + 5 )/8) + 12 + 5;
$head = $headtmp.fread($fr,$headlen-9);

//change header
$oldsize = filesize($swf);
$newsize = $oldsize+strlen($doactiontag);
$newhead = substr($head,0,4).SwfGen::_h32($newsize).substr($head,8);

$tail = fread($fr, $oldsize-$headlen);
fclose($fr);

//output
header("Content-Type: application/x-shockwave-flash");
print $newhead.$doactiontag.$tail;
}

private static function _h32($sizeint)
{
return pack("V",$sizeint);
}

private static function _h16($sizeint)
{
return pack("v",$sizeint);
}

private static function _calctaglen($dataarray)
{
$ret = 0;
foreach($dataarray as $key => $value){
$ret += strlen($key)+strlen($value) + 11;

}
return $ret+1;
}

private static function _maketag($dataarray)
{
$tag = "¥x3f¥x03";
$taglen = SWfGen::_calctaglen($dataarray);
$tag .= SwfGen::_h32($taglen);

foreach($dataarray as $key => $value){
$tag .= "¥x96".SwfGen::_h16(strlen($key)+2)."¥x00".$key."¥x00";
$value = mb_convert_encoding($value, "SJIS", "EUC-JP");
$tag .= "¥x96".SwfGen::_h16(strlen($value)+2)."¥x00".$value."¥x00";
$tag .= "¥x1d";
}
$tag .= "¥x00";
return $tag;
}
}

◯サーバ側 言語:php
ファイル名:sample01.php

<?php

require_once "SwfGen.php";

//関数 execute
//第1引数 swfファイルパス
//第2引数 連想配列 key:変数名 value:値
//sample01.swf内にtest変数にhogehogeをセット
SwfGen::execute("sample01.swf", array("test"=>"hogehoge"));

◯flash側
・ファイル名:sample01.swf
・ダイナミックテキスト変数名:debug

//test変数の値をダイナミックテキストdebugに代入
debug = test;

■デモ(上記の実行結果)
http://maxfactory.biz/flash/sample/cms/sample01.php

■ソース一式ダウンロード phpは5系、flashはCS4
http://maxfactory.biz/flash/sample/cms/sample01.tar.gz

[flashLite]動的生成利用時は、ブラウザキャッシュ回避を忘れずに

動的生成Flash利用時は、ブラウザキャッシュ回避を忘れずにしなければ、
動的に表示を変えてもキャッシュで以前の画面が表示されますので。

・キャッシュ回避は下記のヘッダーを出力しておく

header('Expires: Thu, 01 Jan 1970 00:00:00 GMT, -1');
header('Cache-Control: no-cache, no-store, must-revalidate');
header('Pragma: no-cache');

○「ケータイFlashのブラウザキャッシュを回避するには」
http://www.plusmb.jp/2009/06/26/3935.html

[flashlite]リクエストパラメータサイズの軽減

以前の記事でリクエストパラメータサイズの軽減について書きましたが、
より軽減できる方法。

普通データ送信は、ボタンのイベントアクションに、
loadVariables(“save.php”, “/”, “GET”);
のような記述をすると思います。
この場合、アプリケーション内で利用した全ての変数が送信され、
リクエストパラメータサイズが大きくなります。

本来は必要なデータだけ送信すればよいし、そうしたい。

その必要なデータだけ送信する方法が下記になります。
【概要】データ送信用のムービークリップ(空ムービークリップでよい)を準備して、
そのムービークリップ内に必要なデータだけ変数にセットして、そのムービークリップ内で、
データ送信の関数を記述する。

(例)
1.データ送信用のムービークリップを準備(インスタンス名は、vars)
2.データ送信用のムービークリップ内の変数に値をセット
○rootにある変数uid、typeをmc(vars)内の変数にセットする

/vars/:type = type;
/vars/:uid = uid;

3.データ送信用のムービークリップ内でデータ送信
○mc(vars)内でデータ送信する

tellTarget("/vars/"){
loadVariables("save.php", "/", "GET");
}

これでrootに他の変数があっても、送信されるデータは、typeとuidのみになります。

[FlashLite]かんたん携帯 文字サイズ

flashLiteで小文字を設定する場合は、12ptで設定すると思いますが、
かんたん携帯(※821T832Tで検証)では、小文字になりません。中文字になります。

そのため、12ptを想定で高さ(16px)を設定していると、
かんたん携帯では文字が少し切れてしまいます。
文字が切れないようにするためには、テキストフィールドを中文字の高さ(20px)にしておく必要があります。

かんたん携帯が対応端末に入っている場合は、この辺気にする必要があります。
ちなみにdocomoらくらくホン、au簡単ケータイは数機種検証し問題ありませんでした。

[flashlite]モバイルデザインアーカイブ

携帯サイトデザインのまとめサイト
http://mobiledesignarchive.jp/

登録数もとても多いです。携帯Flashのアーカイブも多数あります。

 

2012年2月
« 5月    
 12345
6789101112
13141516171819
20212223242526
272829  

プロフィール

Author:max

ディレクター(モバイルサイト・PCサイト・アプリ)

場合によっては、開発/制作業務もやっています。

元クリエイターなので趣味が面白そうなものを作る事

◆受賞歴
モバイルウィジェットコンテスト

Yahoo×SoftBank主催

[アドビシステムズ賞(銀賞)]
ペパボクリエイターズコンテスト 戻るボタンアワード

paperboy&co.主催

[ムームードメイン賞]

Twitter

Twitter Updates

    follow me on Twitter