Archive for the ‘Test Works’ Category

Calorie Mate

2010 年 9月 6 日

This movie requires Flash Player 10.1.0

先月の仕事の残作業などを終え、束の間のひとときに、最近じゃ仕事で触れる機会も少なくなったPaperVision3Dライブラリと久々のご対面。デスクの上に置いてあったカロリーメイトチョコレート味をほんの出来心でスキャナーにかけて。ちょちょいと書いたサンプルだけど、やっぱり3Dは面白いなぁ。久々に案件で使いたいなぁ。って、今カロリーメイトのサイトみたら、本当に3Dコンテンツになってるじゃない(汗)。これじゃあパクりみたいじゃない。偶然です偶然。本当に。出すのも躊躇しましたがせっかく作ったので。

CS5

2010 年 7月 5 日

CS5のアップグレード版がようやくやってきました。周知の通り、実務的にはほぼ御蔵入となってしまったPackager for iPhone(Flash→iPhoneアプリへの書き出しツール)を試してみました。Papervision3Dもしっかり動いてます。ただ、30fpsだと3GSで結構もっさりしたので18fpsに落として、ENTER_FRAMEでレンダリングすると上の動画のような感じ。ただ、これもWireFrameMatelialを使ったCubeオブジェクトを一つ使っただけなので、オブジェクトが増えるとPV3Dは(iPhone上では)使い物にならなかったかもしれません。まあ、実務的にはFlash(AS)はiPhoneで使えないのでもう何を言ってもしょうがないのですが、配布や販売を目的としない、自分のiPhoneのみで使用する「俺俺アプリ」であれば、Packager for iPhoneは役に立つと思います。

Google Maps API for Flash の PanTo と PanBy

2010 年 6月 26 日

Google Maps API for Flashを使って、緯度経度によって指定された場所の地図を出す…みたいな仕事がきそうなので、予めその部分だけテスト&個人的メモ。Google Maps API for Flash はリリースされた時期にちょろちょろといじった以来。当時、航空写真のサンプルFlash作ろうと思ったら、航空写真のリクエスト数制限みたいなのにひっかかってしまって、結局泣く泣くMicrosoftの地図APIを使って作ったんでした(これ)。今はどうでしょう。リクエストの制限とかまだあるんでしょうか。

さて、Google Maps APIでは、特定の場所に地図を移動させるとき、PanTo か PanBy を使用します。 (続きを読む...)

YouTube API

2010 年 3月 30 日

This movie requires Flash Player 10.0.0

今月の某プロジェクトに携わるまで、恥ずかしながらYouTubeをFlash内に取り込めるAPIがあったなんて知らなんだ。
サーバサイドの開発を専門としているヒデオムさんに教えてもらった。私はFlasher失格です。
上のサンプルはFP10の3D機能を使って。Papervisionだとセキュリティサンドボックス障害を起こすのでアウト。

外部soundファイルのロード・個人的メモ

2010 年 2月 22 日

This movie requires Flash Player 10.0.0

外部のサウンドファイルをいじくるような案件はこれまであまりなかったのですが、「外部APIで生成されたサウンドファイルをロードしては再生、ロードしては再生・・・」というような案件がまもなくやってくるというので、個人的な予習とメモ。 (続きを読む...)

Twitter × Flash

2010 年 1月 6 日

This movie requires Flash Player 10.0.0

昨年2009年はといえば、Twitter大躍進の年でございましたが、今年はTwitterと連動した「Flash」のキャンペーンサイトとか出てくるのでしょうか? もうあるんでしょうか? 海外とかはありそうですが。
というわけで手始めにFlashにTwitterのデータを読み込むテストを・・・と思って、GoogleCodeのtwitterscriptを落としてきたのですが、ドキュメントが無くよくわからず・・・。しかたないので、公式のTwitter API Documentationに従って、XMLを落としてくるやり方で。
1/8変更:Twitter IDを入力できるようにしました。

crossdomain.xmlを使わずに、外部ドメインのxmlをFlashにロードさせる方法は、下のブログが参考になります。
YOPPA BLOG » Flash(AS3)でcrossdomain.xml無しにクロスドメインにアクセスする

ただ文字を並べるんじゃなんなので、ベジェ(BezierSegmentクラス)を使ってみたり。でもいまいち。

地球儀的なもの(PaperVision3D)

2009 年 11月 27 日

(1)ちょっと落ち着いた時間に「.fla2」を詠んでいたら、仕事とは関係ないFlashを作りたくなった。
(2)どうも風の噂では久々に3Dの案件が舞い込んでくるらしい。
以上2点から、PaperVision3Dのライブラリを引っ張り出してきて、地球儀的なFlashを作りました。マウスホイールでぐりぐり回せます。
処理としては、

・各都市の「緯度・経度」から、3次元上に「DisplayObject3D」を配置。
・それぞれの「DisplayObject3D」のスクリーン座標を得る(DisplayObject3D.screen.x、DisplayObject3D.screen.y)
・その座標に都市名の噴出しSpriteを表示させる(EnterFrame処理)

みたいな感じでやりましたが、2番目のスクリーン座標がいっくらやっても「0」しか返さず、小一時間ほど悩んで悩んで悩んで検索したら、どうも

Actionscript:
  1. var display_object_3d : DisplayObject3D;
  2. display_object_3d.autoCalcScreenCoords = true;

という「autoCalcScreenCoords」プロパティをtrueにしてやんないとスクリーン座標は「0」のママとのことで、ここにつまづきました。

以前担当した3D案件で、3D内のテキストはsmooth処理してやらない限りギワギワになっちゃったり、smooth処理入れたら入れたで重くなっちゃったりで、そんな感じの「重さとデザイン精度のバランス感」に苦しみまして、テキストはやっぱり2次元上のSpriteに別で表示してあげた方が良かったかなぁ、とずっと心残りだったことから、今回screen座標にチャレンジ。

使っている地球の画像の精度と、各都市の緯度経度の設定を細かく設定しているわけではないので、ちょっとずれたりしているとこもありますがご容赦ください。各都市の緯度・経度を参考にしたのはこのページです。

テキストパタパタ

2009 年 11月 17 日

This movie requires Flash Player 10.0.0

一緒に仕事しているデザイナさんやクライアントさんから、よく「こんな感じでテキスト出したい」と、某巨匠制作のサイトを見せられること数回。まだ仕事で実装はしたことないですが、一応念のためにTextFlapperというクラスを空き時間に制作。オンマウスするとお馴染みの動き。ロジックは以前作ったこれにちょっとだけ近いです。

エンドレスな背景画像をマウスの動きに合わせて移動させるとき

2009 年 11月 2 日

This movie requires Flash Player 10.0.0

久々のFlashネタ。たいしたことはありませんが(汗)。
エンドレスな背景画像を、マウスの動きなどにあわせてドラッグさせるとき、広大なビットマップを作って、条件文を使ってちょこちょこ変更させるのが定石かもしれません。が、MouseEvent.MOUSE_MOVEのイベントハンドラ内で、マウスのずれた分だけ、matrixを調整して、SpriteにbeginBitmapFillでタイリング描き込みするのが良いのかな、と思って作ってみました。

Actionscript:
  1. package
  2. {
  3.     import flash.display.Bitmap;
  4.     import flash.display.BitmapData;
  5.     import flash.display.Sprite;
  6.     import flash.events.Event;
  7.     import flash.display.StageAlign;
  8.     import flash.display.StageScaleMode;
  9.     import flash.events.MouseEvent;
  10.     import flash.geom.Matrix;
  11.     import flash.geom.Point;
  12.     import flash.ui.Mouse;
  13.     import flash.ui.MouseCursor;
  14.    
  15.     /**
  16.      * エンドレスビットマップ
  17.      * @author Shinro Kato(ipuheke)
  18.      */
  19.     public class Main extends Sprite
  20.     {
  21.         [Embed(source='../lib/endless.gif')]
  22.         private var bmpClass:Class;
  23.         private var bmp_mt:Bitmap;
  24.        
  25.         private var sp:Sprite;
  26.        
  27.         private var dragStartPoint:Point;
  28.        
  29.         private var matrix:Matrix;
  30.        
  31.        
  32.         /**
  33.          * コンストラクタ
  34.          */
  35.         public function Main():void
  36.         {
  37.             if (stage) init();
  38.             else addEventListener(Event.ADDED_TO_STAGE, init);
  39.         }
  40.        
  41.        
  42.         /**
  43.          * 初期化
  44.          * @param   e
  45.          */
  46.         private function init(e:Event = null):void
  47.         {
  48.             removeEventListener(Event.ADDED_TO_STAGE, init);
  49.             // entry point
  50.            
  51.             stage.align = StageAlign.TOP_LEFT;
  52.             stage.scaleMode = StageScaleMode.NO_SCALE;
  53.            
  54.             stage.addEventListener(MouseEvent.MOUSE_DOWN, stageMouseDown);
  55.            
  56.             //basePointを定義
  57.             basePoint = new Point();
  58.             dragStartPoint = new Point();
  59.            
  60.             //matrix
  61.             matrix = new Matrix();
  62.            
  63.            
  64.             //bmpを定義
  65.             bmp_mt = new bmpClass() as Bitmap;
  66.            
  67.             //spriteを定義
  68.             sp = new Sprite();
  69.             sp.graphics.beginBitmapFill(bmp_mt.bitmapData);
  70.             sp.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
  71.             sp.graphics.endFill();
  72.             addChild(sp);
  73.            
  74.             //マウスカーソル(手)
  75.             Mouse.cursor = MouseCursor.HAND;
  76.         }
  77.        
  78.        
  79.         /**
  80.          * マウスダウン
  81.          * @param   e
  82.          */
  83.         private function stageMouseDown(e:MouseEvent):void {
  84.             //押された場所
  85.             dragStartPoint.x = e.stageX;
  86.             dragStartPoint.y = e.stageY;
  87.            
  88.             sp.addEventListener(MouseEvent.MOUSE_MOVE, stageMouseMove);
  89.             sp.addEventListener(MouseEvent.MOUSE_UP, stageMouseUp);
  90.         }
  91.        
  92.         /**
  93.          * マウスムーブ
  94.          * @param   e
  95.          */
  96.         private function stageMouseMove(e:MouseEvent):void {
  97.            
  98.             //matrixのズレ(最小で良いのでタイルのサイズで割った余りでよい)
  99.             matrix.tx -= (dragStartPoint.x - e.stageX) % bmp_mt.width;
  100.             matrix.ty -= (dragStartPoint.y - e.stageY) % bmp_mt.height;
  101.            
  102.             dragStartPoint.x = e.stageX;
  103.             dragStartPoint.y = e.stageY;
  104.            
  105.             //Spriteに描き込む
  106.             sp.graphics.clear();
  107.             sp.graphics.beginBitmapFill(bmp_mt.bitmapData,matrix);
  108.             sp.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
  109.             sp.graphics.endFill();
  110.         }
  111.        
  112.         /**
  113.          * マウスアップ
  114.          * @param   e
  115.          */
  116.         private function stageMouseUp(e:MouseEvent):void {
  117.             sp.removeEventListener(MouseEvent.MOUSE_MOVE, stageMouseMove);
  118.             sp.removeEventListener(MouseEvent.MOUSE_UP, stageMouseUp);
  119.         }
  120.        
  121.     }
  122.    
  123. }

2009/12/02 修正: mouseMoveイベントハンドラ内で、drawRectする前にsp.graphics.clear(); を追加。これを書かないと延々とRectを描き続けるので重くなります。

めくりカメラ(要Webカム)

2009 年 6月 8 日

めくりカメラ(要Webカム)
またも仕事の合間(デザイナーからflaデータ待ち)に作った「だからなんなんだFlash」。こないだの落書きもそうですけど、3Dの世界とはかけ離れた部分が3Dに反映されるというのが、個人的に面白いのかなぁと感じています。元ネタは去年つくったこれから。