変数のスコープを理解しよう。

変数の有効範囲(スコープ)

【タイムライン変数】
タイムラインを行と考える。タイムライン1は1行目。10フレームは10行目。最初に宣言した変数は後のタイムラインでもつかえるけど、後で宣言してる変数をそれよりも前のタイムラインで使うことはできない。

他のシンボルなどから、親のタイムライン上で宣言された変数を見に行くときは
MovieClip(parent).変数名
これでちゃんと見に行けますよ。

FLASHで外部画像を読込む

落ち着いてもう一度、外部画像を読込むに関して調べたことをメモしていきましょう。

loaderクラスを使います。このクラスはswfや画像のファイルをロードするクラスです。

var myLoader:Loader = new Loader();

まずこんな感じでloaderクラスをオブジェクト化しますね。これで入れ物の準備はできたと思ってください。次に、入れ物の中身のアドレスを指定してやります。URLで指定しないといけないので次のようにURLRequestクラスを使う。

var ImgUrl:URLRequest = new URLRequest("img/1.jpg");

これは引数にアドレスを指定してオブジェクト化することでURLの情報を持たせることができるクラスなんだと思います。

myLoader.load(ImgUrl);

それから上のように、loadメソッドと使って、loaderオブジェクトに指定のURLの情報を読込ませます。

addChild(myLoader);

最後にaddchildでloaderオブジェクトに子オブジェクトを追加させる。このあたりがイメージとしてわかりにくいところです。

var imgInfo:LoaderInfo = myLoader.contentLoaderInfo;
LoaderInfoは、画像の情報を取るためのクラス。

imgInfo.addEventListener(Event.INIT, onInit);
imgInfo.addEventListener(IOErrorEvent.IO_ERROR, onIOerror);

イベントリスナーをつけることで、エラーなんかを検出することができるっぽい。

// ダウンロード完了
private function onInit(e:Event):void {
trace("Can access the loaded object.");
}

// IOエラーによりダウンロード失敗
private function onIOerror(e:IOErrorEvent):void {
trace("IO Error.");
}

どこにロードされるかということだけども、シーンとかシンボルに置かれる。配置などを自由にしたい場合は配置用のシンボルを作ってシンボルのタイムラインにスクリプトを書くと良い。

【画像の大きさを指定する】
var myLoader:Loader = new Loader();
var ImgUrl:URLRequest = new URLRequest("img/1.jpg");

myLoader.load(ImgUrl);
var info:LoaderInfo = myLoader.contentLoaderInfo;
info.addEventListener(Event.COMPLETE, onComp);

function onComp (e:Event):void{
myLoader.width = 100;
myLoader.height = 100;
addChild(myLoader);
}
ポイントは.widthなんかのメソッドで大きさを指定できるんだけど、画像の読み込みが終わってからじゃないとできないということ。読み込みが終わってないのに大きさを変えようとしても画像が表示されない。.COMPLETEで読み込みが終わったことを確認してから表示させるように。

データベースに画像を保存する。

参考[PHP]MySQLを利用した画像の保存と出力|WEBプログラム覚書

mySQLの方は、バイナリデータの登録ができるように「blob」のデータ型フィールドを用意する。

PHPの方は「file_get_contents」この関数でローカルファイルを取得する。ファイルのデータが文字列として格納されるみたい。http://nyx.pu1.net/function/filesystem/file_get_contents.html
「pathinfo」この関数は、ファイルパス情報を配列で返す。PHPマニュアル:pathinfo:ファイルパスに関する情報を返す
定数を引数に指定することで拡張子だけを取り出したりもできる。

phpUserClassを使うときに調べたこと。

phpUserClassというのは、mySqlと連動してユーザーのログイン・ログアウト・新規登録を行うライブラリです。
access.classというファイルが本体。このファイルにデータベースのパスワードなどを登録して、データベースのフィールド名などは指定の通りに作る。

やってくれることは、データベースにユーザー名とパスワードとメールアドレスを登録する。パスワードは暗号化して登録される。
ログインはユーザー名とパスワードで照合される。

mysql_affected_rows()
最後に呼び出された UPDATE によって変更されたレコード数、最後に呼び出された DELETE によって削除されたレコード数、または最後に呼び出された INSERT によって挿入されたレコード数を返します。

if (@mysql_affected_rows() == 1)
こんな感じで使います。ちなみに「@」はエラー制御演算子だそうです。
関数実行時点でエラーの場合エラー表示されるんだけど、それは結果を見ればわかる。というような時にエラーを表示させないものだそうです。

$str = get_magic_quotes_gpc()?stripslashes($str)
get_magic_quotes_gpc()というのは、get、post、cookieに対してエスケープを行うかどうかの設定をしらべる関数。エスケープというのは、受け取れない文字などを自動的に「¥」をつけてくれるようなやつ。
stripslashes($str)
これはエスケープされた文字をもとにもどすようなイメージです。つまりこの一文で「もしエスケープされていたら元に戻す」という動きになる。
それぞれの関数もだけども、この「?」これ一文字で判定してくれてる文の書き方がおもしろいじゃないでしょうか。

$var = 0;
if( empty($var) ){
print '$varは0か空です。';
}
emptyという関数について。これは指定した変数の中身が入っているかどうかを返す。「0」やnullも入ってないとみなすところがisset()と違うところ。

シリアライズという概念】
$dir = dir(".");
$serial = serialize($dir);
print $serial;
オブジェクトや配列など、中身だけではなく構造自体を変数として保持したい時にシリアライズを行う。結果だけでなく過程の計算式も残したいというようなイメージだと思います。
クッキーやセッションをデータベースに保存する時なんかに必要なのかもしれません。

背景を透明にする。

Flashからパブリッシュすると、透明の設定にしても背景色がついてしまう。
htmlを以下の通り書き換えると透明になりました。

Flashでレイヤーの背景色がデフォルトで白になっているので、これの透明度を0%にするのも忘れずに。

画像を追加する。

$('').
attr('src', 'http://www.wings.msn.to/books/978-4-7980-2401-1/978-4-7980-2401-1_logo.jpg').
attr('alt', 'ASP.NET MVC実践プログラミング').
appendTo('body');

画像はタグの中に属性として情報を持っているのでattrを使って作る。

getやpostでサーバにデータを送信する。

$.post(サーバーurl、データ、送信終了時に事項するファンクション、データの受け取り型)

$.post("renewDb.php",{"textarea1":"test"},function(data){window.alert(data)},"text");

よくわからんところもあるけれども。
phpに対して、変数名とその値をセットで送る。受け取る側は

$_POST["textarea1"]

こんな感じで受け取ればよい。わりとシンプル。
よくわからないのはphpからの戻り値をどうやって受け取るかということで、functionの(data)で、dataという変数名で戻り値を受け取りますよという宣言をしていることになってる。だからdataの中にはphpから返ってきたものが入ってる。

この中身がいまのところ謎です。よくわからない。
phpでechoなんかで出力したものが返ってくる。というところまでは確認した。

おそらく、これは言語的に整備された戻り値ではなく、出力されたものを無理やり拾ってるだけなんだと思う。もともと言語を合体させたものだからデータのやりとりが整備されているわけではない。phpが出力したものを戻り値とみなして拾ってるだけ。

ただ、それではやりにくいのでJSONなんかにして受け取る。というルールというか便宜的にやってんだな。

【loadも使える】
.load("**.php")
こんな感じで結果だけを受け取れる。結果というのはechoとかで出力された文字。