Monthly Archives: 9月 2009

「iPhoneアプリで週末起業」

0
Filed under iPhone,
Tagged as , ,

「iPhoneアプリで週末起業」を読み終えた。

iPhoneアプリで週末起業

著者/訳者:山崎 潤一郎

出版社:中経出版( 2009-07-01 )

定価:¥ 1,470

単行本(ソフトカバー) ( 221 ページ )

ISBN-10 : 4806133957

ISBN-13 : 9784806133957


iPhoneアプリを作ろうかと思ったときに読む本

本屋でちらっと見て勢いで買ってしまった。あまり読むべきことはなさそうな気がしたけど、やっぱり自分にとっては得るものがなかった。
しかし、これから始めようかなと悩んでいる人にとっては、背中を押してくれる情報が数値を含めて載っているのでいいかもしれない。

ネット書籍サービス

読むのが遅い自分でも2時間程度で読めたので、1400円は高いなぁ、と思ってたら、最後のページで面白い仕組みを知った。
それが、「中経出版のネット書籍サービス」である。
購入した本に関して、ウェブサイトで登録すればそこですべてを読むことができる、というものなのだ!オフラインで読めないのはちょっと画期的じゃないかな?
巻末にあるコードを入力した後、本書に関わる質問(本書を持ってないと分からない質問)があり、そのあとユーザー登録となる。
book-iphone-kigyou-01
メールアドレスなどを入力し、ユーザー登録が完了したら登録したメールアドレスに仮登録メールが届く。そのあとIDとパスワードを入力するとログインが完了する仕組みだ。ただ、IDは勝手に決められるので注意が必要。
book-iphone-kigyou-02
このビューアーは割と読みやすく作られており、内容を検索できたり、付箋を付けたりすることもできる。検索機能だけでも相当便利!

残念なお知らせ

残念なのは、これがFlashでできているのでiPhoneから読めない、ということ。iPhoneアプリとかあるといいなぁ。iPhoneアプリがあればかなり画期的なのに!(なんなら作ってもいいけどなぁ、と独り言)

ネット書籍サービスに対応している本

他にも、この中経出版のネット書籍サービスに対応している本は結構あるようで、気になるものもいくつかリストアップしてみます。

上手な電話応対が面白いほどできる本 (知りたいことがすぐわかる)

著者/訳者:櫻井 弘

出版社:中経出版( 2009-06-19 )

定価:¥ 1,260

Amazon価格:¥ 1,260

単行本(ソフトカバー) ( 160 ページ )

ISBN-10 : 4806134074

ISBN-13 : 9784806134077



医者の言い分 ――放送記者から医師になってわかったこと

著者/訳者:野田 一成

出版社:中経出版( 2009-01-31 )

定価:¥ 1,470

Amazon価格:¥ 1,470

単行本(ソフトカバー) ( 192 ページ )

ISBN-10 : 4806132829

ISBN-13 : 9784806132820



日本一うまい魚のごはん―築地魚河岸の若旦那が教える

著者/訳者:生田 與克

出版社:中経出版( 2007-10 )

定価:¥ 1,365

Amazon価格:¥ 1,365

単行本 ( 207 ページ )

ISBN-10 : 4806128562

ISBN-13 : 9784806128564


TweenLite/TweenMaxで自前パラメータをTweenさせる

1
Filed under AS3, Flash
Tagged as , , ,

Tweenerを使わない理由

前回のエントリでTweenerの使い方のメモを書いたのですが、個人的にはもうTweenerは積極的には使わない予定です。
Tweenerのスペックが他のtweenライブラリに比べてそんなに速くない、ということと、今年の6月にTweenerは開発終了宣言されたから、という2つの十分な理由があるからです。
ただ、同一プロジェクトで他の人が書いたコードでTweenerが使われていたとき、スペック的にそれほど高速なtween処理が求められていなければ、それを外して置き換えるとかはしない。そういう場合にTweenerの使い方は知っておいて損はないと思うのです。
Tweener開発終了のエントリを訳された下記エントリがわかりやすいのでリンクしておきます。

要は設計が古いから過去を引きずりつつの開発は無理がある、ということらしい。

今はTweenLite/TweenMax

で、現在の話題。
私が最近使っているtweenライブラリはTweenLite/TweenMaxです。
前回のコラムで自前パラメータをTweenerでtweenさせるときの手順を書きましたが、TweenLite/TweenMaxならTweenerのように面倒な設定は要りません。
TweenMaxはTweenLiteの上位バージョンですが、たいていのことはTweenLiteで間に合い、こちらの方がパブリッシュしたときのサイズも小さくなるので、TweenLiteのみ使うことが多いです。

サンプルコード:yoyo text

前回のエントリで書いたAnimTextを動かすコードは、TweenLiteを使った場合、以下のようにシンプルに書けます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package {
  import flash.display.Sprite;
  import flash.events.Event;
  import gs.TweenLite;
 
  [SWF(backgroundColor="#aaaaaa", width="400", height="200")]
  public class Main extends Sprite {
    private var _animText:AnimText;
 
    // TweenMaxでカスタムパラメータをtweenさせるデモ.
    public function Main():void {
      _animText = new AnimText();
      _animText.y = 100;
      addChild( _animText );
 
      // start animation yoyo.
      tweenFunc0();
    }
 
    // yoyo (go left)
    private function tweenFunc0() :void
    {
      TweenLite.to(_animText, 1,
        { myParam:0, onComplete:tweenFunc1 }
      );
    }
 
    // yoyo (go right)
    private function tweenFunc1() :void
    {
      TweenLite.to(_animText, 1,
        { myParam:300, onComplete:tweenFunc0 }
      );
    }
  }
}

TweenLite/TweenMax

こんな感じでとても使いやすいtweenライブラリのTweenLite/TweenMaxなのですが、気になるところが二つあります。
一つはファイルの個数。
Tweenerは13個だったのですが、TweenLite/TweenMaxは57個!
もちろん、使わないクラスは読み込まれないので、必要ないものは削除してもいいのですが、それはそれで何が必要かを確認する必要があり面倒。あとでeasingの種類とか変えたくなるかもしれないですしね。
実害はないのは分かっているのですが、svnとかにAddするときに、ファイル数が多いことだけがとても気になるのです。
もう一つはライセンス。
TweenerはMITライセンスなので、商用でも気にしないで使うことができます。
一方、TweenLite/TweenMaxはちょっと特殊で、基本的に無料なのですが、Flashのコンテンツユーザに課金する場合には有償となるようです。
このあたりは、「うむるむ -[ GreenSock ] TweenMax のライセンスまとめ- by cda244」に詳しく書かれているので、商用で使われる方は読んでおいた方がよいかと思います。

未来の話

今後のtweenライブラリ、ということで気になっているのは、BeInteractive!のyossyさんが作っておられるBetweenAS3
まだDraftページ(BeInteractive! [BetweenAS3 (Draft)])位しか説明ページはないのですが、svnリポジトリがあるので、testディレクトリとか見てみたらいろいろと分かりそうです。

最後に気になるActionScript本を紹介。

ActionScript 3.0 : デザインパターン (ADOBE TECH LAB)

著者/訳者:Danny Patterson Joey Lott

出版社:翔泳社( 2009-06-27 )

定価:¥ 3,780

Amazon価格:¥ 3,780

大型本 ( 344 ページ )

ISBN-10 : 4798118362

ISBN-13 : 9784798118369


Tweenerで自前パラメータをtweenさせる

1
Filed under AS3, Flash
Tagged as , , ,

今回のエントリは、Tweenerで自前パラメータをTweenさせる方法のメモです。

tween対象のAnimTextを定義

たとえばAnimTextというTextFieldを継承したクラスを考えてみます。
このクラスはX座標を設定すると同時にその値を自分の文字に置き換えるmyParamというパラメータを持っています。
このクラスのインスタンスのmyParamをtweenさせてみたい、というようなことをやってみます。
AnimTextは以下のように定義しておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
package {
  import flash.text.TextField;
  import flash.text.TextFieldAutoSize;
 
  public class AnimText extends TextField {
    private var _myParam:Number = 0;
 
    public function AnimText()
    {
      this.text = "DEFAULT";
      this.autoSize = TextFieldAutoSize.LEFT;
    }
 
    public function get myParam():Number {
      return _myParam;
    }
    public function set myParam(value:Number):void {
      _myParam = value;
      this.text = "PARAM[" + _myParam + "]";
      this.x    = _myParam;
    }
  }
}

普通のやり方だけではNG

AnimTextのインスタンスを_animTextと定義します。
この_animTextのmyParamを1秒で300までtweenさせたい、と言う場合、以下のようなコードを書きたくなります。

1
2
var _animText:AnimText = new AnimText();
Tweener.addTween( _animText, { myParam:300, time:1 } );

しかし、これだけでは実行できません。
Tweenerが、myParamというパラメータを理解できないからです。
Tweenerでは、自前のパラメータに対してtweenさせたい場合、tween時に呼び出す関数を用意する必要があるのです。

スペシャルプロパティの登録

自前プロパティをTweenerで使用可能なパラメータに設定する際に必要なのは次の3つの値です。

  • Tweenerから呼び出すときのパラメータ名
  • そのパラメータ名で値を返す関数 .. setter
  • そのパラメータ名に値を設定したときに呼び出す関数 .. getter

これをTweener.registerSpecialPropertyというメソッドに渡します。
上記の例で言えば、以下のようなコードになります。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 登録コード.
// Tweener.addTween するまえに1度だけ呼び出して設定.
Tweener.registerSpecialProperty(
  "myParam",
  get_myParam,
  set_myParam
);
 
// 以下はsetter/getter関数.
public function get_myParam(
  p_obj:AnimText,
  param:Array,
  extra:Object = null ) :Number
{
  return p_obj.myParam;
}
public function set_myParam(
  p_obj:AnimText,
  value:Number,
  param:Array,
  extra:Object=null ) :void
{
  p_obj.myParam = value;
}

これで最初に書いたコードが使えるようになります。

公式ドキュメントの不備?

なんと、公式ドキュメントっぽい以下のリンク先にあるサンプルコードでは実行時エラーになるので注意が必要です。

set, getに使う関数の引数が間違っているのです。
今はsetter/getterそれぞれの引数の最後に、params:Array, extra:Object=null という2つを付け加えておく必要があります。
ちなみにこれらの引数については、Aquiouxさんのページのサンプルコードで知りました。

サンプルコード:yoyo text

最後に、上記AnimTextをアニメーションさせるサンプルコードを載せておきます。
Read More »

colorTransformとBitmapData.drawの相性

2
Filed under AS3, Flash
Tagged as , , ,

Tweenerなどで色を変えたものをBitmapData.drawで描画しても、色変更が適用されない、という現象に悩んだので、ちょっと仕組みを調べてみました。
(2009/09/10夜:dskさんにコメントをいただき完全解決しましたので、その情報も下部に追記しました)

問題発生

「Tweenerで色を変更してもそれをBitmapDataにdrawしたら変更前の状態が描画される」という問題ですが、いろいろ調べていたら、どうやら「Tweenerなどで色を変える方法はtransform.colorTransformを使用している」ことが分かりました。
この問題のやっかいなところは、colorTransformが適用されないだけであり、別にエラーも出ないし、FlashPlayerも落ちたりしないので、何が悪いのか分からないところです。

処理の流れを想像してみる

描画対象はDisplayObjectの派生クラス(とBitmapDataクラス)なのですが、これらは「DisplayObjectのサイズと同じサイズの描画領域に現在の状態を描画しておくメソッド」と「最終的に描画メモリ領域に出力させるために呼ばれる描画メソッド」を持っていると思うのです。
仮に、前者をrender()、後者をtransfer() と呼ぶことにすると、次のような処理になっているのではないでしょうか。

  • 毎フレームの処理というのは、描画リストにあるDisplayObjectのtransferを呼び出す処理、となる。
  • そのときDisplayObjectにtransformが指定されていたら、renderで準備した画像に対してtransformを適用したものをtransferさせる。

まぁ、内部的にはもっと複雑だとは思いますが、何となくこうじゃないのかなぁ、と思っています。

「処理されない」を再現するコード

以上のテストは次のようにして再現してみました。

  • 描画元となるMovieClipを用意し、それを_sourceと名付け、stage(下のあたり)に配置します。
  • 描画先となるBitmapDataは _bmpdとして作成し、それを保持するBitmapインスタンスをstage(上部に広目)に配置します。
  • 毎フレーム、_sourceにtransform.colorTransformを適用します。
  • 毎フレーム、_bmpdに_sourceを描画します。(位置はカーソル位置)
  • (具体的なソースコードはこのエントリ最後に載せておきます)

TestTransform-FlashIDE
これで実行してみた結果は以下のようになり、colorTransformが適用されてない様子が分かるかと思います。(緑色のものがcolorTransformを適用している状態です)
TestTransform-Result

colorTransform代替手法

以上で終わっても、あまり得にならないエントリになるので、colorTransformの代わりになり、BimapData.drawしてもそれが適用される、という方法を紹介しておきます。
それは、ColorMatrixFilterを使う方法で、具体的には以下のようになります。

1
2
3
4
5
6
7
8
9
10
11
// [1] colorTransformを使う処理.
//_source.transform.colorTransform
//  = new ColorTransform( 0.5, 0.5, 0.5, 1, 0, 120, 0, 0 );
 
// [2] [1]と同等の色変化があるColorMatrixFilter処理.
var cm:Array    = [ 0.5,    0,      0,      0,      0,
                    0,      0.5,    0,      0,      120,
                    0,      0,      0.5,    0,      0,
                    0,      0,      0,      1,      0 ];
var cmf:ColorMatrixFilter	= new ColorMatrixFilter( cm );
_source.filters	= [cmf];

追記:Tweenerの変化を適用させることもできた!

この項目は2009/09/10追記しました。
コメント欄で、dskさんに「BitmapData.draw()ファンクションの第三引数にColorTransformを渡せます。」と教えていただきました。ありがとうございます!
で、早速検証してみました。
Tweenerで_sourceの色を変化させます。するとその変化は_source.transform.colorTransformに入っているはずなので、この値をそのままBitmapData.draw()の第3引数に渡してみたところ、問題なく、色の変化を描画することができました!

1
2
3
  var posmat:Matrix = new Matrix();
  posmat.translate( mouseX, mouseY );
  _bmpd.draw( _source, posmat, _source.transform.colorTransform );  // マウスの位置に描画.

TestTransform-Result2
これにて完全解決!

Read More »