Android4.1へのFlash非対応をAdobeが再度発表

去年冬に聞いた話でしたが、Androidの最新verでのFlashプレイヤーの開発がされなくなりました。
つまり、新機種でのFlash対応がなくなり文字通りモバイルに関しては「Flashは死んだ」という感じを受けました。

もちろん、PC/Macでは今も動きますがWin8ではプラグインが外れるという話ですし、
自分も仕事としてウェブ企画をする際、動的コンテンツを検討する際はほぼflashの選択はしません。
flashは時代の役目を終えて徐々に消えていくのでしょうか。
ブラウザゲームの3Dゲーム演出などに使われるため、ハイレベルなASerはやっていけるんでしょうが、
それも過去「Director」のLingoと同じ道のりを見る気がします。
ActionScriptへは数年前、わりに時間をかけ、理解しきれない自分やら、山のような資料など
蟠りのようなものや 妙な懐かしさを勝手に渦巻かせています。

iPadのファーストインプレッションとiPadなアプリを考える

100128_01.png
紙に描くと大きさはこれくらいなはず。
先ほど Appleから タブレット型デバイス iPadが発表されました。
いろんなustやガジェットニュースサイトを見て
分からないながらも英語プレゼン内容はすべて聞いていました。
感想ですが

  • (kindleを直接見てはいませんが) カラーのiPadと両方並んだ絵を見た時点で(少なくともプロダクト的には)kindleは終わった。並んだ状態で実物を見たい
  • 「大きいiPodTouch」と揶揄するTwitが見えましたが だからってkindleは持てない
  • 電子書籍を販売するiBooksはいつ日本に来るのか(iTunesMusicStoreは何年かかったかなと…)
  • 母艦のPC/Macは必要なのかな?必要ないなら親の世代でiPadでいいという人は相当数いる
  • wifi内蔵 3Gも内蔵するタイプもあるので iPhone(もしくは携帯電話との)とiPad3G正直2台持ちはつらいから どうせならといろんなモノに使えるpocket Wifiを導入する人が増えるかも
  • iPhoneアプリが使えるなら FlashCS5でアプリ作ればiPadに何かだせる?時期的に同じくらいかな?
  • 値段表示の所で $999の数字が崩れて$499になる演出はズルい

iPhoneアプリは 倍角表示で使えるとのこと。
しかし
「iPhone/iPodTouchでは無理だったけど iPadならできるアプリ」
=表示域が大きいから可能なアプリがあるのではと考えました。
(複数タッチやCPUや出力など技術的には何の検証もしていません。思いつきです)
iPadでないと無理なアプリ
2人向き合って同時プレイのゲーム/連弾できるピアノアプリ(Ponなど)、同人誌的流通をする書籍アプリ、Twitterでのマルチアカウント同時表示アプリ…
iPadの方が便利に使えるアプリ
手書きノート、打楽器系アプリ(タンバリンやテノリオンとか)、フォトフレーム、美人時計系、(ジッポ的なアプリの替わりの)松明アプリ、ビールアプリ(ピッチャーで)…
(番外)iPadの方が不便なアプリ
電卓、ライト、常時画面全域表示するタイプの時計…
(さらに番外)
まな板にしてcookpadを表示…
(追記)
engadgetで掲載されている動画がいい感じなので追記
http://japanese.engadget.com/2010/01/27/ipad-hands-on/

FITC Tokyo 2009

091128_01
FITC Tokyo 2009に参加しました。
スピーカーは
Lee Brimelow, Keith Peters, Mario Klingemann, Grant Skinner, Joshua Hirsh

  • Sneak Peek of MAX 2009 : Lee Brimelow (http://theflashblog.com/,http://www.gotoandlearn.com/)
    Flash CS5の話、機能追加のことは今までフォローしていなかったのでiPhoneAppのパブリッシュ以外は初耳なことばかり。

    • カスタムクラスでもコードヒント
    • iPhoneApp(.ipa) export すでにあるサンプルとして名前があがったのは Chroma Circuit, wordzen, Just letters
    • FlashPlayer10.1
    • MultiTouch And Gesture マルチタッチ用のイベントの説明など
    • 加速度、傾きもとれる
    • マイクからのデータもバイナリーでとれる
    • 『見ていなかった』エラーもすべて扱える
    • (Air2.0とFlash Catalystの説明もあったけれど よくわからず省略)

  • Making Things Move : Keith Peters (http://www.bit-101.com/blog/)
    (自分としては『白い本』の人 ほんとに分かりやすい内容 講義も書籍と結構かぶっていた)
    アニメーションの要素を「速度」から始めて角速度、速度の増減、重力、抵抗、インタラクティブな反応にかかせないドラッグとスロー、バネ運動と どんどん拡張していく
  • Mario Klingemann : Connecting the Dots (http://www.quasimondo.com/)
    数学をキーワードにビジュアル表現。
    数論、セル・オートマン、圧縮、コラージュ
    でも
    091128_02
    ビーチで読書中、気分がのらないので 適当な範囲を決めてゴミを集めて、分類。
    それを続けて 集まったプラスチックゴミを並べなおしたり。(これは相当興味深い。「佐藤可士和の整理術」にもあったような…)
    制作物はビジュアル的にかなり面白いんだけど、持っていたカメラではうまく撮れなかったので1点だけ
    091128_03
    flashでビジュアル的に素数を探索する…白い点は素数
    091128_04
  • Grant Skinner : Quick as a Flash (http://www.gskinner.com/blog/)
    最適化の話。
    プレゼンスライドはhttp://gskinner.com/talks/quick/
  • Joshua Hirsh : BigSpaceship:Digital Creative Agency(http://www.bigspaceship.com/,http://www.bigspaceship.com/blog/labs/)
  • ニューヨークのcreative agency 「BigSpaceShip」の運営方針紹介と制作実例
    “Quality is born from fun”
    大きな一つのテーブルにチーム全員がいる。
    チームはそれぞれロゴマークがある。
    チームに全職種(Strategy,productuin,design,development)がいて、ほぼ同時進行でプロジェクトが進む。
    週一でメンバー同士の勉強会、教えあう。
    仕事以外にも楽しいことをやる。
    社内プロジェクトで遊ぶ
    →試作としてdraftを作る→そのモノや派生物をクライアントワークのプレゼンに使う

    • テーブルサッカーをセンサーでflashで連動
    • pretty loader http://www.prettyloaded.com/ データ読み込みのアニメーションのshowcase
    • Hope vs Despair twitterAPIを使った表示オブジェクト
    • Perfect Monky Pants Tank (シュールなシューティングゲーム)
    • クライアントワーク

『靴屋の小人』と言葉が通じない

090623_01

先日のセミナーで知ったjsfl
さっそく制作で使っています。
今のところ 例題であったmc原点合わせが最も使っていますが

//原点あわせ
var doc = fl.getDocumentDOM();
doc.setElementProperty("x", 0);
doc.setElementProperty("y", 0);

他にもちょっとやってみています。
選択したテキストフィールドのフォントを新ゴにする
(フォント指定のバナーをよくつくるので)

//選択したテキストフィールドのフォントを新ゴにする
var doc = fl.getDocumentDOM();
doc.selection[0].setTextAttr("face", "A-OTF 新ゴ Pro H", 0, 1);

その後、思いついて
インスタンス化していない
選択したオブジェクトを個別にmcにするスクリプトって
できるのではと 書いてみたけれど うまくいかない。

var doc = fl.getDocumentDOM();
var select = doc.selection;
for(var i=0; i < select.length; i++){
var element = select[i];
var mcName = "_" + i;
newClipWithDefaultName = element.convertToSymbol("movie clip", mcName, "top left");//エラーがでる
}

結局『靴屋の小人』に下準備をさせることができずに、自分でやるのでした...
これを書きながらセミナーで言ってた「選択したオブジェクト毎に個別の値を渡せない」ってところで引っかかってるのか? 『選択しているオブジェクトに対する処理→メソッドとselectionを使い分ける』というところが分っていないですね。

67workshop Spark02

67workshop Spark02にmonoq氏に誘われたので一緒に行ってきました。
Spark67 Part2 Edge ActionScript Libraries | ロクナナワークショップ イベント企画
(時間的な都合や観客の多さで単純に比較するのもいけないのですが)
AdobeMaxより満足しました。

【JSFL】
Javascriptで書ける flashのアクション (Photoshopでいうところの)
(昔PhotoShopをjsで動かすという記事を見かけた気がしたそれは別の話ので あとで)

flashの操作をそのままかけばいいので
昨日の仕事みたいに15個パブリッシュも 人力でしなくていい。
mcの位置合わせとかも 数値触らなくていい
→明日から作業効率があげられそう
ただ、処理速度が遅いので 汎用化できる大量な単純作業などに用いるのがよいらしい
スピードを求めるなら Cで書け。

Adobe Flash CS4 Professional * JavaScript API の操作
AdobeMAXでも Sparkの人が 
「パレットつくれます」とか「便利なもの作りました」と
説明する場面があったけれど 時間がなかったので
JSFLそのものの説明がなくて ポカンっと見ていた。
その辺りの知識が埋まった。

【FLARToolKit】

Papervision3Dにまともに触ったことなかったり、
昨日までこんな勘違いをしていた(正しくは えふえるえーあーるつーるきっと 文字情報だけで知っているからこういうことが起きる)自分でもなんかできたりするくらい説明が詳しかった。
090620_01.png

実際のswfはこちら
(要ウェブカメラ)makerをダウンロード プリント後 カメラにかざしてください。
カメラに何も写らない人は 右クリックして「設定」/一番右側のタブ「カメラ」で使うカメラを選び直してください。

ソースは

package {
import org.papervision3d.lights.PointLight3D;
import org.papervision3d.materials.WireframeMaterial;
import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.objects.primitives.Plane;
public class SimpleCube extends PV3DARApp {
private var _plane:Plane;
private var _cube1:Cube;
private var _cube2:Cube;
private var _cube3:Cube;
private var _cube4:Cube;
public function SimpleCube() {
// カメラ補正ファイルとパターン定義ファイルのファイル名を渡して初期化。
this.init('Data/camera_para.dat', 'Data/flarlogo.pat');
}
protected override function onInit():void {
super.onInit(); // 必ず呼ぶアル。
// マーカーと同じサイズを Plane を作ってみる。
var wmat:WireframeMaterial = new WireframeMaterial(0x00ff00, 1, 2); // ワイヤーフレームで。
this._plane = new Plane(wmat, 80, 80); // 80mm x 80mm。
this._plane.rotationX = 180; // 裏向いてるのでこっち向ける。
this._baseNode.addChild(this._plane); // _baseNode に addChild するとマーカーに追従する。
// ライトの設定。手前、上のほう。
var light:PointLight3D = new PointLight3D();
light.x = 0;
light.y = 1000;
light.z = -1000;
// Cube を作る。
var fmat1:FlatShadeMaterial = new FlatShadeMaterial(light, 0xff1a00, 0xab1100); // あか
var fmat2:FlatShadeMaterial = new FlatShadeMaterial(light, 0x009ec5, 0x006a84); // あお
var fmat3:FlatShadeMaterial = new FlatShadeMaterial(light, 0xffe500, 0xab9a00); // きいろ
var fmat4:FlatShadeMaterial = new FlatShadeMaterial(light, 0x69bb38, 0x467d26); // みどり
this._cube1 = new Cube(new MaterialsList({all: fmat1}), 40, 40, 40); // 40mm x 40mm x 40mm。
this._cube1.z = 60; // 立方体の高さの半分、上方向(Z方向)に移動させるとちょうどマーカーにのっかる形になる。
this._baseNode.addChild(this._cube1);
this._cube2 = new Cube(new MaterialsList({all: fmat2}), 40, 40, 40); // 40mm x 40mm x 40mm。
this._cube2.z = 160; // 立方体の高さの半分、上方向(Z方向)に移動させるとちょうどマーカーにのっかる形になる。
this._baseNode.addChild(this._cube2);
this._cube3 = new Cube(new MaterialsList({all: fmat3}), 40, 40, 40); // 40mm x 40mm x 40mm。
this._cube3.z = 260; // 立方体の高さの半分、上方向(Z方向)に移動させるとちょうどマーカーにのっかる形になる。
this._baseNode.addChild(this._cube3);
this._cube4 = new Cube(new MaterialsList({all: fmat4}), 40, 40, 40); // 40mm x 40mm x 40mm。
this._cube4.z = 360; // 立方体の高さの半分、上方向(Z方向)に移動させるとちょうどマーカーにのっかる形になる。
this._baseNode.addChild(this._cube4);
}
}
}

見た通り Saqooshaさんのエントリーにあるスタートアップガイドのを元に
cubeを増やしてそれぞれに色つけただけですが。

モデリングするために3Dモデリングソフトが必要で
説明では フリーの3DソフトBlenderが使われていました
それはそれでやらないといけないくらい難しげな様子。
(3D制作は STRATA Vision3Dあたりで知識が止まっているので… )

これまでCが解らなくて指をくわえて「すごいな」と ARモノの感想エントリーを書くくらいがせいぜい、今回のセミナーでやっと実際地続きなんだという感覚が得られました。

参考リンク
工学ナビ – 「攻殻機動隊」「電脳コイル」の世界を実現! – ARToolKitを使った拡張現実感プログラミング

追記:
公式サイトでのイベントリポートがアップされました。
http://event.67.org/?p=410

flashから家庭用ゲーム機に行く道は なくはないけど限りなく細い

090618_03.png
flashから家庭用ゲームへの移植ができるというミディアムウェアscaleformGFx。
その説明と導入実例の話が聞けるということで(自分のflashのレベルも鑑みず)
Adobe,Scaleformの共同セミナー 
『Flashコンテンツをゲームプラットフォームへ展開する技術、ビジネス』
を行ってきました。
以下 自分用メモ
Flashで作ったものが そのままwii、PS2,3など家庭用ゲーム機に載せることができるソフトではない。
→(技術的問題) 
ゲームインターフェイスなどのデザインにFlashで作ったものが使える=パーツとして使える ゲームそのものの処理はC。(事例紹介、wii あいうえ・おーちゃんの場合)
ゲーム内ゲームには そのまま行ける様子。

→(プラットフォーム的問題) 
アタリショックの教訓(だと思う)でむやみにソフト数を増やして、
クオリティが下がる事はゲームプラットフォームの魅力を削ることになるので、
企画段階でプラットフォーム企業に見せ ふるいにかけられる必要がある。
仮に通っても 開発には『開発キット』が必要でそれを使うには 
契約を結ぶ必要がある。
Scaleform GFx自体も使うには 登録が必要そうだし。
(iPhoneもAppleにアプリの確認をされる必要があるし、
開発に使うiPhoneは ちょっとした登録が必要と
「夢見るiPhone」で立ち読みした気がした)
iPhoneアプリのように自由に企画、制作もできない
その自由さのなさで Twitter上で がっかり感ただようコメントがいくつか見られた。
Flash使いの人がゲームの方に行くには 
ゲームの開発会社に入る/
ゲームのパブリッシャと契約をする(レベルの大きい団体を作って)
/開発会社の外注として仕事する 
しか道はなさそう。
ゲーム/iPhoneアプリ業界の話は 
前に聞いていたpodcast『アキバ系!電脳空間カウボーイズ』が参考になるかも。
もっとAS使える人には違う感想があるだろうけど 
自分のレベルが聞いていると まあそんな感じ。
(追記)
なんて 長々書いていたら
ゲーム機でFlashを動かす『Scaleform』セミナー開催――開発者が寄せる期待と現実のギャップ – ガジェット通信
http://getnews.jp/archives/19296

のエントリーを見つけた。
そっち読んだ方が わかりやすいです(笑)

actionscriptでハマって なんか抜けているけど気づけない

これは通る

classA
public function classA(){
var xxxx:classB = new classB(this);
xxxx.zzzz();
}
classB
var myContainer:Sprite;
var w:uint;
var h:uint;
public function classB(container:Sprite){
w = container.stage.stageWidth;
h = container.stage.stageHeight;
myContainer = container;
}
classC
function zzzz():void{
var zzzz:Sprite = new Sprte();
myContainer.addChild(zzzz);
(以下略)
}

super()だと 通らないのか あれ?よくわからん
なんかダメ
(やっていることは
AS入門ノート1のP204のところをフレームに書かずにおきたいだけなんですが)

package{
import flash.display.Sprite;
public class Main extends Sprite{
public function Main(){
var dg:DotGrid = new DotGrid(this);
dg.arrange(20,10)
}
}
}
package {
import flash.display.Sprite;
public class DotGrid extends MakeSprite {
var w:uint;
var h:uint;
public function DotGrid(container:Sprite) {
super(container);
w = container.stage.stageWidth;
h = container.stage.stageHeight;
}
public function arrange(cntx:uint, cnty:uint):void {
var dw:uint = w /cntx;
var dh:uint = h / cnty;
var i:uint, j:uint;
for (i = 0; i < cnty; i++) {
var cy:uint = dh * (i+ 0.5);
for (j = 0; j < cntx; j++){
var cx:uint = dh*(i+0.5);
var cr:uint = Math.ceil(Math.random()*Math.min(dw, dh) / 2);
var color:uint = Math.random()*0xFFFFFF;
var sp:Sprite = makeCircleSp(cx, cy, cr, color);
}
}
}
}
}
package{
import flash.display.Sprite;
public class MakeSprite extends Sprite{
var myContainer:Sprite;
public function Main(container:Sprite){
myContainer = container;
}
public function makeCircleSp(cx:int, cy:int, cr:int, color:uint):Sprite{
var circleSp:Sprite = new Sprite();
circleSp.graphics.beginFill(color);
circleSp.graphics.drawCircle(cx, cy, cr);
myContainer.addChild(circleSp);
return circleSp;
}
}
}

まんま貼ってみたもののサンプルを
そのままだして良かったのかなとも思う

後で自分で「こんなのも分かってないのかよ」とつぶやきたい。

「FlashでSVG形式のベクターグラフィックを利用する」が公開されていた

090428_01
いつだったか Twitterで見かけたsparkProjectのust配信。
トリで 説明されていたと思うのですが 
思わず すごいとコメントしたSVGをつかったコンテンツ。
それがadobeのサイトでソース付きで説明されていたので 勉強。
FlashでSVG形式のベクターグラフィックを利用する
http://www.adobe.com/jp/devnet/flash/articles/spark_project_svg.html
サンプルは イラレ添付?のトラですが 前に登場したオリゼー(?)のファイルに入れ替えるだけでも 楽しい(笑) 大繁殖。豚インフルはイヤだが。
このオリザー(?)は 手描きがベースの線画。 この効果はベタ面なしだと ちょっと迫力に欠けるかも。
http://serif.jp/fla_ex/090428/F5SVGSample3d.html
昨日の標識でもやってみたけれど グループ化とか複合パスで変わるのかもしれない…
http://serif.jp/fla_ex/090428_2/F5SVGSample3d.html

DTL.as

090315_01
http://twitter.com/serif_jp/status/1321410114
ActionScriptベースの出し物の発表会 DTL.asに行ってきました。
DTL.as
http://b-o-w.jp/events/dtlive/
(かなり体調がダメな感じで 
出し物以外のときは
イスに座ってぐったり。
http://twitter.com/serif_jp/status/1320999547
ただただ、ライブコーディング対決が見たくて
具体的に言うと 
どういう風にスクリプトを
書いているのかが知りたくて
がんばって最後近くまで見ました。)
 
詳細なレポートエントリーがありますのでそちらを。
それ以外のことを書きます。
DeskTopLive.as – tatzulog
http://www.concorde.gr.jp/~tatzuro/2009/03/14170708.html
090315_02
ライブコーディング対決。
本来戦わないものを同時にやることで戦わせるのは
「料理の鉄人」か「高橋名人対毛利名人」か。
40分のライブコーディング対決をしている最中に 
オーディエンスがセンターの3人に向けて質問できるコーナーがありました。
司会をしながらフロアで質問者を探していたタナカさん。
目の前を歩いていたら、目が合い(笑)
視線を外したら「視線を外しましたね」と言われて、
マイクが渡されましたので、 
集中しているのに悪いなあと思いながら質問もさせてもらいました。
「今まで一番影響を受けたプログラムの書籍は何ですか?」
詳しい書名は 失念しましたが 3人ともActionScriptの本ではありませんでした。
オブジェクト思考とかそうのあたり。
別の方が 「プログラムは何から始めましたか」という質問では
N88-BASICとか でした。
そんなキャリアが長く 2つ以上言語が書ける ハイセンスな人でも 
いきなりゴリっとは書かず、(入力自体は速いのですが)
パブリッシュして 円を表示するところから始めて
(その後の飛躍はとてもすごいのですが) 
スタート自体は自分と同じ書き方だったので とても安心しました。
これからも精進しようと思いつつ 表彰式前に会場をでてバスに乗るのでした。

UNIXtime 1234567890のスクリプト

数字が並んだ瞬間を自分で見たけど キャプチャはできなかった。
Twitterでもみていたけれど 盛り上がっているのはunixTimeで動いている人たちばかりでした。

さて、イベントも過ぎて使い道もないのでこんなハナゲflashですが スクリプトだします。何かの足しになればよいのですが。

package {
import flash.display.Sprite;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.text.TextField;
import flash.text.TextFormat;
import flash.text.TextFieldAutoSize;
import flash.events.Event;
import flash.net.URLRequest;
public class unixtime extends Sprite {
private var request:URLRequest=new URLRequest("bg.png");
private var loader:Loader=new Loader;
private var info:LoaderInfo=loader.contentLoaderInfo;
private var t_title:TextField=new TextField;
private var t:TextField=new TextField;
private var nowTimeFiled:TextField=new TextField;
private var isField:Boolean=false;
public function unixtime() {
info.addEventListener(Event.COMPLETE, completeListener);
loader.load(request);
addEventListener(Event.ENTER_FRAME,TimeTrace);
}
//ENTER_FRAMEのたびに実行
private function TimeTrace(event:Event):void {
//すでに時間のTextFieldが配置されていたら消去
if (isField) {
removeChild(t);
removeChild(t_title);
removeChild(nowTimeFiled);
isField=true;
}
var dateObj:Date = new Date  ;
var unixTime:uint = getUNIXTime(dateObj);
var st_unixTime:String = String(unixTime);
var st_dateOnj:String = String(dateObj);
t_title = createText(12,"UNIX time:");
t =createText(84,st_unixTime);
nowTimeFiled = createText(12,st_dateOnj);
addChild(t);
addChild(t_title);
addChild(nowTimeFiled);
isField=true;
t_title.x = 30;
t_title.y = 20;
t.x = 20;
t.y = 20;
nowTimeFiled.x = t.x + t.width - nowTimeFiled.width;
nowTimeFiled.y = t.y + t.height;
}
//フォントの指定をまとめてできるようにする
private function createText(fontSize:Number,str:String):TextField {
var txt:TextField=new TextField;
var format:TextFormat=new TextFormat;
format.color=0x1D0000;
format.font="Times New Roman";
format.size=fontSize;
txt.autoSize=TextFieldAutoSize.LEFT;
txt.text=str;
txt.setTextFormat(format);
return txt;
}
//ENTER_FRAMEするたびに配置する
private function completeListener(event:Event):void {
addChild(loader);
addChild(t);
addChild(t_title);
addChild(nowTimeFiled);
isField=true;
}
//まるめた値を返す
private function getUNIXTime(date:Date):uint {
return Math.floor(date.time / 1000);
}
}
}

ツッコミ、提案などあったらお願いします。