メイン

development アーカイブ

2006年09月07日

CSSを保存したときにブラウザを更新 mac+applescript+emacs+safari

この辺のマネをMacで実現してみました。

最速インターフェース研究会 :: 萌ディタとSleipnirとWEBrickを使って人のサイトのCSSをリアルタイム編集するデモ
http://la.ma.la/blog/diary_200607172004.htm

Proxyは上記のモノを利用させていただきました。

Emacsから「do-applescript」でAppleScriptを実行できるので.emacs.elに


;; Safari reload
(defun reload-safari()
(if (string-match "\.\\(css\\|js\\)$" (buffer-file-name))
(do-applescript "tell application \"Safari\"
do JavaScript \"location.reload(true);\" in document 1
end tell")))
(add-hook 'after-save-hook 'reload-safari)

と記述して保存時にsafariを更新します。

これすげーべんりっす。

2006年09月10日

RailsプロジェクトをSubversionで管理するときのメモ

trunk tags branchesを作っておく


$ mkdir hogeapp
$ cd hogeapp
$ mkdir trunk tags branches
$ svn import . svn+ssh://svnurl/hogeapp -m "initial"
$ cd ../
$ rm -rf hogeapp

プロジェクト作成


$ rails hogeapp
$ cd hogeapp

インポート


$ svn import . svn+ssh://svnurl/hogeapp/trunk/ -m "import"

作業ディレクトリへ移動してチェックアウト


$ svn co svn+ssh://svnurl/hogeapp/trunk/ .

ログファイルを削除して無視ファイルに指定


$ svn ci -m "remove log file"
$ svn propset svn:ignore "*.log" log/
$ svn ci -m "add ignore log/*"

tmp以下を無視ファイルに指定


$ svn propset svn:ignore "*" tmp/sessions tmp/cache tmp/sockets
$ svn ci -m "add ignore tmp/"

database.yml を database.yml.exampleへ


$svn move config/database.yml config/database.yml.example
$svn ci -m "database.yml -> database.yml.example"

database.ymlを無視ファイルに指定


$svn propset svn:ignore "database.yml" config/
$svn ci -m "ignore database.yml"
cp config/database.yml.example config/database.yml

この辺りを参考にさせて頂きました。
HowtoUseRailsWithSubversion in Ruby on Rails
http://wiki.rubyonrails.com/rails/pages/HowtoUseRailsWithSubversion

subversionでRailsアプリを管理 :: wiki.rails2u.com
http://wiki.rails2u.com/subversion%E3%81%A7Rails%E3%82%A2%E3%83%97%E3%83%AA%E3%82%92%E7%AE%A1%E7%90%86

2006年09月18日

Refeをutf-8で使う

rubyのリファレンス検索用にrefeをインストール

gem install refe 
でインストールできる

でも使ってみたら文字化けした。
どうやらutf-8でみれるようにしてやる必要があるらしい。

でここをみて対応。
断片部 - 適当日記 - refeのutf-8化
http://fragments.g.hatena.ne.jp/samurai20000/20060326/1143380535

sudo vi /usr/lib/ruby/gems/1.8/gems/refe-0.8.0.3/lib/refe/searcher.rb

require 'iconv'を追加
22行目あたりのstrの下へ
Iconv.iconv("UTF-8","EUC-JP", str)
を追加

できたー

2006年09月27日

EmacsでActionscript

Actionscript用のモードがないかなと思って探してみた。
あった。

Casual Game Development ? Blog Archive ? My Emacs Customizations
http://blog.pettomato.com/?p=12

actionscript-mode.elをダウンロードしてきてロードパスの通ったとこに置いて


(autoload 'actionscript-mode "actionscript-mode" "actionscript" t)
(setq auto-mode-alist
(append '(("\\.as$" . actionscript-mode))
auto-mode-alist))

でOK

2006年10月05日

EmacsでActionScriptを書くときは

M-x set-buffer-file-coding-system して utf-8mに設定しましょう。
文字化けではまった。

追記
やっぱだめっぽい。
一度、Flashでasファイルを開いた後なら大丈夫みたい

一番簡単なRailsとFlash(ActionScript)の連携方法

FlashからデータをRailsに渡して、そのままデータをFlashへ返します。


Flash側


1フレーム目に以下のように記述

this.createTextField("r_txt",1,10,10,480,480);
this.r_txt.border = true
this.r_txt.text = "start";

var lv = new LoadVars();
var rlv = new LoadVars();

lv.data = "hoge"; // Rails側に送信するデータ
lv.sendAndLoad("http://localhost:3000/flash/hello/",rlv,"POST");

rlv.target = this;
rlv.onLoad = function (s:Boolean){
if (s) {
this.target.r_txt.text = "result = " + this.result;
} else {
this.target.r_txt.text = "error";
}
};


Rails側


適当なコントローラーを作成

$ ruby script/generate controller flash

flash_controller.rb


class FlashController < ApplicationController
def hello
@data = @params["data"]
end
end

hello.rhtml


result=<%= @data %>

2006年10月10日

onLoadCompleteとonLoadInitの違い

ちょっとだけはまった。
onLoadCompleteで_heigthと_widthは0になる
onLoadInitだと両方とも取得できる。

どやらonLoadCompleteではMovieClipが初期化されていないらしい。

詳しくはこちら
FN0501003 - MovieClipLoaderクラスについて - Flash : テクニカルノート
http://www.fumiononaka.com/TechNotes/Flash/FN0501003.html

サンプルコード


var mc:MovieClip = this.createEmptyMovieClip("mc",this.getNextHightestDepth());
var loader:MovieClipLoader = new MovieClipLoader();
var lo:Object = new Object();

lo.onLoadComplete = function(mc:MovieClip):Void {
trace(mc._height); // 0になる
trace(mc._width); // 0になる
}

lo.onLoadInit = function(mc:MovieClip):Void {
trace(mc._height); // ちゃんと出力
trace(mc._width); // ちゃんと出力
}

loader.addListener(lo);
loader.loadClip("sample.jpg",mc);

ASOファイルの削除

いつも手作業で消してたけど、Flash8からは「ASOファイルを削除」なんてメニューが追加されてた。パブリッシュのとき以外はほとんどFlashをさわらないので今まで気づかなかった。

aso.png

2006年10月12日

IE7とIE6を判別するJavaScript

そろそろIE7がきそうな感じです。

このコードは重要になるかな?


if (typeof document.body.style.maxHeight != "undefined") {
// IE 7, mozilla, safari, opera 9
} else {
// IE6, older browsers
}

Abe Fettig’s Weblog ? Detecting IE7+ in Javascript
http://fettig.net/weblog/2006/10/09/detecting-ie7-in-javascript/

2006年10月17日

MacだとFlashのテキスト入力でインライン入力できない

hoge.png

こいつが出てくるんだよなー
すっかり忘れてた。
しかも公式な情報がAdobeから出てないあたりも、あれな感じですな。
でもはWinでやりますかね

FLASH-JP.COM - フォーラム
http://www.flash-jp.com/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=5027&forum=5&move=prev&topic_time=1150157572

2006年10月18日

ActionScriptの物理エンジン

a-blog with F 物理好き?
http://appleple.heteml.jp/blog/index.php?ID=298


こちらで紹介されていた動画を見て、ActionScriptの物理エンジンがあったなーと思って調べてみた。


Flade - Flash Dynamics Engine
http://www.cove.org/flade/

Preview
http://recycle.andre-michelle.com/as3/beta3/revive/


あとは誰かこの辺から探してくれ。
Pages tagged with "actionscript+physics" on del.icio.us
http://del.icio.us/tag/actionscript+physics

2006年10月19日

ActionScript3.0の物理エンジン

この辺を見てたら見っけた。
http://del.icio.us/tag/actionscript+physics

APE - Actionscript Physics Engine
http://www.cove.org/ape/

APE - Actionscript Physics Engine
http://www.cove.org/ape/demo1.htm

ActionScriptでundefinedって予約語だったんだ!!

IT戦記 - JavaScript で undefined って予約語じゃなかったんだ!!
http://d.hatena.ne.jp/amachang/20061018/1161118305

ということだったのでActionScriptでも試してみた。

undefined = 1;
trace(undefined);

でパブリッシュしたら


代入演算子の左側は、変数またはプロパティでなければなりません。
undefined = 1;
ActionScript エラー数 :1 報告済みエラー :1

だってさ。

ということで、ActionScriptのundefinedは予約語!

2006年10月23日

ActionScriptやるときイロイロ参考にするサイトなどなど

とりあえずURLだけ。

As2lib ? Welcome ? Open Source ActionScript 2.0 Library
http://www.as2lib.org/ 

Person13
http://www.person13.com/ascblibrary/

IFBIN.COM - Great Software By Example
http://www.ifbin.com/?code=5etdemi

senocular.com : News
http://senocular.com/

Hotscripts.com :: Flash
http://www.hotscripts.com/Flash/index.html

Actionscript.org Macromedia Flash Resources and Tutorials
http://actionscript.org/index.php

Flash Kit, A Flash Developer Resource for Macromedia Flash MX Tutorials SWF FLA images clipart Sounds WAVS Animations Help and Support
http://www.flashkit.com/

kirupa.com - Flash and ActionScript Tutorials
http://www.kirupa.com/developer/flash/index.htm

gotoAndLearn.com
http://www.gotoandlearn.com/

Flash Perfection - Flash Tutorials
http://www.flashperfection.com/

Flashmatics Library
http://www.experiments.flashmatics.co.uk/

Open Source Flash - osflash
http://osflash.org/

Movie Clip Tweening prototypes - download
target="_brank"http://laco.wz.cz/tween/

senocular.com Flash ActionScript Library
http://www.senocular.com/flash/actionscript.php

MosesSupposes :: Fuse Kit
http://www.mosessupposes.com/Fuse/index.html

Home - AsWing.org - AsWing.org
http://www.aswing.org/display/AsWing/Home

XFactor Studio
http://www.xfactorstudio.com/

form = function :: draw methods
http://www.formequalsfunction.com/downloads/drawmethods.html

Index of /
http://recycle.andre-michelle.com/

Home - Confluence
http://thinkkit.org:8180/confluence/display/ASLIB/Home

2006年10月27日

Apollo

Apolloの情報がいろいろ増えてきているようです。

Apollo - Adobe Labs
http://labs.adobe.com/wiki/index.php/Apollo

ApolloとはAdobeの新たなプラットフォームで、PCのローカルでFlashとかPDFとかHtmlとかJavascript(Ajax)動いちゃいますよ的なものです。
ようはFlashでローカルアプリケーションとかが作れちゃう訳です。

MacのDashboardとかVistaのGadgetとなどは、JavaScript+Htmlだったけど、それに近いものになるのだろうか。。

でもFlashからローカルのファイルとか、その他もろもろにアクセスできるってのは魅力的。


HtmlのレンダリングはSafariに使われてるWebkitになるらしいですね
Apolloアプリへファイルをドラッグ&ドロップできるそうなので、FlashにファイルをD&Dなんてこともできるんじゃないでしょうか。とあるアプリを作ってるときに、FlashにファイルD&Dできればなんてこともあったので、こういった機能は非常にありがたいです。Flashで作られるアプリの幅がぐっと広がりそうです。

問題は多分セキュリティですね。ファイルに直接アクセスとか、できてしまうといろいろと問題が出てきそうです。

Flex Coderの方がいろいろと情報を出してくれてますね
http://d.hatena.ne.jp/sato-shi/searchdiary?word=*%5BApollo%5D

とにかく、Apolloには今後も注目ってことで。

SWFObjectが激しく便利

deconcept ? SWFObject: Javascript Flash Player detection and embed script
http://blog.deconcept.com/swfobject/

SWFをJavaScript使って出力するやつ。
Playerのバージョンとかも簡単に検出できます。

例えばこんなメソッドを用意しておいて。


function swfOrImg(so,version,write) {
var ver = deconcept.SWFObjectUtil.getPlayerVersion();
if (ver['major'] >= version) {
so.write(write);
}
}

htmlにはこんな感じにしておくと、一定のバージョン以上じゃないと、代わりの画像を表示とか簡単にできます。


<div id="flashcontent">
かわりのがぞう
</div>
<script type="text/javascript">
// <![CDATA[
var so = new SWFObject("swf/hoge.swf", "hoge", "200", "100", "8", "#FFFFFF");
swfOrImg(so,8,"flashcontent");
// ]]>
</script>

ExpressInstallにも対応してるみたいですね。
日本語のドキュメントはこちらの方が翻訳されてます。
trick7.com blog: SWFObjectのドキュメントを日本語に翻訳してみたよ
http://www.trick7.com/blog/2006/06/15-135235.php

追記
どうやら、半年ほど前に自分でdel.icio.usにブックマークしてたのに使ってなかったらしい。

2006年11月01日

イベントリスナー

【ハウツー】Flash 9 ActionScript 3.0 Previewのイベントリスナーとクラス定義 (1) ActionScript 1.0/2.0から3.0にスクリプトを書替える(1) (MYCOMジャーナル)
http://journal.mycom.co.jp/articles/2006/10/31/as/

ActionScript3.0はなんとく敬遠してたけど、これ読んでたら、いけるんじゃねって思った。
最近はActionScript2.0で書くときも、ちゃんとイベントリスナー使うようにしてるから、この辺はさくっと移行できるかも。

このごろAS2のフレームワークとかをイロイロ試してます。
この辺のはよくできてるっぽい。

WebHome < ASAP < TWiki
http://asapframework.org/wiki/bin/view/ASAP/

As2lib ? Welcome ? Open Source ActionScript 2.0 Library
http://www.as2lib.org/

Home - AsWing.org - AsWing.org
http://www.aswing.org/display/AsWing/Home

MosesSupposes :: Fuse Kit
http://www.mosessupposes.com/Fuse/

ASAPを少し使ってみようかなって感じです。

知られざるJavaScriptの世界

知られざるJavaScriptの世界:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20061026/251846/

かなりわかりやすいjavascriptでオブジェクト指向な説明

2006年11月02日

もうActionScript3.0の本が出てる、しかも和書

Amazon.co.jp: ActionScript 3.0ゲームプログラミングブック?Flash for Professionals: 本: 布留川 英一
http://www.amazon.co.jp/gp/product/4839921938/sr=1-2/qid=1162442459/ref=sr_1_2/503-6116509-7787959?ie=UTF8&s=books

はえーっすな。

2006年11月05日

Adobe MAX 2006 フラッシュレポート

Adobe MAX 2006 フラッシュレポート
http://www.adobe.com/jp/events/max/report/

Maxのレポートがありました。14ページと長いですが。。。

Apolloに関することも色々書いてあったけど、ちゃんと普及すれば面白いものが作れるかも。
FlashとJavaScriptの関係もApollo上ではかなりシームレスな感じらしい。

Apolloアプリケーションの中では、JavaScriptとActionScriptオブジェクトモデルがブリッジされます。これにより、 ActionScriptからHTMLのドキュメントオブジェクトモデル(DOM)に直接アクセスすることが可能になります。また、JavaScript からFlashのディスプレイリストを操作したり、ActionScriptからJavaScriptをインスタンス化することもできます。

* JavaScriptから同期的にActionScript関数を呼び出す、またはその逆
* ActionScriptはJavaScriptオブジェクトへの参照を保持でき、その逆も可能
* 従来のExternalInterfaceによるActionScriptとJavaScriptの通信よりもシームレス

HTML+JavaScriptのみでApolloアプリ作れるみたいだし、JavaScriptから直接Apollo APIへアクセスもできるとのこと。

Flashのコンポーネントについても少し触れてたけど、正直現状のコンポーネントはクソなので、ちょっと凝ったもの作るときは、コンポーネントを自作するか、誰かが作ったフレームワーク類を利用しないときつい。
新しいコンポーネントでは速度の強化とか、スキンを簡単に変えることができるようになるって書いてあった。
速度もそうなんだけど、今のコンポーネントってあからさまに、これコンポーネントじゃんって感じなので何とかしてほしいっす。
この辺ちゃんと実装してくれないと、また「コンポーネントつかえねー」になるので、がんばってほしいし、期待してますAdobeさん。

2006年11月09日

MacでFlash Playerのバージョンを切り替える

Firefoxのエクステンションです。

sephiroth.it - flash & php: Flash Switcher for OSX
http://www.sephiroth.it/weblog/archives/2006/11/flash_switcher_for_osx.php

インストールするとFirefoxの右下にFlashPlayerのアイコンが出てきて、クリックするとバージョンを切り替えれます。自動的にFirefoxが再起動します。

playersw.png

Safariとかも影響を受けるみたいですが、そんな時はSafariを再起動すれば大丈夫みたいです。

ちなみにWindowsでFlash Playerを切り替える場合はこちら
Flash Switcher (win) | Firefox Add-ons | Mozilla Corporation
https://addons.mozilla.org/firefox/3649/

2006年11月21日

Flashで360°

ぐりぐり動きます

CubicVR 360° with Flashplayer9
http://cubicvr.popforge.de/

2006年11月26日

Flashのパーマリンク問題をSWFAddressで解決

<追記>  200811.17
割と情報が古くなってます。
swfaddressを利用したい方はProgressionを利用することを強く強くおすすめします!!

h1_logo.png

ProgressionはFlashサイトを構築する為のフレームワークで、これを利用することで面倒なスクリプトを書かずにサイトが構築できます。
</追記>

<追記> 
SWFAdreess2 はこちら
SWFAddress2をSWFObject2でつかってみる (Unknown Quality)
http://un-q.net/2007/12/swfaddress2_swfobject2.html
</追記>

Flashサイトでよく問題になるのがパーマリンク。
例えば、商品を複数紹介しているサイトとかで、各商品ページへをブックマークしよと思っても、パーマリンクが存在しないので、トップページをブックマークしてしまうことになる。他のページからのリンクでも、その商品へのリンクができない。

よくやる解決手法の1つがPHPなどでURLの最後に「?id=10」でアクセスされたら、FlashVars経由でFlashへidを渡し、任意のページへ移動させたりする。
この手法は他のサイトからのリンク辿ってくる場合にはOKだけど、Flash内でのページ遷移ではURLは変化しないので、ブックマークとかは無理。親切なサイトだと、このページへのリンクはhogehogeと書いてあったり、クリックするとURLがクリップボードにコピーされる仕組みを用意してるなんてのもあった。

Nikeのサイトとかは、結構前からこの辺の問題をスマートに解決してて、Javascriptを駆使してFlash内のページ遷移もページを更新することなくURLを変更してた。

で、この辺のことをまとめてやってくれるのが「SWFAddress」
Asual ? SWFAddress
http://www.asual.com/swfaddress/

とりあえずサンプル作ってみた
SWFAddress Test
http://labs.un-q.net/flash/swfaddress/

as1、as2、as3、それぞれのスクリプトが用意されてて使い方も簡単。

as2だったらこんな感じ

import SWFAddress;

btn_mc.onRelease = function() {
SWFAddress.setValue('/page1/');
}

SWFAddress.onChange = function() {
サンプルはこの辺でページ遷移処理してた
}

ページのタイトルも

SWFAddress.setTitle("Hage Hage");

で切り替えられるので、ブックマークとかもばっちり。

どっちかっていうとアプリ作ることのほうが多いけど、Flashサイト作るときは必ずこういう作りにしよう。

2006年12月07日

所属してるMovieClipの深度を出力

var mc_array = String(this.a.b).split(".");

for (i=0; i < mc_array.length; i++) {
var mc_name = mc_array.slice(0,i+1).join(".")
trace(mc_name + " : " + eval(mc_name).getDepth());
}

結果


_level0 : -16384
_level0.a : -16383
_level0.a.b : -16383

オーサリングで置いたMovieClipの深度はマイナスになる。

深度嫌いorz

2006年12月14日

Flash8ライセンス移行

MX2004のような移行はなくなったらしい。

Macromedia - General TechNotes : gn0023 - Macromedia 製品のアンインストール方法
http://www.adobe.com/jp/support/general/ts/documents/gn0023.html

Flashのヘルプはだめー

Flashについてるヘルプはすげー使いにくいので。

Windowsなら
Mike Chambers
http://weblogs.macromedia.com/mesh/archives/2004/04/flash_resource.html

Macなら
Software- XASH
http://developer.mabwebdesign.com/xash.html

を使いましょう。

ちなみにXASHは日本語環境で動かないので下記参照にて解決してください。
ActionScript Junky! : osX用 スタンドアロンhelp XASH ->日本語化
http://www.actionscript-junky.net/p_blog/article.php?id=147

Macで初めてのFlex2

してみた。

とりあえず環境から。
1, http://www.flex.org/ からSDKをダウンロード。
2, /Developer/SDKs/Flex_sdk_2 とかに置いて flex でンボリックリンク作っておく。
3, /Developer/SDKs/flex/binにパスを通す。

環境おわり。

hello.mxmlとかてきとーな名前のファイルを以下の内容で作成

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
   layout="absolute">
    <mx:Label x="10" y="10" text="こんにちはこんにちは" fontSize="40"/>
</mx:Application>

コンパイル

mxmlc Hello.mxml

以上!


Macで初めてのActionScript3.0

前の続き
Macは別に関係ない

以下のようなファイルをasファイルを作成


package {
import flash.display.*;
import flash.text.*;

public class HelloAS extends Sprite {
public function HelloAS() {
var textField:TextField = new TextField();
textField.text = "こんにちはこんにちは";
addChild(textField);
}
}

}

コンパイル

mxmlc HelloAS.as 

できた

2006年12月23日

ユーザーテスト

最近ユーザーテストというものをやってみている。

とりあえず見よう見まねで初めてみたけど、なかなかいいかも。
どーしても、作ってる側は都合のいいユーザーをイメージしてしまっているようだ。
何かの本には「ゴムのユーザー」って書いてあって、なるほどなーと思った。

実際に何も知らない人に使ってみてもらうと、いろいろとわかってくる。
結構見てると面白い。

ユーザーテストのときは、テストの被験者になるべく独り言を言ってもらえるようにした方がよさそう。
頭のなかで考えていることを声にだしてもらうことで、見てるだけじゃわからないことがどんどん伝わってくる。

でもこちらが何も反応しないと、被験者の人が独り言いってくれなくなるからおうむ返しするとよさげ。
独り言に答えちゃうと意味がないし、相づちとかもYESと意味と取られてはまずいしね。

あとはこちらから与える情報をどーするかも肝になりそう。

勉強ですな。

2006年12月28日

Macでmxmlcのメッセージが化ける問題解決

隣の人が解決してくれた。

mxmlcでmxmlなりActionScript3なりをコンパイルすると、コンパイル時のメッセージが英語でも化けてた。

で問題はJavaにあった様子。
OSX標準搭載のJavaコマンドがshift_jis出力らしい。

なのでmxmlcを書き換えると解決する。

java $VMARGS -jar $FLEX_HOME/lib/mxmlc.jar $*

java -Dfile.encoding=UTF8 $VMARGS -jar $FLEX_HOME/lib/mxmlc.jar $*

隣のひとマジでありがとう

MacでFlashPlayer9のTraceが出力されない問題解決

ActionScript3のtraceはファイルに出力することができる。
その設定をmm.cfgにするんだけど、なかなかうまくいかなかった。
そしてまたもや隣の人が解決w

ちなみにMacだと

/Library/Application Support/Macromedia

にmm.cfgはあります。

TraceOutputFileNameというプロパティがあるんだけど、これの設定が間違ってた。
ふつーに

/Users/username/Desktop/flashlog.txt

って指定してたんだけど、正しくは
Macintosh HD:Users:username:Desktop:flashlog.txt

とする必要がある

全く気づかなかった。
またまたありがとう隣の人


参考
Trace and debug ActionScript from your browser
http://www.actionscript.org/resources/articles/207/1/Trace-and-debug-ActionScript-from-your-browser/Page1.html

デバッガ版の Flash Player の構成 -- Flex 2
http://livedocs.macromedia.com/flex/2_jp/docs/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts&file=00001371.html


関連記事
MacでFlashPlayer9のTraceが出力されない問題解決 その2 (Unknown Quality)
http://un-q.net/2006/12/macflashplayer9trace_1.html

MacでFlashPlayer9のTraceが出力されない問題解決 その2

前回のエントリーで解決したんだけど、その追記。
前回のはこちら

またまた隣の人が解決

実はIntel Mac版のプレイヤーではdebugプレイヤーがスタンドアローン版しか存在しなかった。
でもIntel Mac版のプラグインを発見

Flex Builder 2の体験版をインストールすると、
/Applications/Adobe Flex Builder 2 Beta/Flex SDK 2/player/debug
の中に「Install Flash Player 9 UB.app」というファイルがある。
これがユニバーサルバイナリーのデバッグプレイヤー、プラグイン版

しかし、インストールしてもtraceが出力されない。。。
これをまたもや隣の人が解決してくれた。

前回のエントリーでmm.cfgに

TraceOutPutFileName=Macintosh HD:Users:username:Desktop:flashlog.txt

と設定してたんだけどこれを
TraceOutPutFileName=Macintosh HD:Users:username:Library:Preferences:Macromedia:Flash Player:Logs:flashlog.txt

と設定したらtraceでたー

なぜはよーわからん。。。

ちなみにtraceはFirefoxのプラグイン「Flash Tracer」を利用すると便利です。
FlashTracer | Firefox Add-ons | Mozilla Corporation
https://addons.mozilla.org/firefox/3469/

2007年01月10日

Dashcode

Dashboard用のウィジェット開発ツールがいつの間にかβ版だけど出てた。
Leopardには最初から入るらしい。

Tools - Dashcode Beta
http://developer.apple.com/tools/dashcode/

ダウンロードはなんかアカウントいるみたいだけど、無料で登録できた。

DashboardにFlashって読み込めるのかな。

2007年01月11日

FlashからPOSTでデータを送ってXMLをFlashで受け取る

var send_lv:LoadVars = new LoadVars;
var load_xml:XML = new XML();

send_lv.data = "hgoe";

load_xml.ignoreWhite = true;
load_xml.onLoad = function() {
trace(this);
};

send_lv.sendAndLoad("送信先のパス", load_xml, POST);

2007年01月15日

OnEnterFrameBeacon

いつも使おうと思ったときに忘れているのでメモ。


Frame

import mx.transitions.OnEnterFrameBeacon;
OnEnterFrameBeacon.init();
var hoge:Object = new Object();
hoge.onEnterFrame = function () {
trace("はげー");
}
MovieClip.addListener(hoge);
//MovieClip.removeListener(hoge)

Class

import mx.transitions.OnEnterFrameBeacon;
class Hoge {
function Hoge() {
OnEnterFrameBeacon.init();
MovieClip.addListener(this);
}
function onEnterFrame() {
trace("はげじゃねー");
}
}

参考
BicRe: OnEnterFrameBeaconの使い方
http://blog.cellfusion.jp/2005/12/onenterframebeacon.html

2007年01月16日

MovieClip.lineStyleのnoScaleパラメータ

lineStyle (MovieClip.lineStyle メソッド)
http://livedocs.macromedia.com/flash/8_jp/main/00002477.html

こんなパラメータが増えてたなんて知らなかった。
noneにすればオブジェクト拡大したときに線の太さが変わらない。

noScale:String - Flash Player 8 で追加されました。線の拡大・縮小方法を指定するストリングです。有効な値は次のとおりです。

"normal" - 常に太さを拡大・縮小します (デフォルト)。
"none" - 太さを拡大・縮小しません。
"vertical" - オブジェクトを垂直方向にのみ拡大・縮小する場合、太さを拡大・縮小しません。
"horizontal" - オブジェクトを水平方向にのみ拡大・縮小する場合、太さを拡大・縮小しません。

2007年01月17日

こんなにActionScriptやってるのに知らなかった

if 〜 in なんてなかったのね。。。
ざんねん

IT戦記 - こんなに JavaScript やってるのに知らなかった基本文法「if in」
http://d.hatena.ne.jp/amachang/20070115/1168859275

オブジェクトが真か偽か

if (obj.property) {
    // ...
}

オブジェクトにプロパティがあるかは置いといて undefined ではないことを確かめる

if (typeof obj.property == 'undefined') {
    // ...
}

オブジェクトにプロパティがあるか。

動きません ><
if ('property' in obj) {
    // ...
}
**エラー** /Users/yosuke/labs/flash/if/main.as: 行 16:')' が必要です。
     if ('property' in obj) {

ActionScript エラー数 :1 報告済みエラー :1

オブジェクト自体(プロトタイプを含まない)にプロパティがあるか

if (obj.hasOwnProperty('property')) {
    // ...
}

まとめ

if in 以外は動きました。 ざんねんですな。

追記
ActionScript3.0ではif in があるそーです。
hagaさん情報ありがとうございます。

2007年01月22日

ActionScript3でWebカメラ

なんとなーくカメラ関連をやってみようかなと思って書いてみた。

左下のボタンっぽいものをクリックすると、キャプチャを右側に生成します。

CameraExample

ここんとこずーっとAS2ばかりだったけど、AS3のほうがプログラマに優しい気がする。。。


package {

import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.*;
import flash.media.Camera;
import flash.media.Video;

public class CameraExample extends Sprite {

private var video:Video;
private var bm:Bitmap;
private var bmd:BitmapData;
private var btn:Sprite;

public function CameraExample() {

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

// camera
var camera:Camera = Camera.getCamera();

if (camera != null) {
video = new Video(camera.width * 2, camera.height * 2);
video.attachCamera(camera);
addChild(video);
} else {
trace("You need a camera.");
}

// bitmap
bmd = new BitmapData(camera.width*2, camera.height*2 ,false,0xaaaaaa);
bm = new Bitmap(bmd);
bm.x = camera.width*2 + 10;
addChild(bm);

// button
btn = new Sprite();
btn.buttonMode = true
btn.graphics.beginFill(0x333333);
btn.graphics.drawRect(0,0,100,30);
btn.y = camera.height*2 + 10;
addChild(btn);
btn.addEventListener(MouseEvent.MOUSE_UP, btnUp);

}


private function btnUp(e:MouseEvent):void {

bmd.draw(video);
bm = new Bitmap(bmd);

}
}
}

2007年01月29日

名古屋でActionScriptの勉強会やりました

WCANの分科会として「WCAN mini vol.1 [FlashのActionScript勉強会]」を行いました。

WCAN [ Web Creators Association Nagoya ] WCAN mini vol.1 [FlashのActionScript勉強会]
http://www.wcan.jp/index.php?ID=92

一応主催者側のひとでした

勉強会ということで、皆さんに発表をしてもらう形式をとったのですが、私の進行とかが、ぐだぐだで皆さんご迷惑おかけしました。

会の雰囲気は非常によかったので、あの雰囲気のまま続けていければと思います。
集まった方は、デザイナーさん、プログラマさん、ディレクターさんといろいろでした。
「作業環境」というお題で発表してもらったんですが、特にプログラマさんのActionScript開発環境はこだわりが感じられました。

CUIのみでActionScriptを開発する人や、haXeやってる人とか、なかなかコアな方もいておもしろかったです。

今後も継続的にやっていきたいと思っているので、名古屋のActionScriptを盛り上げていければと思います。


私の発表資料を公開しておきます。
wcanmini01.pdf


追記
IT戦記 - ActionScriopt の勉強会で話してキタ!
http://d.hatena.ne.jp/amachang/20070130/1170144721

a-blog with F 名古屋でActionScriptの勉強会
http://appleple.heteml.jp/blog/index.php?ID=378

2007年02月01日

EYE-PROJECT

http://eye.kddi.com/

fladdict.net blog: EYE-PROJECT BY KDDI プレラウンチ
http://fladdict.net/blog/2007/02/eyeproject_by_kddi.html

すげーよなー

2007年02月02日

Getting Real

が翻訳されとる

Getting Real by 37signals
http://gettingreal.37signals.com/GR_jap.php

仕事中に口笛を吹いて、コンピューターにコマンドを実行させる

IBM 仕事中に口笛を吹いて、コンピューターにコマンドを実行させる - Japan
http://www-06.ibm.com/jp/developerworks/opensource/library/os-whistle/

あほだけど、こーいうのすげー好き

2007年02月08日

ActionScriptでthisがundefinedになる

右クリックからメソッドを呼び出した場合、thisがundefinedになりますた。。。
AS2っす。


var my_cm:ContextMenu = new ContextMenu();
my_cm.customItems.push(new ContextMenuItem("hoge", hoge));
function hoge(obj, item) {
trace(this); // undefined
}
this.menu = my_cm;

そーいうもんなのかな。

fladdict.net blog: JavaScript, ActionScriptにおける .this とは何なのか?
http://www.fladdict.net/blog-jp/archives/2005/09/javascript_acti.php

これを読むと、thisってのは
「その関数を、何のプロパティと解釈して呼び出したか?」
とあるけど、この場合、関数は「未定義な何か」から呼び出されたってことなのか。。。

うーん、よくわからん。

追記

ActionScript3でやってみた
呼び出されたメソッドのthisは「[object ContextMenuExample]」だった


package {
import flash.ui.ContextMenu;
import flash.ui.ContextMenuItem;
import flash.events.ContextMenuEvent;
import flash.display.Sprite;

public class ContextMenuExample extends Sprite {
private var myContextMenu:ContextMenu;

public function ContextMenuExample() {

myContextMenu = new ContextMenu();
var item:ContextMenuItem = new ContextMenuItem("hoge");
myContextMenu.customItems.push(item);
item.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, hoge);
this.contextMenu = myContextMenu;
}

private function hoge(event:ContextMenuEvent):void {
trace(this); //[object ContextMenuExample]
}

}
}

2007年02月14日

FlashのログをFirebugに出す方法

import flash.external.*;
ExternalInterface.call("function() { console.log('hage') }");

ExternalInterface.callで無名関数使えばhtml側にjavascriptなくても動いちゃう!
普段はFlashTracer使ってるけどこれもありかもしれんね。


追記
CLON - 2007/02/15
http://unknownplace.org/memo/2007/02/15#e004
ぬあー
確かに意味がないーーー
はずかしー ><

ExternalInterface.call("console.log", "hoge");

ご指摘ありがとうございます。。

しかもこっちの方がべんりー
CLON - 2006/12/09 - JSコンソールにログをはくActionScript
http://unknownplace.org/memo/2006/12/09#e005


参考
CLON - 2007/01/25 - js無名関数 with ExternalInterface
http://unknownplace.org/memo/2007/01/25#e003

deconcept ? RegExp in Flash 8 using ExternalInterface
http://blog.deconcept.com/2005/08/29/regexp-flash-8-using-externalinterface/

2007年02月16日

高度なテクニック

高度なテクニック -- Flex 2
http://livedocs.adobe.com/flex/2_jp/docs/00001847.html

後で読む

2007年02月22日

FlashのログをFirebugに出すFlashBug

そろそろActionScript2.0のネタなのかActionScript3.0のネタなのかはっきり書いておかないと混乱しそう。

これはActionScript2.0ネタです

Debug flash with Firebug | Foobr, forever beta
http://foobr.co.uk/2007/02/debug_flash_with_firebug/

これ使うとFireBugのconsole系のメソッドがActionScriptから使えちゃいます。

こんなかんじ。


var console = new flashBug(true);
console.time("flashBug Total running time");
console.info("This is some general information");
console.debug("Variable foo: "+foo);
console.warn("This has some important information");
console.error("Whoops, there has been an error!!!");
console.timeEnd("flashBug Total running time");

flashBug-tests
http://www.reach-out.org.uk/flashBug/

consoleっていろいろ機能があったんだ。

IT戦記 - FireBug の console を toSource してみた
http://d.hatena.ne.jp/amachang/20060905/1157436393

Firebug Command Line API
http://pages.citebite.com/l1e1e3k7h0qys

Apollo for Adobe Flex Developers Pocket Guide: A Developer's Reference for Apollo's Alpha Release

Amazon.co.jp: Apollo for Adobe Flex Developers Pocket Guide: A Developer's Reference for Apollo's Alpha Release: 洋書: Mike Chambers,Rob Dixon,Jeff Swartz
http://www.amazon.co.jp/Apollo-Adobe-Developers-Pocket-Guide/dp/0596513917/

予約した!

2007年02月23日

Flex2でCover Flow

Cover Flowってのはこれ
アップル - iTunes - ジュークボックス - Cover Flow
http://www.apple.com/jp/itunes/jukebox/coverflow.html

これをFlex2でやってる人いた
Quietly Scheming ? Tutorial: DisplayShelf Component
http://www.quietlyscheming.com/blog/components/tutorial-displayshelf-component/

実際の動作はこんな感じ
http://demo.quietlyscheming.com/displayShelf/index.html

前にtrick7さんがActionScript2.0でやってましたね。
trick7.com blog: Flash で cover flow 表現
http://www.trick7.com/blog/2007/01/29-222233.php

ActionScript3.0本

Amazon.co.jp: Actionscript 3.0 Cookbook: 洋書: Joey Lott,Darron Schall,Keith Peters
http://www.amazon.co.jp/Actionscript-3-0-Cookbook-Joey-Lott/dp/0596526954/

Amazon.co.jp: Advanced ActionScript 3 with Design Patterns: 洋書: Joey Lott,Danny Patterson
http://www.amazon.co.jp/Advanced-ActionScript-3-Design-Patterns/dp/0321426568/

隣の人が買った。

2007年02月26日

入力できるTextFieldのautosizeをtrueにしたらWindowsでテキストが隠れる

actionscript2ネタ

typeをinputにしたTextFieldのautosizeをtureにした場合、Windowsのみ右矢印キーを押し続けると、左側が隠れてしまう。

で解決策としてはonEnterFrameで常に +10し続ける。
美しくない解決だ。。。

Macじゃなんともないのにな


さんぷる



そーす


text_txt1 = createTextField("text1",getNextHighestDepth(),0,0,0,0);
text_txt1.type = "input";
text_txt1.text = "Windowsでかくれちゃう";
text_txt1.border = true;
text_txt1.autoSize = true;
text_txt1.multiline = true;
text_txt1._x = 10;
text_txt1._y = 10

text_txt2 = this.createTextField("text",this.getNextHighestDepth(),0,0,0,0);
text_txt2.type = "input";
text_txt2.text = "Windowsでもかくれない";
text_txt2.border = true;
text_txt2.autoSize = true;
text_txt2.multiline = true;
text_txt2._x = 10;
text_txt2._y = 50;

onEnterFrame = function () {
text_txt2._width =+ 10;
}


2007年02月27日

Photosynth Technology Preview

Photosynth Technology Preview
http://labs.live.com/photosynth/view.html?collection=sanmarco/index1.sxs

Macで見れねーけどスゲー!!!
WPFとは違うのかな。。
WindowsだけどFirefoxで動いた

2007年02月28日

計算機プログラムの構造と解釈

Amazon.co.jp: 計算機プログラムの構造と解釈
http://www.amazon.co.jp/exec/obidos/ASIN/489471163X/

いまさらだけど手元に届いた。
長い戦いになりそうだ。

2007年03月02日

ぼくはすくりぷとは

oreilly.co.jp -- Online Catalog: Flashクックブック
http://www.oreilly.co.jp/books/9784873113197/

でもちょっと気になる

Flash Video on 3D すげー!!!

ActionScript Architect ? Blog Archive ? Flash Video on 3D
http://www.actionscriptarchitect.com/2007/02/28/flash-video-on-3d/

Mike Downey: Coolest Flash demo - EVER! Flash video on 3D!!!
http://weblogs.macromedia.com/md/archives/2007/02/coolest_flash_d.cfm

WPFのデモにあったのと同じようなのをFlashで再現。
どんどんFlashにも3Dの波が。。。。

2007年03月05日

lighttpdでflvのストリーミング配信ができるらしい

とりあえーずめも

lighttpd で Flash Video (.flv) をストリーミング配信 - METAREAL
http://weblog.metareal.org/2007/01/09/flash-video-streaming-with-lighttpd/

lighttpd で Flash Video (.flv) をストリーミング配信 (2) - METAREAL
http://weblog.metareal.org/2007/01/09/flash-video-streaming-with-lighttpd-take-2/

lighttpd には 1.4.11 から mod_flv_streaming という、そのものズバリのモジュールが用意されてまして、こいつを使うと、さきほどの欠点の 1. を克服して、任意の場所から再生が可能になる。

2007年03月14日

Camera Puzzle

とあるところで、とある人にWPFのデモを見せていただいた。
さすがWindowsネイティブで動いてるだけあってすげーね。
3Dもいいけど、テキストの扱いがすばらしい。Flashでもあれくらいうまくテキストが扱えるようになればいいのに。

見せてもらった物に対して、これFlashでも出来ますよ的な発言をたくさんしてしまったので、作ってみました第一弾!
私のうっとうしい発言に付き合ってくれた、とある人、ありがとうございます。

WPFでビデオを分割してパズルにしてたので、おなじよーなものを作ってみた。
パズルのロジックがメンドーだったのでビデオを分割してD&D出来るようにしてみた。
左側がソースの動画。右側が分割した動画。


Camera Puzzle
http://labs.un-q.net/as3/camerapuzzle/index.html


カメラがある場合はカメラの動画を、ない場合はFLVを再生します。

なんかyoutubeのFLV直接読み込んでcopyPixelsとかしようと思ったら怒られた。
どうやらセキュリティの問題みたいね。

あとFLVの再生がたまに途中で止まる。
これはよくわからん。

次は3D系に挑戦かな

そーす


package {
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.*;
import flash.media.Camera;
import flash.media.Video;
import flash.utils.ByteArray;
import flash.geom.Rectangle;
import flash.geom.Point;
import flash.net.NetConnection;
import flash.net.NetStream;

public class Puzzle extends Sprite {

private var video:Video;
private var camera:Camera;
private var rowCount:int;
private var lineCount:int;

private var videobmd:BitmapData;
private var videobm:Bitmap;

private var con:NetConnection;

private const PIECE_ROW:int = 5;
private const PIECE_LINE:int = 5;
private const FLV:String = "./video.flv";


public function Puzzle() {

trace("------- start Puzzle ---------");

stage.scaleMode = StageScaleMode.NO_SCALE;
stage.align = StageAlign.TOP_LEFT;

// camera
camera = Camera.getCamera();

if (camera != null) {
setupCamera();
trace("camera");
} else {
setupNetStream();
trace("FLV");
}

}


private function setupCamera():void {
video = new Video(camera.width * 2, camera.height * 2);
video.attachCamera(camera);
addChild(video);
onSetup();
}


private function setupNetStream():void {
con = new NetConnection();
con.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
con.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);
con.connect(null);
}


private function netStatusHandler(e:NetStatusEvent):void {
trace(e.info.code);
switch (e.info.code) {
case "NetConnection.Connect.Success":
connectStream();
break;
case "NetStream.Play.StreamNotFound":
trace("Unable to locate video : " + FLV);
break;
}
}


private function connectStream():void {
var stream:NetStream = new NetStream(con);
stream.checkPolicyFile = true;
stream.addEventListener(NetStatusEvent.NET_STATUS, netStatusHandler);
stream.addEventListener(AsyncErrorEvent.ASYNC_ERROR, asyncErrorHandler);
video = new Video();
video.attachNetStream(stream);
stream.play(FLV);
addChild(video);
onSetup();
}

private function securityErrorHandler(event:SecurityErrorEvent):void {
trace("securityErrorHandler: " + event);
}

private function asyncErrorHandler(event:AsyncErrorEvent):void {
// ignore AsyncErrorEvent events.
}


private function onSetup():void {

var w:int = video.width / PIECE_ROW;
var h:int = video.height / PIECE_LINE;

rowCount = 0;
lineCount = 0;

for (var i:int; i createPiece(i,w,h);
}

videobmd = new BitmapData(video.width, video.height ,false,0xaaaaaa);
videobm = new Bitmap(videobmd);

addEventListener(Event.ENTER_FRAME, btmCapture);
}


private function createPiece(c:int, w:int, h:int):void {

var tmpx:int;
var tmpy:int;
var bm:Bitmap;
var bmd:BitmapData;
var bmContainer:Sprite;

bmd = new BitmapData(w,h,false,0xaaaaaa);
bm = new Bitmap(bmd);
bmContainer = new Sprite();

addChild(bmContainer);
bmContainer.addChild(bm);

if (rowCount >= PIECE_ROW) {
lineCount++;
rowCount = 0;
}

tmpx = w*rowCount;
tmpy = h*lineCount;

var capture:Function = function(e:Event):void {
bmd.copyPixels(videobmd, new Rectangle(tmpx,tmpy,w,h), new Point(0,0));
}

bmContainer.x = (video.width + 10) + tmpx + rowCount;
bmContainer.y = tmpy + lineCount;

bmContainer.addEventListener(Event.ENTER_FRAME, capture);
bmContainer.addEventListener(MouseEvent.MOUSE_DOWN, containerDown);
bmContainer.addEventListener(MouseEvent.MOUSE_UP, containerUp);

rowCount++;
}

private function containerDown(e:MouseEvent):void {
setChildIndex(Sprite(e.target), numChildren-1);
e.target.startDrag();
}

private function containerUp(e:MouseEvent):void {
e.target.stopDrag();
}


private function btmCapture(e:Event):void {
videobmd.draw(video, null, null, null, new Rectangle(0, 0, video.width, video.height), false);
}

}
}

2007年03月16日

Flex Module for Apache and IIS

Flex Module for Apache and IIS - Adobe Labs
http://labs.adobe.com/wiki/index.php/Flex_Module_for_Apache_and_IIS

ApacheとかIISでもMXMLとASが動的にコンパイルできるってこと?

初めてのPapervision3D

してみた
サンプルとかをいじって作った
立方体にカメラの画像を出してみた


こんな感じ
Papervision3D CameraCube
http://labs.un-q.net/as3/papervision3d/cameracube/

Screenshot_1.jpg

なかなかおもしろそーですが、、、むずかしそーですね。

そーす


package {

import flash.display.*;
import flash.events.*;
import flash.media.Camera;
import flash.media.Video;

// Import Papervision3D
import org.papervision3d.scenes.*;
import org.papervision3d.objects.*;
import org.papervision3d.cameras.*;
import org.papervision3d.materials.*;
import org.papervision3d.events.*;

public class CameraCube extends Sprite {

private var video:Video;
private var camera:Camera;
private var bd:BitmapData;

private var container:Sprite;
private var scene:Scene3D;
private var camera3d:Camera3D;
private var rootNode:DisplayObject3D;

public function CameraCube() {

trace("-------- Camera3D strat ----------");

stage.quality = "MEDIUM";
stage.scaleMode = "noScale";
stage.align = StageAlign.TOP_LEFT;

init3D();
}


private function init3D():void {

camera = Camera.getCamera();

if (camera == null) {
trace("not camera");
return;
}

video = new Video(camera.width * 2, camera.height * 2);
video.attachCamera(camera);

bd = new BitmapData(video.width, video.height);

container = new Sprite();
addChild(container);
container.x = 300;
container.y = 200;

// create scene
scene = new Scene3D(container);

// create camera
camera3d = new Camera3D();
camera3d.x = 3000;
camera3d.z = -300;
camera3d.zoom = 25;
camera3d.focus = 100;

// roootNode
rootNode = scene.addChild(new DisplayObject3D("rootNode"));

var p0:DisplayObject3D = rootNode.addChild(new Plane(new BitmapMaterial(bd), 300, 300), "p0");
var p1:DisplayObject3D = rootNode.addChild(new Plane(new BitmapMaterial(bd), 300, 300), "p1");
var p2:DisplayObject3D = rootNode.addChild(new Plane(new BitmapMaterial(bd), 300, 300), "p2");
var p3:DisplayObject3D = rootNode.addChild(new Plane(new BitmapMaterial(bd), 300, 300), "p3");
var p4:DisplayObject3D = rootNode.addChild(new Plane(new BitmapMaterial(bd), 300, 300), "p4");
var p5:DisplayObject3D = rootNode.addChild(new Plane(new BitmapMaterial(bd), 300, 300), "p5");

// Bottom
p0.rotationX = 90;
p0.y = -150;

// Side
p1.rotationX = 180;
p1.z = 150;

// Top
p2.rotationX = -90;
p2.y = 150;

// Side;
p3.z = -150;

// back
p4.rotationY = 90;
p4.x = -150;

// front
p5.rotationY = -90;
p5.x = 150;

addEventListener(Event.ENTER_FRAME, loop3D);

}


private function loop3D(e:Event):void {

rootNode.rotationX++;
rootNode.rotationY++;

scene.renderCamera(camera3d);

bd.draw(video);
}

}

}

2007年03月18日

Apollo本とMashUp本

Amazonで予約してたけど、ダウンロードできたw
予約は取り消し
Apollo:Books:Apollo for Adobe Flex Developers Pocket Guide - Adobe Labs
http://labs.adobe.com/wiki/index.php/Apollo:Books:Apollo_for_Adobe_Flex_Developers_Pocket_Guide

fladdict.net blog: Apolloオライリー本クリエイティブコモンズで大放出
http://fladdict.net/blog/2007/03/apollo.html


.flaみたいな感じらしいので予約した!
Amazon.co.jp: MASHUP++: 本: さうなまん
http://www.amazon.co.jp/dp/4861671655

読んでない本がめちゃくちゃたまってるorz

2007年03月19日

Apollo キター!!!

Adobe Labs - Apollo
http://labs.adobe.com/technologies/apollo/

ランタイムつっこむとサンプルが動いたよ!
Apollo:Applications:Samples - Adobe Labs
http://labs.adobe.com/wiki/index.php/Apollo:Applications:Samples

SDKは重くてなかなかおちてこない><

TextField 内の <a href="http://google.co.jp" target="_blank">

はまりちゅう
as2です

TextField内のhtmlTextでリンクを"_blank"にするとfirefoxでポップアップブロックに引っかかる。リンク先は別ドメイン。

しかもリンクをクリックしまくると開いたりもする・・・。

SafariとかIEはだいじょーぶみたい。


普通にリンクしてもだめ


var t = createTextField("text", getNextHighestDepth(), 0,0,0,0);
t.autoSize = true;
t.html = true;
t.htmlText = "<a href='http://google.co.jp' target='_blank'>ここがりんく</a>"

asfunctionつかっていろいろやってもだめ


var t = createTextField("text", getNextHighestDepth(), 0,0,0,0);
t.autoSize = true;
t.html = true;
t.htmlText = "<a href='asfunction:link,http://google.co.jp'>ここがりんく</a>"

function link(str) {
getURL(str, "_blank"); // だめー
getURL("javascript:void(window.open('"+str+"', '_blank'))"); //ダメー
ExternalInterface.call("window.open",str); // だめーー
}

ちなみにmcのonPressとonReleaseでも挙動がちがうみたい

ブロックされない


b.onRelease = function() {
getURL("http://google.co.jp", "_blank");
}

ブロックされる


b.onPress = function() {
getURL("http://google.co.jp", "_blank");
}

たーすーけーてー

2007年03月26日

Spark project

Spark project
http://www.libspark.org/

BeInteractive! [Spark project 本格運営開始!]
http://www.be-interactive.org/?itemid=206

すげーすげー

前からいろいろ見てたんだけど、この方すごいです。

2007年03月27日

Papervision3Dのサンプル大量

Robots w/Lasers ? PV3D Examples
http://blog.davr.org/pv3d-examples/

大量大量

Flash CS3 Professional

AS2APP: Flash CS3 Professional
http://www.logicalyze.com/as2app/archives/2007/03/flash_cs3_professional_for_int.html

まじっすか!
βとかないのかね?


追記
akihiro kamijo: Adobe CS3 発表
http://weblogs.macromedia.com/akamijo/archives/2007/03/cs3_1.cfm

どうやら本当らしい

letterSpacing設定したTextFieldにDropShadowFilterすると

ActionScript2.0です。

MacのFlashPlayerで文字が消えます。
9.0.20と9.0.28で確認しました。
Winだと問題ないようです。

なぜー!!


さんぷる




上のテキストフィールドを選択するとテキストは存在するのに(選択、コピーできる)表示がされません。


そーす


import flash.filters.DropShadowFilter;

// letterSpacing あり
var text_txt = this.createTextField("text",this.getNextHighestDepth(),0,0,0,0);
text_txt.type = "dynamic";
text_txt.html = true;

var tf = new TextFormat();
tf.letterSpacing = 1;
tf.size = 20;
text_txt.setNewTextFormat(tf);
text_txt.htmlText = "letterSpacing あり";
text_txt.border = true;
text_txt.autoSize = true;

// letterSpacing なし
var text_txt2 = this.createTextField("text",this.getNextHighestDepth(),0,0,0,0);
text_txt2.type = "dynamic";
text_txt2.html = true;

var tf = new TextFormat();
//tf.letterSpacing = 1;
tf.size = 20;
text_txt2.setNewTextFormat(tf);
text_txt2.htmlText = "letterSpacing なし";
text_txt2.border = true;
text_txt2.autoSize = true;

// dropshadow
dropshadow(text_txt);
dropshadow(text_txt2);

function dropshadow(obj) {
var dsf:DropShadowFilter = new DropShadowFilter(4, 45, 0x000000, 0.4, 10, 10, 2, 3);
var tmp:Array;
tmp = obj.filters;
tmp.push(dsf);
obj.filters = tmp;
}


text_txt._y = 5;
text_txt._x = 5;
text_txt2._y = 40;
text_txt2._x = 5;

2007年03月28日

TextFieldにhtmlTextをいれると改行が

はいりやがることがあるのよん

ActionScript2.0です

htmlTextに<p>でくくったデータを挿入するとtypeがinputの場合のみ最後に改行が入ってしまう。

もうTextFieldいやー


さんぷる



そーす


// dynamic
var text_txt = this.createTextField("text",this.getNextHighestDepth(),0,0,0,0);
text_txt.type = "dynamic";
text_txt.html = true;
text_txt.border = true;
text_txt.autoSize = true;
text_txt.multiline = true;
text_txt.htmlText = "<p>改行はいらない</p>";

// input
var text_txt2 = this.createTextField("text",this.getNextHighestDepth(),0,0,0,0);
text_txt2.type = "input";
text_txt2.html = true;
text_txt2.border = true;
text_txt2.autoSize = true;
text_txt2.multiline = true;
text_txt2.htmlText = "<p>改行がはいる</p>";

text_txt._x = 5
text_txt._y = 5
text_txt2._x = 5;
text_txt2._y = 45;


var tf = new TextFormat();
tf.size = 20;

text_txt.setTextFormat(tf);
text_txt2.setTextFormat(tf);

2007年03月29日

【解決】TextFieldにhtmlTextをいれると改行が

なんとか解決?したかな

TextFieldにhtmlTextをいれると改行が (Unknown Quality)
http://un-q.net/2007/03/textfield_htmltext.html


まずはこれを試してみた。
tがテキストフィールド

var tmpTf = t.getTextFormat();
t.text = t.text.substring(0,t.text.length-1) + "\r";
t.setTextFormat(tmpTf);

これでも改行されなくなるんだけど、TextFieldのHTMLテキストが複雑だと(文字ごとにサイズが違うとか)、setTextFormatしてもちゃんと前の状態にならない。多分lenghtが変わっちゃうからだろうな。


でTextField.replaceText を使ってみた

t.replaceText(t.text.length-1, t.text.length, "");


かいけつー


TextFieldにはいつも悩まされる。。。
今度ActionScript3.0でもいろいろ試してみようかな。

こっちはまだ解決しません
letterSpacing設定したTextFieldにDropShadowFilterすると (Unknown Quality)
http://un-q.net/2007/03/letterspacing_textfield_dropshadowfilter.html

2007年04月03日

WireEngine3D

WireEngine3D (we3d) Open Source Flash
http://osflash.org/we3d

3Dエンジン
ちょっときになる

2007年04月09日

Wiimote and Flash 3D Demo

2007年04月12日

別ドメインから読み込んだswfからExternalInterface.callする場合

allowScriptAccessをalwaysにしましょう。


Adobe - デベロッパーセンター : Flash Player 8 のセキュリティ機能の変更点
http://www.adobe.com/jp/devnet/flash/articles/fplayer8_security_09.html


allowScriptAccess で指定できる値は次のとおりです。

  • always: ActionScript による JavaScript の呼び出しを常に許可します。
  • sameDomain: SWF と HTML ページのドメインが一致する場合にのみ、ActionScript による JavaScript の呼び出しを許可します。
  • never: ActionScript による JavaScript の呼び出しを常に許可しません。


2007年04月13日

FlashPlayer 9,0,45,0

アップデートされたみたい。

debugバージョンとかもこっちからダウンロードできます
http://www.adobe.com/support/flashplayer/downloads.html

主にCS3対応なのかな

Adobe - Flash Player: Adobe Flash Player 9 Release Notes
http://www.adobe.com/support/documentation/en/flashplayer/9/releasenotes.html#fixes_9045

2007年04月16日

いまさら mx.utils.ObjectCopy

AS2でつ。。。

そんなんあったんだorz

import mx.utils.ObjectCopy;

var hoge:Object = {a:100,b:200};
//var choge:Object = hoge;
var choge:Object = ObjectCopy.copy(hoge);

trace(hoge == choge); // false

WOW Open Source AS3 3D Physics engine

WOW Open Source AS3 3D Physics engine
http://www.wow-engine.com/

にゃー

http://www.cleoag.ru/2007/04/14/as3-3d-physics-engine/

2007年04月17日

Flash CS3 swc

These Days Labs ? Blog Archive ? Flash CS3 swc for Flexbuilder
http://labs.thesedays.com/2007/04/16/flash-cs3-swc-for-flexbuilder/

CS3に入ってる「fl.」のパッケージがswcにまとめられてます。
CS3のコンポーネントも利用できるんかな。
ライセンス的にどーなんだこれ。

fl系のやつはドキュメントどこにあるのかな。

Flash CS3 関連のドキュメント

Flash CS3 Documentation
http://livedocs.adobe.com/flash/9.0/main/wwhelp/wwhimpl/js/html/wwhelp.htm

ActionScript 3.0 Language and Components Reference
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/package-summary.html

これやばいねー!

噂のXMLでアニメーションはこんな感じみたい。
Motion XML Elements - ActionScript 3.0 Language and Components Reference
http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/motionXSD.html


これつかえば全部試せるかな。
Flash CS3 swc (Unknown Quality)
http://un-q.net/2007/04/flash_cs3_swc.html

DisplayObject3DにMouseEventがよくわからん

よくわかりません ><

cube = rootNode.addChild(new Cube());
cube.container.addEventListener(MouseEvent.MOUSE_DOWN, mouseDown);

これしても実行時にエラーがでる

cube.container を trace しても null がはいっている。

サンプルとか見てると MovieAssetMaterial で material つくってやると container に addEventListener できるっぽいんだけど、Flash9α使ってないしなー。

ほかの material もやってみたけど、どーもうまくいきません。。。。

たちけて........


追記
kozyさんのコメントで解決しました。
http://un-q.net/2007/04/displayobject3dmouseevent.html#comment-1873

Scene3D ではなく MovieScene3D を使うと 直下の DisplayObject3D.container でイベントを取れるようです。
でも、DisplayObject3Dに addChild した DisplayObject3D のイベントはどうやって取ればいいのだろうか???

2007年04月18日

Apolloポケットガイド邦訳

Apolloポケットガイド邦訳Wiki - FrontPage
http://labs.anthill.jp/wiki/apollo/

完了したそうです。
すばらしー


ants Lab. | Apollo | Apolloポケットガイドの邦訳が完了
http://labs.anthill.jp/2007/04/apollo_4.html

ExternalInterface.callで実体参照が

AS2です

trace(ExternalInterface.call("function(a){return a}","&lt;"));

これで「>」がかえってくるんだけどなぜー

追記
AS3でやったらちゃんと「&lt;」が返ってきた。

2007年04月23日

Processingはじめてみた

proce55ingとは - はてなダイアリー
http://d.hatena.ne.jp/keyword/proce55ing

環境はダウンロードしてくればさくっとサンプル動きました。
Download \ Processing 1.0 (BETA)
http://processing.org/download/index.html

ActionScriptやってるわりにビジュアルを扱うのが苦手なので、その辺をちょっと克服するためにやってみます。

ActionScriptよりも簡単に図形とかが描画できる感じ。
さくっと始められるのもいいっすね。

2007年04月27日

Emacsから単一ファイルをコミット

psvn.el入れた状態で
C-x v v

コメントを入力して

C-c C-c

2007年05月07日

Papervision サメ

Papervision3D RC1 Shark demo ? Papervision3D
http://blog.papervision3d.org/2007/05/05/papervision3d-rc1-shark-demo/

さめー!
http://www.papervision3d.org/

くるまー
http://carlosulloa.com/

2007年05月09日

3D Flex UI Room

Outsmart OS3D Demo - 3D Flex UI Room
http://dev.getoutsmart.com/os3d/demos/videoroom/

Flexのコンポーネントまで3D空間で動いてる。
すげーなー

2007年05月10日

TwitterでFlashの熱い話し!

nitoyonさんがまとめてくださいました。

てっく煮ブログ - すごく楽しかった Flash 談義のログをまとめてみたよ
http://d.hatena.ne.jp/nitoyon/20070510/flash_on_twitter

もっとFlasherは「.fla」をオープンにしていこうだとか、FlasherはみんなBlog書こうよーみたいな話しがTwitterでありました。
やたら盛り上がってすごく楽しかったです。

Flashやってる人って、プログラマじゃない人も多いと思うので、簡単にコードを共有できるサイトを作ったら流行るんじゃないかなーと思ったりしました。
コピペで使える短いコードを共有できたら、幸せになれる人がたくさんいるかも。そういった恩恵にあうと、自分でもコードを公開したくなる。そんなループにFlashの世界が、ならないかなーと妄想してます。

すでにコードを共有サイトは海外とかで存在してるけど、やっぱりプログラマ向けだから、その辺をライトにしたサービスとかどうかな。

たまたまいたので少し議論に参加したりしてましたが、やっぱり見てるだけじゃなくてどんどん発言していくべきですよね。おもしろさが違う!

ということで、これを見たFlasher or ASerは今日からBlogをはじめてください!
ついでにTwitterもはじめてください!

niumさんがFlashのことを話す?用のTwitterアカウントを作成してくれました。
Flasher ASerは add

Flashの話題向けTwitter? (blog.nium.jp)
http://blog.nium.jp/flash/flashtwitter.php

mxmlc から CS3 で追加された fl パッケージを

C:\narun: Flex2で複雑なモーショントゥイーン
http://blog.classmethod.info/naruse/2007/04/flex2_1.html

これやればmxmlcからでもコンパイルできるかなーと思ったんだけど、うまくいかなかった。
環境は OS X 10.4.9
コンパイルは通るけど、実行時にエラーがでる。

よくわからんなーと思っていたら、CS3の体験版が出たのでインストール。
でもってMacだと

/Applications/Adobe Flash CS3/Configuration/ActionScript 3.0/Classes

あたりにソースがあるので、ここに直接もしくはどっかにコピッてソースパス通せばうごいたー!

var t:Tween = new Tween(s, "x", Elastic.easeOut, 0, 300, 2, true);

とかでTweenしまくりです

2007年05月25日

com.foxaweb.utils.Rasterを試してみた

Screenshot_1.png

a-blog with F untitled
http://appleple.heteml.jp/blog/index.php?ID=516
yamadaさんがおもしろそうなことやってたからマネしてみた。

Bitmap Drawing API [ by Didier Brun aka Foxy ] < ByteArray.org
http://www.bytearray.org/?p=67

graphics.なんとかを使うよりも全然速いっぽい。
MacBookでいつも作業してるけど、Flashでちょっと重い処理するだけでファンが回りまくり。
でもRasterだったら全然ファンが回らない!

以下サンプル
http://labs.un-q.net/as3/raster/aaline.swf
http://labs.un-q.net/as3/raster/aacircle.swf
http://labs.un-q.net/as3/raster/cubicbezier.swf


使い方は

import com.foxaweb.utils.Raster;

しておいて

var n:int = 500;
var c:uint = Math.random() * 0xffffff + 0x000000;
Raster.line(bitmapData, Math.random()*n, Math.random()*n, Math.random()*n, Math.random()*n, c);
とかすればランダムな線が引けたりします。

メソッドは
line() : 線
triangle() : 三角
filledTri() : 塗りの三角
aaLine() : アンチエリリアスな線
circle() : 円
aaCircle() : アンチエリリアスな円
quadBezier() : 曲線
cubicBezier() : もっと曲線

な感じ。。。

こういう系はあまりやったことないけど、おもしろそうなので他にも何かやってみようかな。

2007年05月27日

プログラムとアニメーション

ニコニコ動画(γ)‐「考え方」が動きだす 佐藤雅彦研究室のアニメーション・スタディ 前編
http://www.nicovideo.jp/watch/sm287162

ニコニコ動画(γ)‐「考え方」が動きだす 佐藤雅彦研究室のアニメーション・スタディ 後編
http://www.nicovideo.jp/watch/sm287410

FlashとかActionScriptとかやってる人は好きな人多そう。
ピタゴラっぽいね
長いけど一度見た方がいいよ!
まだ前編しか見てないけど。

2007年06月11日

AIR

展開が早い・・・。

Adobe Labs - Adobe Integrated Runtime (AIR)
http://labs.adobe.com/technologies/air/

Adobe Labs - Adobe Flex
http://labs.adobe.com/technologies/flex/


Apollo αのやつ全部動かないのか。

2007年06月21日

ActionScript3 最適化・高速化

actionscriptグループ - ConquestArrow.addEventListener( LifeEvent.WORK, this.studyActionScript); - ActionScript3 最適化・高速化Tips 簡易まとめ
http://actionscript.g.hatena.ne.jp/ConquestArrow/20070621/1182359767

すげーまとまってる
[後で読む]

2007年06月28日

Yahoo Flash版地図API を swf に読み込む

Yahoo!デベロッパーネットワーク - Yahoo!地図情報 - Flash版地図API
http://developer.yahoo.co.jp/map/flash/V1/map.html

Flash版のAPIが出たみたいです。
HTMLコンテンツへの埋め込みは公式に書いてありますが、Flash内でこれ使えないのかなーと思い試してみました。

Yahoo map API TEST
http://labs.un-q.net/as3/yahoomap/load/

画像の読み込みと同じ要領でいけるみたいです。
Flashから直接mapのAPIは呼べないのかな?

package {

import flash.display.Loader;
import flash.display.Sprite;
import flash.events.*;
import flash.net.URLRequest;

public class YmapLoadTest extends Sprite {
private var url:String = "http://api.map.yahoo.co.jp/MapsService/Flash/V1/?appid=hogehogeid";

public function YmapLoadTest() {
var loader:Loader = new Loader();
var request:URLRequest = new URLRequest(url);
loader.load(request);

addChild(loader);
}
}
}


2007年07月04日

TurboGearsインストール

PythonのフレームワークTurboGearsのハンズオンを受けることになったので環境設定(Mac)

ここ見ながらやった
1.0/InstallMac - TurboGears Documentation
http://docs.turbogears.org/1.0/InstallMac

とりあえず最新版のpythonをインスール

$ sudo port install python25

portで入れるとpython25で/opt/local/binにはいるので、pythonでシンボリックリンク作成

ez_setup.pyやったらなんかエラー出たので以下のライブラリをインストール

$ sudo port install py25-hashlib
$ sudo port install py25-zlib

http://peak.telecommunity.com/dist/ez_setup.py

$ sudo python ez_setup.py

http://www.turbogears.org/download/tgsetup.py

$ sudo python tgsetup.py

2.4.4が推奨だけど、2.5でもよいかねと出たけどそのままyesで

以下が動いたらおっけ

$ tg-admin info

2007年07月11日

Emacsのブックマーク

C-x r m RET
カーソル位置をブックマークに追加


C-x r m bookmark RET

カーソル位置を bookmark という名前でブックマークに追加


C-x r b bookmark RET

bookmark という名前のブックマークに移動


M-x bookmark-save

デフォルトのブックマークに保存


C-x r l

すべてのブックマークリストを表示
d で削除対象設定
x で実行


C-h m

ブックマークリストの中でやるとhelp


ブックマークとは関係ないけどマークの設定で悩み中
マークの設定が C-spc or C-@ なんだけど、C-spc は QuickSilver に割り当てられてるし、C-@は、なぜかことえりにとられる。

C-@すると日本語入力に切り替わっちゃうんだよな。しかもことえりの設定にはC-@なんてどこにも無い・・・。

C-@使いたいんだけど無理かなー
キーを変更するか。

2007年07月20日

getURLでjavascriptのwindow.opneするとswfaddressが死ぬ。IEだけ。

as2です。

検証用
http://labs.un-q.net/flash/swfaddress_geturl/#/page3/

IEだけの現象みたい。
page1とかpage2とかをクリックするとページ遷移してURLもちゃんと変わる。
でも途中でgetURLってのをクリックして、開いたウィンドウを消した後、page1とかpage2とかクリックすると、ページ遷移するけどURLが変わらない。
さらにもっかいgetURLクリックすると真っ白に。

でもExternalInterface.call経由でwindow.openしても大丈夫っぽい。
同じ手順でgetURLの変わりにEX.callクリックしても、後の動作は変わらない。

geturl_btn_mc.onRelease = function() {
    // swfaddress死ぬ
    getURL("javascript:window.open('http://un-q.net', '_blank');void(0)");
}
excall_btn_mc.onRelease = function() {
    // swfaddress死なない
    ExternalInterface.call("function() {javascript:window.open('http://un-q.net', '_blank');}");
}

またIEにやられた ><

2007年07月23日

ustream.tv

なんか流行らしい
Ustream.tv
http://ustream.tv/

朝から、wcan mini asのレポートも書かず遊んでます。
http://ustream.tv/channel/lllkoballl

なんかこのツールつかってディスクトップの配信もできるみたい
Cam Twist 1.4 - Mac OS X - VersionTracker
http://www.versiontracker.com/dyn/moreinfo/macosx/31806

勉強会これで配信すりゃよかったじゃん。
発表した勉強会中継ツール(できてないけど)は違うアプローチをしないかんな

2007年07月24日

FIVe3D

Mathieu Badimon | FIVe3D
http://five3d.mathieu-badimon.com/

平面のオブジェクトを3Dで扱う為のライブラリ

ここの中の人がつくったみたい
LAB | Mathieu Badimon
http://lab.mathieu-badimon.com/

ActionScript2.0なんだけど3.0っぽいクラス名で構成されてる。 five3D.utils.Drawing で描画したオブジェクトを動かす感じで、テキストも半角英数なら3Dで動かせる。どうやらテキストはクラスに座標を定義してあって、lineToとかで描画してるみたい。HelveticaMedium.as とかフォントのクラスがあった。

適当にサンプルつくってみた
http://labs.un-q.net/flash/five3d/test01/

Screenshot_1.png
import five3D.display.DynamicText;
import five3D.display.Scene;
import five3D.display.Sprite;
import five3D.utils.Drawing;

var scene:Scene = new Scene(this);
var root:Sprite = scene.getRoot();

var text:DynamicText = root.createDynamicText("text", 1);
text._typography = five3D.typography.HelveticaBold;
text._size = 40;
text._color = 0xffffff;
text._text = "Unknown Quality";
text._x = 120;
text._y = 50;

text.onEnterFrame = function() {
    this._rotationx += 10;
}

var rect:Sprite = root.createSprite("rect", 0);
Drawing.rectangle(rect,300,100,0xFFFFFF);
rect._x = 120;
rect._y = 200;

rect.onEnterFrame = function () {
    this._rotationx -= 10;
}

回転の中心がうまく決められない。 サンプル見たら、コンテナみたいなのにのせて動かしてたから真似てみた。

http://labs.un-q.net/flash/five3d/test02/

Screenshot_2.png
import five3D.display.DynamicText;
import five3D.display.Scene;
import five3D.display.Sprite;
import five3D.utils.Drawing;

var scene:Scene = new Scene(this);
var root:Sprite = scene.getRoot();

root._x = 280;
root._y = 200;

var container:Sprite = root.createSprite("container", 0);
Drawing.rectanglePlace(container, -180, -150, 360, 300, 0xffffff);

var text:DynamicText = container.createDynamicText("text", 1);
text._typography = five3D.typography.HelveticaBold;
text._size = 40;
text._color = 0x999999;
text._text = "Unknown Quality";

text._y -= 20;
text._x -= 160;
text._z -= 20;


var text2:DynamicText = container.createDynamicText("text2", 0);
text2._typography = five3D.typography.HelveticaBold;
text2._size = 40;
text2._color = 0x000000;
text2._text = "Unknown Quality";

text2._y -= 20;
text2._x -= 160;
text2._z -= 10;


container.onEnterFrame = function() {
    this._rotationy++;
    //this._rotationx++;
    //this._rotationz++;
}
裏側が見えてしまってるのは仕様かな?

FIVe3D 02

マウスにあわせて動かしてみた

http://labs.un-q.net/flash/five3d/03/ Screenshot_3.png

import five3D.display.DynamicText;
import five3D.display.Scene;
import five3D.display.Sprite;
import five3D.utils.Drawing;

var scene:Scene = new Scene(this);
var root:Sprite = scene.getRoot();

root._x = 280;
root._y = 200;

var container:Sprite = root.createSprite("container", 0);
Drawing.rectanglePlace(container, -180, -150, 360, 300, 0x000000);

var text:DynamicText = container.createDynamicText("text", 1);
text._typography = five3D.typography.HelveticaBold;
text._size = 40;
text._color = 0xffffff;
text._text = "Unknown Quality";

text._y -= 20;
text._x -= 160;
text._z -= 20;


var text2:DynamicText = container.createDynamicText("text2", 0);
text2._typography = five3D.typography.HelveticaBold;
text2._size = 40;
text2._color = 0x999999;
text2._text = "Unknown Quality";

text2._y -= 20;
text2._x -= 160;
text2._z -= 10;

container.target = this;
container.onEnterFrame = function() {

    this._rotationy = -(root._xmouse/5);
    this._rotationx = (root._ymouse/4);

}

2007年07月25日

ActionScript3.0で3Dしてみる 01

城戸さんの話しを聞いて1から3Dをやってみることにした。

とりあえずこれをAS3に移植してみる。

Webデザインとグラフィックの総合情報サイト - MdN Interactive - 第1回 3D表現とは?
http://www.mdn.co.jp/content/view/1093/88/


http://labs.un-q.net/as3/3d/01/
package {

    import flash.display.*;
    import flash.events.*;

    [SWF(width="400",height="300",frameRate="24",backgroundColor="#FFFFFF")]            
    public class Test3D01 extends Sprite {

        private var panel:Sprite;
        private var centerX:Number = stage.width/2; // 中心点のx座標をステージの横中央に
        private var centerY:Number = stage.height/2; // 中心点のy座標をステージの縦中央に
        private var centerZ:Number = 0; // 中心点の座標を設定
        private var fl:int = 300; // 視点からの焦点(screen)までの距離を設定
        private var r:int = 100; // 回転の半径
        private var angle:Number = 0; // 回転角の初期値
        private var px:Number;
        private var py:Number;
        private var pz:Number;
        private var rad:Number;
        private var scale:Number;
        
        function Test3D01() {

            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;

            addEventListener(Event.ENTER_FRAME, loop);

            init();

        }

        private function init():void {
            panel = new Sprite();
            panel.graphics.beginFill(0x000000);
            panel.graphics.drawRect(0,0,50,50);            
            addChild(panel);
        }

        private function loop(e:Event):void {
            
            angle += 5;
            rad = angle / 180 * Math.PI; // 角度をラジアンに変換
            px = Math.cos(rad)*r; // 半径、ラジアンをもとに仮想3D空間のx座標を計算
            py = 0;
            pz = centerZ - Math.sin(rad) * r; // 半径、ラジアンをもとに仮想3D空間のz座標を計算
            scale = fl / (fl+pz); // 透視変換の比率を計算
            panel.x = px * scale + centerX;
            panel.y = py * scale + centerY;
            panel.scaleX = panel.scaleY = scale;
            
            panel.x += 150;
            panel.y += 150;

        }
    }
}

2007年07月26日

いまさらTweener

いまさらだけど、Tweenerを試してみた。


お手軽簡単な感じですな

var s:Sprite = new Sprite();
s.graphics.beginFill(0x000000);
s.graphics.drawRect(-25,-25,50,50);
s.x = 100;
s.y = 200;

addChild(s);

stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
    Tweener.addTween(s, {x:mouseX,y:mouseY,time:1,transition:"easeOutQuart"});                
});

addEventListenerで無名関数使うと removeEventListenerできない

※できることがわかりました。 詳細は下の方の追記へ

Flashゲームプログラミング講座 For AS3.0【EventDispatcher クラスについて】
http://hakuhin.hp.infoseek.co.jp/main/as3/event.html#EVENT_02

removeEventListenerでは引数にイベントのタイプと、リスナー自体の参照がなので、無名関数使うと、removeEventListenerできない><

EventDispatcher - Adobe® Flex™ 2 リファレンスガイド
http://livedocs.adobe.com/flex/2_jp/langref/flash/events/EventDispatcher.html#removeEventListener()


これだとできない

addEventListener(Event.ENTER_FRAME, function(e:Event):void{trace("hogehoge")});
removeEventListener(Event.ENTER_FRAME, これがない><);


普通にメソッド定義してやってもいいけど、こんなやり方でもできる

var hoge:Function = function(e:Event):void {trace("hogehoge")}
addEventListener(Event.ENTER_FRAME, hoge);
removeEventListener(Event.ENTER_FRAME, hoge);

追記 2007/07/26 20:10
os9さんのコメントでarguments.callee使えばできるみたいです。
これは思いつかんかった><
http://un-q.net/2007/07/addeventlistener_removeeventlistener.html#comment-6219
arguments - Adobe® Flex™ 2 リファレンスガイド
http://livedocs.adobe.com/flex/2_jp/langref/arguments.html

2007年07月27日

3D Ball

3Dのボールっぽいものを描画してみた。
単純に放射線のグラデーションを円に塗っているだけ。
適当にやってたらなんとなくそれっぽくなった。


http://labs.un-q.net/as3/3d/ball/

Screenshot_1.png

var ball:Sprite = new Sprite();
var fillType:String = GradientType.RADIAL;
var colors:Array = [0xFFFFFF, 0x333333];
var alphas:Array = [1, 1];
var ratios:Array = [0x00, 0xFF];
var matr:Matrix = new Matrix();
matr.createGradientBox(-250, -250, Math.PI/2, 100, 80);
var spreadMethod:String = SpreadMethod.PAD;
var interpolation:String = InterpolationMethod.RGB
ball.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod,interpolation);  
ball.graphics.drawCircle(0,00,100);
addChild(ball);

2007年07月30日

AIRでfcsh

するときは

$ rlwrap fcsh 
(fcsh)mxmlc +configname=air HellorAir.as

amxmlc は mxmlc +configname=air とおなじ

てっく煮ブログ - fcsh で Apollo を高速コンパイル(参考リンク集のおまけ付き)
http://d.hatena.ne.jp/nitoyon/20070526/apollo_fcsh

2007年07月31日

factioに勝ったよ

2007年08月02日

ActionScript3.0でお絵描きツール

何となくサンプルつくってみた。
CS3が届いたので、意味も無くCS3でつくった。
ドキュメントルートクラス設定してなんか作ったの初めてかも。

ActionScript 3.0 Paint Tool Test
http://labs.un-q.net/flashcs3/paint/01/
ソースは以下から
http://labs.un-q.net/flashcs3/paint/01/paint01_src.zip

package {

    import flash.display.*;
    mport flash.events.*;

    public class Paint01 extends Sprite {

        private var mouseDown:Boolean = false;
        private var g:Graphics;        
        
        public function Paint01(){

            trace("-- start Paint01 --");
            init();
            
        }


        private  function init():void {

            g = this.graphics;

            g.lineStyle(2, 0x000000,1,false,"normal",CapsStyle.ROUND,JointStyle.ROUND,3);
            
            addEventListener(Event.ENTER_FRAME, loop);
            stage.addEventListener(MouseEvent.MOUSE_DOWN, function(e:MouseEvent):void{
                mouseDown = true;
                g.moveTo(mouseX,mouseY);
            });
            stage.addEventListener(MouseEvent.MOUSE_UP, function(e:MouseEvent):void {
                mouseDown = false;
            });
            stage.addEventListener(Event.MOUSE_LEAVE, function(e:Event):void {
                mouseDown = false;
            });
            
        }


        private function loop(e:Event):void {
            if (mouseDown) draw();            
        }


        private function draw():void {
            g.lineTo(mouseX, mouseY);            
        }

    }

}

2007年08月07日

ActionScript3.0でFlashVars

var vars:Object = LoaderInfo(this.root.loaderInfo).parameters;

ってかんじで

Peter deHaan: Using FlashVars with ActionScript 3.0
http://blogs.adobe.com/pdehaan/2006/07/using_flashvars_with_actionscr.html

2007年08月10日

ActionScript3.0で動体検知 01

FLASH 8 : threshold() >> Motion detection... - jeanphiBlog
http://jeanphiblog.media-box.net/dotclear/index.php?2005/10/16/163-flash-8-threshold-motion-detection

参考にしてつくってみた。
なんでこんなことしてるかは今んとこ秘密w

Screenshot_3.png

ActionScript3.0 Motion 01 動体検知っぽいなにか
http://labs.un-q.net/as3/camera/motion/01/

package {

    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    import flash.media.Camera;
    import flash.media.Video;
    
    public class MotionTest02 extends Sprite {
        
        private var camera:Camera;
        private var video:Video;
        private var button:Sprite;
        private var bmd:BitmapData;

        private var now:BitmapData;
        private var before:BitmapData;
        private var rect:Rectangle;
        private var pt:Point;
        
        public function MotionTest02() {
            init();
        }

        private function init():void {
            
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;

            camera = Camera.getCamera();

            if (camera != null) {
                setupCamera();
            }
                   
            bmd = new BitmapData(camera.width*2, camera.height*2 ,false,0xffffff);
            var bmp:DisplayObject =  addChild(new Bitmap(bmd));
            bmp.x = camera.width*2 + 10;

            addEventListener(Event.ENTER_FRAME, loop);

            //
            now = new BitmapData(camera.width*2, camera.height*2);
            before = new BitmapData(camera.width*2, camera.height*2);
            rect = new Rectangle(0, 0, camera.width*2, camera.height*2);
            pt = new Point(0, 0);
            
        }


        private function setupCamera():void {

            video = new Video(camera.width*2, camera.height*2);
            video.attachCamera(camera);
            addChild(video);

        }


        private function loop(e:Event):void {

            now.draw(video);
            now.draw(before, new Matrix(), new ColorTransform(), BlendMode.DIFFERENCE);
            now.threshold(now, rect, pt, ">", 0xff111111, 0xffffffff);
            
            before.draw(video);

            bmd.draw(now);
        }
    }
}

2007年08月16日

ActionScript3.0 で Text2Speech

http://api.satoru.net/

こちらの「文字音声変換API "TEXT2VOICE」をFlashから使ってみた。

文字列をgetで送信すると、それを読み上げたMP3のURLが返ってくるので、それを読み込んで再生してるだけ。

ActionScript3.0 Text2Speech
http://labs.un-q.net/as3/sound/text2speech/01/

package {

    import flash.display.*;
    import flash.events.*;
    import flash.net.*;
    import flash.media.Sound;
    import flash.media.SoundChannel;

    public class Text2speech01 extends Sprite {

        private const API_URL:String = "http://api.satoru.net/text2voice/";
        
        function Text2speech01() {
            init();
        }

        private function init():void {

            var urlReq:URLRequest = new URLRequest(API_URL);
            var urll:URLLoader = new URLLoader();
            var v:URLVariables = new URLVariables();

            v.text = "休み明けで仕事する気になりません。今日も名古屋は暑い。";
            
            urlReq.method = URLRequestMethod.GET;
            urlReq.data = v;

            urll.load(urlReq);

            urll.addEventListener(Event.COMPLETE, function(e:Event):void {

                trace("API COMPLETE : " + urll.data);

                var sreq:URLRequest = new URLRequest(urll.data);
                var sf:Sound = new Sound();
                sf.addEventListener(Event.COMPLETE, function(e:Event):void {
                    trace("Sound load COMPLETE");                    
                });                
                sf.load(sreq);
                
                var sc:SoundChannel = sf.play();
                sc.addEventListener(Event.SOUND_COMPLETE, function(e:Event):void {
                    trace("Sound play COMPLETE");
                });
                
            });
        }
    }
}

ActionScript3.0でカメラを反転

Screenshot_2.png

ActionScript3.0 Camera Reflection
http://labs.un-q.net/as3/camera/refrection/

通常、Cameraで取り込んだ画像を表示させると鏡に映った時と同じ状態になるので、それを反転させてみた。
bitmap.drawするときにmatrixを適用してるだけ。

var mt:Matrix = new Matrix();
mt.scale(-1, 1);
mt.translate(camera.width*2,0);
bmd.draw(video, mt);

2007年08月21日

FlashCS3でAIRの書き出しが可能に

公式でサポートされたみたい。

AIR:Flash CS3 Professional Update - Adobe Labs
http://labs.adobe.com/wiki/index.php/AIR:Flash_CS3_Professional_Update
ちゃんと日本語版も用意されてますね。

これはそろそろAIRをやらねば。

2007年08月29日

英語を日本語に翻訳して読み上げるFlash

衝動的つくってみた

英語を入力してボタンを押すと、日本語に翻訳してそれをさらに読み上げます。

TranslationSpeech 英語を翻訳して読み上げるよん!
http://labs.un-q.net/tools/translation_speech/


Screenshot_1.png

以下の2つのAPIを使ってみた。

英語←→日本語の翻訳APIとして使えるYahoo Pipesを作った(管理人日記) - むぅもぉ.jp
http://muumoo.jp/news/2007/05/09/0translationapi.html

■文字音声変換API "TEXT2VOICE"
http://api.satoru.net/

ハマりどころはYahoo! Pipesのcrossdomain.xml
通常「pipes.yahoo.com」というドメインを使うんだけど、こちらにはcorssdomain.xmlはなくって、Flashから使う場合は「pipes.yahooapis.com 」ってドメインを使う必要がある


FlashでYahoo! Pipesのフィードを読み込めるようになった - F.Ko-Jiの「一秒後は未来」
http://blog.fkoji.com/2007/03111225.html

自分は結構コード書いて動いたら、コード公開して終わりってことが多かったんだけど、今回はちゃんとツールにしてみた。
形にすることが重要な気がしたりしたので。

2007年08月30日

Twitterのブログパーツつくったよ ※音が出ます


「しゃべったー」というブログパーツを作りました。
Twitterの発言を読み上げるブログパーツです。


ちょっと前から、ちょこちょこ作ってたんだけどようやく形になったのでとりあえず公開。
公開することで自分を追いつめてみる。


張り付けは

<script type="text/javascript">var twitter_id="TwitterのID"</script>
<script src="http://labs.un-q.net/shabetter/bp/js/shabetterbp.js" type="text/javascript"></script>


今回もこちらのAPIを使わせていただきました。

文字音声変換API "TEXT2VOICE"
http://api.satoru.net/


ロゴはbigchuにお願いして作ってもらいました。ありがとー

2007年09月05日

ActionScript3.0 でカメラの赤色を検出

これを参考にAS3でやってみた。

hatayanlog: Flash ActionScript WEBCAMを使った 赤色の検出
http://www.hatayan.org/weblog/archives/2005/11/30/123132.php

Screenshot_1.png

ActionScript3.0 ColorTracking 赤色の検出
http://labs.un-q.net/as3/camera/colorTracking/01/

ソースはこちら
package {

    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;    
    import flash.media.Camera;
    import flash.media.Video;
    
    public class ColorTracking01 extends Sprite {
        
        private var camera:Camera;
        private var video:Video;

        private var srcbd:BitmapData;
        private var viewbd:BitmapData;
        private var greenbd:BitmapData;
        private var bluebd:BitmapData;        
        
        private var mt:Matrix;
        private var mirrorMt:Matrix;
        private var pt:Point;
        private var rect:Rectangle;
        private var ct:ColorTransform;        

        
        public function ColorTracking01() {
            init();
        }

        
        private function init():void {

            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            camera = Camera.getCamera();
            
            if (camera != null) {
                setupCamera();
            } else {
                trace("not camera");
                return;
            }
       
            srcbd = new BitmapData(camera.width*2, camera.height*2 ,false,0xffffff);
            viewbd = new BitmapData(camera.width*2, camera.height*2);
            greenbd = new BitmapData(camera.width*2, camera.height*2);
            bluebd = new BitmapData(camera.width*2, camera.height*2);
            
            mirrorMt = new Matrix();
            mirrorMt.scale(-1, 1);
            mirrorMt.translate(camera.width*2,0);            

            pt = new Point(0,0);
            rect = new Rectangle(0,0,camera.width*2, camera.height*2);
            ct = new ColorTransform();
            mt = new Matrix();

            addChild(new Bitmap(srcbd));
            var v:DisplayObject = addChild(new Bitmap(viewbd));
            v.x = camera.width*2 + 10;
            
            addEventListener(Event.ENTER_FRAME, loop);

        }


        private function setupCamera():void {
            
            video = new Video(camera.width*2, camera.height*2);
            video.attachCamera(camera);
            
        }


        private function loop(e:Event):void {

            srcbd.lock();
            viewbd.lock();
            greenbd.lock();
            bluebd.lock();
            
            srcbd.draw(video,mirrorMt);
            viewbd.draw(video,mirrorMt);
            greenbd.copyChannel(srcbd, rect, pt, BitmapDataChannel.GREEN, BitmapDataChannel.RED);
            bluebd.copyChannel(srcbd, rect, pt, BitmapDataChannel.BLUE, BitmapDataChannel.RED);
            bluebd.draw(greenbd, mt, ct, BlendMode.LIGHTEN);
            viewbd.draw(bluebd, mt,ct, BlendMode.SUBTRACT);
            
            viewbd.threshold(viewbd, rect, pt, ">", 0xff600000, 0xffffffff);
            viewbd.threshold(viewbd, rect, pt, "!=", 0xffffffff, 0xff000000);

            srcbd.unlock();
            viewbd.unlock();
            greenbd.unlock();
            bluebd.unlock();

        }        
    }
}

2007年09月11日

開発合宿

メガネラボの岩田さんが開発合宿を開催するそうです。

meganelab.log ? 突然,開発合宿 (もどき) 参加者を募ってみる
http://blog.meganelab.net/archives/2007/09/11/162040

残念ながら、私は都合が悪いため参加できないのですが、参加希望のかたは上記リンクより連絡をとってみてください。

ネットの回線が無いそうですが、それを逆手に取って、「ネット無くても開発できるようになる!」とか、「ネットが無いから開発に集中できる!」的な考えで参加してみるとおもしろいのではないでしょうか。

2007年09月13日

マタタビにお絵描き機能追加

noughtsの中の人にご協力いただき、マタタビのリッチエディタのお絵描き機能がつきました。

より自由に!!スケッチブックの表現が広がりました
http://matatavi.com/info/news#20070914_01

noughtsの中の人さんありがとーございます!

2007年11月19日

重なってるオブジェクトでContextMenu

AS2の話。

透明なmcの下にあるmcで、右クリックを使いたかったのでやってみた。


ContexMenuのコンストラクタで右クリックしたときのcallbackFunctionが設定できるので、その関数で透明mcの下のmcとhitTestして動的にContextMenuItemを切り替える
var mask_mc:MovieClip = this.mask; // 透明なMC
var hoge1_mc:MovieClip = this.hoge1;
var hoge2_mc:MovieClip = this.hoge2;

var cm:ContextMenu = new ContextMenu(function(){

    cm.customItems = new Array();
    
    if (hoge1_mc.hitTest(_root._xmouse, _root._ymouse, true)) {
        cm.customItems.push(new ContextMenuItem("hoge1", function(){}));
    } else if (hoge2_mc.hitTest(_root._xmouse, _root._ymouse, true)) {
        cm.customItems.push(new ContextMenuItem("hoge2", function(){}));
    }

});

mask_mc.menu = cm;

2007年11月21日

Ruby で EXIF

ちょっとした便利プログラムとかはRubyで書くことにしてる。
勉強の為にね。

画像からEXIF抜きだしでゴニョゴニョする必要があったのでRubyでやってみた。

Young risk taker.: [Ruby] EXIFのGPS情報も取得できるExtExif 1.0をリリースした
http://rakuto.blogspot.com/2007/05/ruby-exifgpsextexif-10.html


とりあえずExifのライブラリインストール
sudo port install libexif 

ExtExifインストール
sudo gem install extexif

あとはrubyでこんな感じに
# print EXIF data
IMG_FILE = 'images/hoge.jpg'
image = ExtExif.new(IMG_FILE)
p image['Make']

タグはこの辺をみてやればいけそう。
Exif TAG
http://cachu.xrea.jp/perl/ExifTAG.html

2007年11月22日

Rubyでディレクトリを処理するとき

なぜかActionScriptでないネタが続きます。

あるディレクトリのファイルを処理したかったので、こう書いた

Dir.foreach("./images/") do |file|
  p file
end

結果こうなる
"."
".."
"01.jpg"
"02.jpg"
"03.jpg"
"04.jpg"
"05.jpg"
"06.jpg"
"07.jpg"
"08.jpg"

でも 「.」とか「..」 がうっとうしいのでこう書き換えた。

Dir.glob("./images/*").each do |file|
  p file
end

結果こうなる。
"./images/01.jpg"
"./images/02.jpg"
"./images/03.jpg"
"./images/04.jpg"
"./images/05.jpg"
"./images/06.jpg"
"./images/07.jpg"
"./images/08.jpg"

いい感じですね。

2007年12月03日

svn propset svn:ignore で複数ファイル

を指定したかったんだけどよくわからんくて調べたら

http://rogiken.org/wiki/index.php?Subversion%A4%CE%C6%B3%C6%FE%A4%C8%BB%C8%CD%D1#yadc18b2
$ export SVN_EDITOR="vi"
$ svn propedit svn:ignore .

viが立ち上がるので改行区切りでファイル名指定

2007年12月04日

svn+ssh でポートをとかキーを指定する

svn+sshするときにサーバーによってポートが違う場合、どう設定していいかわからなかった。
調べてみたら

sshトンネルを使う場合のポート番号指定方法 - mir the tritonn
http://d.hatena.ne.jp/mir/20070621/p2
とのこと。

~/.subversion/configに
[tunnels]
ssh_hoge = ssh -p 8888
して
svn co svn +ssh_hoge://hostname/svn/hogehoge
でいける。
キーを切り替えたい場合は
[tunnels]
ssh_hoge = ssh -i /Users/name/.ssh/id_dsa_hogehoge
見たいな感じで指定すればok

2007年12月07日

時計回り反時計回り

hapyning トップのイージングについて質問
http://k-nakamura.net/blog/index.php?ID=3
株式会社コウエイ
http://k-nakamura.net/

答えてみた。
多分こういうことだと思うのだけどあってますかね?

このコンテンツには最新のFlashPlayerが必要です


AS2ですよ
もうちょっとすっきり出来るかもしれないけど。
import com.mosesSupposes.fuse.*;
import mx.transitions.easing.*;

ZigoEngine.simpleSetup(Shortcuts);

var hoge_mc:MovieClip = this.hoge;
var up_btn:MovieClip = this.up;
var down_btn:MovieClip = this.down;

var angle_ary:Array = [90, 90, 180];
var r_angle_ary:Array = angle_ary.concat();
r_angle_ary.reverse();
var now:Number = 0;


down_btn.onRelease = function() {
    rotation("r");
}

up_btn.onRelease = function() {
    rotation("l");
}

function rotation(r:String) {

    var o:Number;
    var aary:Array;
    
    switch (r) {
    case "r":
        o = 1;
        aary = angle_ary;
        break;
    case "l":
        o = -1;
        aary = r_angle_ary;
        break;
    default:        
        return;
        break;
    }

    now = (now > angle_ary.length-1)? 0:now;
    now = (now < 0)? angle_ary.length-1:now; 
    buttonEnable()
    hoge_mc.rotateTo(hoge_mc._rotation + (o*aary[now]), 1, Regular.easeInOut, 0, buttonDisable);
    now = now + o;    
        
}


function buttonEnable() {
    down_btn._visible = false;
    up_btn._visible = false;
}

function buttonDisable() {
    down_btn._visible = true;
    up_btn._visible = true;
}

Snippets に参加

Spark projectSnippetsに参加してみました

とりあえずこれ追加してみた。

ll_koba_ll/PowerBalance - Snippets - Trac
http://snippets.libspark.org/trac/wiki/ll_koba_ll/PowerBalance

秋のWCANでやったデモにつかったクラスです。

2007年12月11日

SWFAddress2をSWFObject2でつかってみる

<追記>  200811.17
割と情報が古くなってます。
swfaddressを利用したい方はProgressionを利用することを強く強くおすすめします!!
h1_logo.png
ProgressionはFlashサイトを構築する為のフレームワークで、これを利用することで面倒なスクリプトを書かずにサイトが構築できます。
</追記>
bigchuにSWFAddress2調べとけやっ!って命令された(ウソ)ので試してみた。

せっかくなのでAS3かつSWFObject2でやってみるよ。

Asual | SWFAddress - Deep linking for Flash and Ajax
http://www.asual.com/swfaddress/
swfobject - Google Code
http://code.google.com/p/swfobject/

SWFAddress2.0の新機能については
Asual | Blog - SWFAddress 2.0
http://www.asual.com/blog/swfaddress/2007/11/16/swfaddress-2.html
日本語訳
[JS]フラッシュにパーマリンクを作成できる -SWFAddress 2 | コリス
http://coliss.com/articles/build-websites/operation/javascript/635.html

さんぷる
SWFAddress Test TOP
http://labs.un-q.net/flashcs3/swfaddress2/
flaファイル含むソースはこちら
http://labs.un-q.net/flashcs3/swfaddress2/swfaddresstest_src.zip

AS3
package {

    import flash.display.*;
    import flash.events.*;
    import SWFAddress;
    import SWFAddressEvent;

    public class SWFAddressTest extends MovieClip {
        
        private var currentPage:*;
        
        public var p1_btn:MovieClip;
        public var p2_btn:MovieClip;

        function SWFAddressTest() {

            p1_btn.buttonMode = true;
            p1_btn.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
                SWFAddress.setValue("/p1");
            });            

            p2_btn.buttonMode = true;
            p2_btn.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
                SWFAddress.setValue("/p2");
            });

            SWFAddress.addEventListener(SWFAddressEvent.CHANGE, handleSWFAddress);
                        
        }

        private function handleSWFAddress(e:SWFAddressEvent):void {

            trace("address : " + e.value);

            claerPage();
            
            switch (e.value) {

            case '/':
                SWFAddress.setTitle("SWFAddress Test TOP ");
                currentPage = addChild(new pagetop);
                break;

            case '/p1/':
                SWFAddress.setTitle("SWFAddress Test Page1 ");
                currentPage = addChild(new page1);
                break;

            case '/p2/':
                SWFAddress.setTitle("SWFAddress Test Page2 ");
                currentPage = addChild(new page2);
                break;

            default:
                trace('error page');
                SWFAddress.setTitle("SWFAddress Error Page");
                currentPage = addChild(new pageerror);
                break
            }
            
        }

        private function claerPage():void {
            if (currentPage != null) {
                removeChild(currentPage);
            }
        }
    }
}

HTML
swfのパスのあとに new Date().getTime() ってしてるのは開発中にキャッシュしないようにしてるためです。
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
    <head>
        <title>SWFAddress Test</title>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <script type="text/javascript" src="js/swfobject.js"></script>
        <script type="text/javascript" src="js/swfaddress.js"></script>
        <script type="text/javascript">
            swfobject.embedSWF('swfaddresstest.swf?' + new Date().getTime(), 'swf', '300', '300', '9.0.45', 
                'swfobject/expressinstall.swf', {}, {bgcolor: '#ffffff', menu: 'false'}, {id: 'hoge'});
        </script>

    </head>
    <body>
        <div id="swf">
          Flash Playerがうんぬんかんぬん
        </div>
        
    </body>
</html>


最近あまり仕事でAS書いてないなー。
bigchuがAS3で仕事ゴリゴリやってるからそのうち何か書いてくれるでしょう。

: AS3を日和 - 酒は血液、呑んだら献血
http://d.hatena.ne.jp/bigchu/20071203/1197349366

2007年12月14日

ActionScript3.0でattachMovie

なんか名指しで助けを求められているのでwww

hapyning AS3.0の壁
http://k-nakamura.net/blog/index.php?ID=8

結構一番最初に悩むところな気もするのでここにメモ。

まず適当にシンボル作成。
つくったシンボルのプロパティで「ActionScriptに書き出し」をチェック。
シンボルの名前がそのままクラス名になると思うので、クラス名を覚えておく。

Screenshot_2.jpg

あとは
addChild(new attach_img);
でおk

リンケージで設定すると空のクラスが内部的に生成されるイメージですかね。

ちなみにAS2で
for (var i=0; i<10; i++) {
    attachMovie("img_"+i, "img_"+i, getNextHighestDepth())
}
みたいなのはAS3だと
for (var i:int=0; i<10; i++) {
    addChild(new (getDefinitionByName("img_"+i));
}
となります。

2008年01月11日

Box2DFlashAS3はじめてみた

Flash Physics Engine Box2DFlashAS3 1.4.3
http://box2dflash.sourceforge.net/ サンプルを見ながら作ってみた。

クリックすると箱が出てきます。
このコンテンツには最新のFlashPlayerが必要です


ソースダウンロード
package {

    import flash.display.*;
    import flash.events.*;

    import Box2D.Dynamics.*;
    import Box2D.Collision.*;
    import Box2D.Collision.Shapes.*;
    import Box2D.Common.Math.*;


    public class Box2DSample01 extends MovieClip {

        private var m_world:b2World;
        private var m_iterations:int = 10;
        private var m_timeStep:Number = 1/30;
        
        public function Box2DSample01() {
            
            addEventListener(Event.ENTER_FRAME, update);
            stage.addEventListener(MouseEvent.CLICK, createBox);

            var worldAABB:b2AABB = new b2AABB();
            worldAABB.minVertex.Set(-1000.0, -100.0);
            worldAABB.maxVertex.Set(1000.0, 1000.0);

            var gravity:b2Vec2 = new b2Vec2(0.0, 300.0);
            var doSleep:Boolean = true;

            m_world = new b2World(worldAABB, gravity, doSleep);
            
            createGround();
        }


        private function createGround():void {
            
            var bodyDef:b2BodyDef;
            var boxDef:b2BoxDef;

            bodyDef = new b2BodyDef();
            boxDef = new b2BoxDef();
            boxDef.extents.Set(1000, 100);
            boxDef.friction = 0.3;
            bodyDef.position.Set(0, 380);
            bodyDef.AddShape(boxDef);

            bodyDef.userData = new ground();
            bodyDef.userData.width = boxDef.extents.x * 2;
            bodyDef.userData.height = boxDef.extents.y * 2;

            addChild(bodyDef.userData);
            m_world.CreateBody(bodyDef);

        }

        
        private function createBox(e:MouseEvent):void {

            var bodyDef:b2BodyDef;
            var boxDef:b2BoxDef;

            bodyDef = new b2BodyDef();
            boxDef = new b2BoxDef();
            boxDef.extents.Set(15, 15);
            boxDef.density = 1.0;
            boxDef.friction = 0.5;
            boxDef.restitution = 0.2;
            bodyDef.AddShape(boxDef);
            bodyDef.userData = new box();
            bodyDef.userData.width = boxDef.extents.x * 2;
            bodyDef.userData.height = boxDef.extents.y * 2;
            bodyDef.position.x = stage.mouseX;
            bodyDef.position.y = stage.mouseY;
            bodyDef.rotation = Math.random() * Math.PI / 8;

            m_world.CreateBody(bodyDef);
            addChild(bodyDef.userData);
            
        }


        private function update(e:Event):void {

            m_world.Step(m_timeStep, m_iterations);

            for (var bb:b2Body = m_world.m_bodyList; bb; bb = bb.m_next) {
                if (bb.m_userData is Sprite) {
                    bb.m_userData.x = bb.m_position.x;
                    bb.m_userData.y = bb.m_position.y;
                    bb.m_userData.rotation = bb.m_rotation * (180/Math.PI);
                }
            }
        }       
    }
}

2008年01月28日

Box2Dで三角形

Box2DflashAS3にはcircleとかboxのほかにもb2PolyDefというのがあって、多角形を生成できたりします。

このコンテンツには最新のFlashPlayerが必要です

三角形を描画
var bd:b2BodyDef = new b2BodyDef();
var t:b2PolyDef = new b2PolyDef();

t.vertexCount = 3;
t.vertices[0].Set(0,0);
t.vertices[1].Set(40,0);
t.vertices[2].Set(0,40);

t.density = 1;
t.friction = 0.5;
t.restitution = 0.3;

bd.AddShape(t);
bd.position.x = stage.mouseX/m_physScale;
bd.position.y = stage.mouseY/m_physScale;
bd.rotation = Math.random() * Math.PI / 8;

m_world.CreateBody(bd);

box2dで星っぽいの作ってもうまく動かない

続きを書いてみた

box2dで星っぽいの作ってもうまく動かない その2 (Unknown Quality)
http://un-q.net/2008/01/box2d_flash_as3.html

----------------------

どうやら物理エンジンでは凸包(convex)しか認められないのはよくあることらしい。
http://twitter.com/rch850/statuses/650991802
これは動く
このコンテンツには最新のFlashPlayerが必要です
でもこれはうまく動かない
このコンテンツには最新のFlashPlayerが必要です
var bd:b2BodyDef = new b2BodyDef();
var t:b2PolyDef = new b2PolyDef();

t.vertexCount = 8;

var hoge:Number = Math.PI*2 / 8;
var r:Number = 20;
for (var i:int = 0; i<8; i++) {
    // r = (i % 2 == 0)? 20 : 10; // アンコメントで星っぽいヤツ
    t.vertices[i].Set(Math.cos(hoge*i)*r, Math.sin(hoge*i)*r);        
}
            
t.density = 1;
t.friction = 0.5;
t.restitution = 0.3;

bd.AddShape(t);
bd.position.x = stage.mouseX/m_physScale;
bd.position.y = stage.mouseY/m_physScale;

m_world.CreateBody(bd);


ちなみにbox2dでは多角形の頂点の数に制限がある。
b2Settings.asに
static public const b2_maxPolyVertices:int = 8;
って書いてある><

2008年01月29日

box2dで星っぽいの作ってもうまく動かない その2

三角形をつなげて、一個前のをやってみた。

box2dで星っぽいの作ってもうまく動かない (Unknown Quality)
http://un-q.net/2008/01/box2d_as3_flash.html

まだ挙動がおかしい><
でもこれはこれでおもしろいかも
このコンテンツには最新のFlashPlayerが必要です

もっとすっきりしたやり方があるっぽいけど保留w
// localPosition使えばもっとすっきりするんじゃね
            
var bd:b2BodyDef = new b2BodyDef();
var t1:b2PolyDef = new b2PolyDef();
var t2:b2PolyDef = new b2PolyDef();
var t3:b2PolyDef = new b2PolyDef();
var t4:b2PolyDef = new b2PolyDef();
                
t1.vertexCount = 3;
t2.vertexCount = 3;
t3.vertexCount = 3;
t4.vertexCount = 3;

var hoge:Number = Math.PI*2 / 8;
var r:Number = 20;
var a:Array = new Array();
for (var i:int = 0; i<8; i++) {
    r = (i % 2 == 0)? 20 : 10;
    a.push({x:Math.cos(hoge*i)*r, y:Math.sin(hoge*i)*r});
}
            
t1.vertices[0].Set(a[7].x, a[7].y);
t1.vertices[1].Set(a[0].x, a[0].y);
t1.vertices[2].Set(a[1].x, a[1].y);

t2.vertices[0].Set(a[1].x, a[1].y);
t2.vertices[1].Set(a[2].x, a[2].y);
t2.vertices[2].Set(a[3].x, a[3].y);

t3.vertices[0].Set(a[3].x, a[3].y);
t3.vertices[1].Set(a[4].x, a[4].y);
t3.vertices[2].Set(a[5].x, a[5].y);

t4.vertices[0].Set(a[5].x, a[5].y);
t4.vertices[1].Set(a[6].x, a[6].y);
t4.vertices[2].Set(a[7].x, a[7].y);            

t1.density = t2.density = t3.density = t4.density = 1;
t1.friction = t2.friction = t3.friction = t4.friction = 0.5;
t1.restitution = t2.restitution = t3.restitution = t4.restitution = 0.3;

bd.AddShape(t1);
bd.AddShape(t2);
bd.AddShape(t3);
bd.AddShape(t4);

bd.position.x = stage.mouseX/m_physScale;
bd.position.y = stage.mouseY/m_physScale;
//bd.rotation = Math.random() * Math.PI / 8;

m_world.CreateBody(bd);

2008年01月31日

box2dの重力は動的に変更できる

っぽいです

このコンテンツには最新のFlashPlayerが必要です


ENTER_FRAMEのなかでb2Worldのm_gravityを変更してやると上のヤツのようになります。
m_world.m_gravity.Set(r(-20,20), r(-20,20));

function r (max, min) {
    return Math.floor(Math.random()*(max-min+1))+min;
}             

2008年02月06日

さくらインターネットのSubversionが><

久しぶり使おうと思ったら、なんか使えなくなってた。
なんかosのアップデートがかかったっぽい。

/usr/libexec/ld-elf.so.1: Shared object "libexpat.so.5" not found, required by "svn"

ぐぐったら以下のサイトが出てきて、同じようにアップデートしたらなおった

FAKE.TOPAZ(2007-09-06)
http://fake.topaz.ne.jp/?date=20070906#p01

2008年02月12日

gifアニメーションがjavascriptで止まる IE6限定

IE6でgifアニメが止まることがあったのでメモ

サンプル
gifアニメーションがjavascriptで止まる
http://labs.un-q.net/javascript/gifanimation/

<a href="javascript:hoge()">これは止まる</a>
<a href="#" onClick="hoge(); return false;">これは止まらない</a>

IE6だけの現象っぽいけどなんだろ

2008年02月23日

Gainerはじめました

Gainer

ちょっと前に購入してたGainerを組み立てた。


こちらの本を参考にやりました。


+GAINER?PHYSICAL COMPUTING WITH GAINER
+GAINER?PHYSICAL COMPUTING WITH GAINER


occhii105さんが会社にはんだごてを持ってきてくれたので一緒につくりました。

はんだとか中学生ぶりくらいだったので、最初ちょっとうまくいかなかったけどなんとなーく組み立てれた。

会社でやっていたので、かなりいろいろな人に不思議がられました。
意外と営業の人が食いついてた。なんか仕事とってきてくれるかなー

MacBookに接続したらちゃんとLEDも光ったのでとりあえずOK

Gainer


ここから落としたサンプルも無事動いた

GAINER.cc | Download / ダウンロード
http://gainer.cc/Download/Download


occhii105さんはさっきまでうまくいかなかったけど、どやらはんだを付け直したらうまくいったっぽい。


なぜ突然Gainerかっていうと、次回のWCAN mini AS Vol.5はGainer開発チームの小林茂さんにGainerのワークショップなのです。

WCAN [ Web Creators Association Nagoya ] WCAN mini ActionScript Vol.5
http://www.wcan.jp/index.php?ID=157

まだ申し込み始まってないけど、興味のある方はぜひぜひ。
定員が少ないのと、いつもより1000円高かったり、環境が無いとダメだったりするので気をつけてください。


なにつくろっかなー


全然関係ないけど、Gainerに入ってたプチプチに「プチ」って書いてあったのが可愛かった。

プチプチ


2008年03月15日

WCAN mini ActionScript Vol.5 Gainerワークショップ 中継中

中継してるよ

http://www.ustream.tv/channel/lllkoballl

WCAN [ Web Creators Association Nagoya ] WCAN mini ActionScript Vol.5
http://www.wcan.jp/index.php?ID=157

2008年03月29日

RubyからFunnelで加速度センサー(Gainer)の値を取得してみた

R0011218.jpg
FunnelつかえばGainerをrubyから扱えるそうなので試してみた。
今回はActionScriptでなくrubyからやってみる。

ちなみにFunnelについては
http://funnel.cc/


今回は、加速度センサーの値をrubyから取得してみる。
上の写真に写ってるやつが加速度センサー


まずは
http://code.google.com/p/funnel/downloads/list
からFunnelをダウンロード。
今回は build 006 でやりました。

リストの中に「wcan_mini_vol5_workshop.zip」というのがあるけど、これは前回のWCAN mini でつかったサンプルが入ってます。


次にFunnelをrubyで扱うにはOCSのライブラリが必要なので、そちらをインストール。
ちなみに、OCSとは「Open Sound Control」の略で、ソフトウェアとハードウェアの通信規格だそうです。Soundとなってますが、音以外のデータでもおkみたいです。

RAA - osc
http://raa.ruby-lang.org/project/osc/

上記サイトからtar.gzをダウンロードしてきて解凍後

$ ruby install.rb config
$ ruby install.rb setup
$ ruby install.rb install

でインストールできます。



次にGainerに加速度センサーを取り付けます。
配線は
YAPAN.org: WCAN mini ActionScript Vol.5
http://www.yapan.org/main/2008/03/wcan-mini-actio.html
のスライド107ページ目を参考にしてます。


配線ができたら、USBケーブルをさして、Funnelサーバーを起動します。


rubyのスクリプトはダウンロードしてきたfunnel_006のlibrariesのrubyのexamplesにある「gainer.rb」を参考に以下のようにしてみました。

require 'funnel'

module Funnel
  
  gio = Gainer.new(Gainer::MODE1)
  
  gio.ain(0).on PortEvent::CHANGE do |event|
    puts "ain 0: #{event.target.last_value} > #{event.target.value}"
  end

  gio.ain(1).on PortEvent::CHANGE do |event|
    puts "ain 1: #{event.target.last_value} > #{event.target.value}"
  end

  gio.ain(2).on PortEvent::CHANGE do |event|
    puts "ain 2: #{event.target.last_value} > #{event.target.value}"
  end

  sleep()

end
アナログインプットの値をそれぞれ取得してます。
値が変化したらイベントが発生するって解釈でいいのかな?
sleepでとめてるんだけど、こんなやり方でええんだろうか?

これをFunnelサーバー起動した状態で実行すると。
ruby mortion01.rb 

こんな感じの出力になります。
ain 0: 0.521568655967712 > 0.494117647409439
ain 1: 0.494117647409439 > 0.486274510622025
ain 2: 0.678431391716003 > 0.764705896377563
続く・・・・
なんかたまに
command port: localhost, 64178
notification port: localhost, 64179
notification port: EOF error
というのが表示されるけどなんだろ。


とりあえずrubyからfunnelでGainerにつけた加速度センサーの値をゲットできました。 なんかつくってみよー

2008年04月07日

TextFieldを含むSpriteをbuttonMode=trueにしてもカーソルが変わらない

よく忘れるのでメモ。


SpriteにTextFieldをaddChildしてSpriteのbuttonModeをtrueにしても、マウスオーバーしたときにカーソルが変わらないことがある。
そんなときはTextFieldのmouseEnabledをfalseにすればおk


サンプル
このコンテンツには最新のFlashPlayerが必要です


package {

    import flash.display.*;
    import flash.text.*;
    import flash.events.*;
    
    [SWF(width="250", height="100", frameRate="12", backgroundColor="#000000")]    
    public class ButtonHandcursor extends Sprite {

        public function ButtonHandcursor() {

            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            
            var btn1:Sprite = new Sprite();
            var btn2:Sprite = new Sprite();
            var txt1:TextField = new TextField();
            var txt2:TextField = new TextField();
            var tf:TextFormat = new TextFormat("_ゴシック", 15, 0x00bbff);
            
            txt1.defaultTextFormat = tf;
            txt1.autoSize = TextFieldAutoSize.LEFT;
            txt1.selectable = false;
            txt1.text = "ハンドカーソルにならない";
            btn1.buttonMode = true;            
            btn1.addChild(txt1);
            addChild(btn1);
            
            txt2.defaultTextFormat = tf;
            txt2.autoSize = TextFieldAutoSize.LEFT;
            txt2.selectable = false;
            txt2.mouseEnabled = false; // これ      
            txt2.text = "ハンドカーソルになる";
            btn2.buttonMode = true;
            btn2.addChild(txt2);
            addChild(btn2);
            btn2.y = 50;
            
        }

    }

}

2008年05月02日

FileReferenceとBasic認証

FileReferenceでファイルアップロードする場合、Basic認証がかかっていると401でレスポンスが返ってくるよ><

どうやらFlashPlayerからリクエストが発行されるためBasic認証が通過できないっぽい

unknownplace.org - 2007/10/26
http://unknownplace.org/memo/2007/10/26

わりとハマりどころなきがする。

なんとかする方法はあるんかなー

■追記
どうやら無理っぽい><
Twitter / seagirl: @ll_koba_ll FileReferenceでは...
http://twitter.com/seagirl/statuses/801892146

2008年05月12日

action-codingがすばらしそう!

action-coding - Google Code
http://code.google.com/p/action-coding/
masudaさんが面白そうなモノ作ったみたいです。

この辺りで知りました。

TNSTUDIO blog: action-coding
http://www.tnstudio.net/blog/archives/2008/05/actioncoding.html

ことぶ記: action-coding
http://www.yapan.org/diary/2008/05/action-coding.html

こちらのスクリーンキャストを見るのが一番いいと思います
http://www.metaphor.co.jp/file/action-coding-demo00.mov

rubyでprocessingのコードが書けて、さらにrascutのように保存をすると自動的に実行される環境みたいです。
VJみたいなことをしたりも出来そうですね。

ちょっとさわってみよう。

2008年05月16日

Flash Player 10 で 3Dしてみた

flash10_3d.png
Flash Player 10 bate がリリースされました。

Adobe Labs - Flash Player 10
http://labs.adobe.com/technologies/flashplayer10/

akihiro kamijo: Flash Player 10 beta 公開
http://weblogs.macromedia.com/akamijo/archives/2008/05/flash_player_10.html

とりあえずDisplayObjectに追加された3D機能を試してみる
この辺りを参考に作ってみました
http://wiki.libspark.org/wiki/FlashPlayer/10/API

こちらからFlash Player 10をインストールしてからみてください。
Adobe Labs - Downloads: Flash Player 10
http://labs.adobe.com/downloads/flashplayer10.html

このコンテンツには最新のFlashPlayerが必要です

コードはこんな感じ
Zsortは自分でする必要があるっぽい?のでとりあえず面は描画せず線だけです。
package {

    import flash.display.*;
    import flash.text.*;
    import flash.events.*;

    use namespace astro;
            
    public class Flash10Sample03 extends Sprite {

        private var sp:Sprite;
        private const CUBE_SCALE:int = 100;        
        
        public function Flash10Sample03() {                        

            var txt:TextField = new TextField();
            addChild(txt);
            txt.text = "クリックで始まります";
            txt.autoSize = TextFieldAutoSize.LEFT;
            txt.setTextFormat(new TextFormat("_ゴシック", 15, 0xffffff));
            stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
                removeChild(txt);
                stage.removeEventListener(MouseEvent.CLICK, arguments.callee);
                init();                
            });
                        
        }

        private function init():void {
            createCubeFace();
            
            addEventListener(Event.ENTER_FRAME, function(e:Event):void {
                sp.astro::rotationY += 1;
                sp.astro::rotationX += 1;
            });

        }

        private function createCubeFace():void {

            sp = new Sprite();
            addChild(sp);
            sp.x = 250;
            sp.y = 250;

            var s:Sprite;
            faceArray = new Array();

            function createFace(c:uint):Sprite {
                var s:Sprite = new Sprite();
                drawRect(s, c);
                sp.addChild(s);
                return s
            }
            
            // 背面
            s = createFace(0xff0000);
            s.astro::z = CUBE_SCALE/2;
            
            // 左
            s = createFace(0x0000ff);
            s.astro::rotationY = 90;
            s.x = -CUBE_SCALE/2;
            
            // 右
            s = createFace(0x00ff00);
            s.astro::rotationY = 90;
            s.x = CUBE_SCALE/2;
            
            // 上
            s = createFace(0xffff00);
            s.astro::rotationX = 90;
            s.y = -CUBE_SCALE/2;

            // 下
            s = createFace(0x00ffff);
            s.astro::rotationX = 90;
            s.y = CUBE_SCALE/2;

            // 前面
            s = createFace(0xaaaaaa);
            s.astro::z = -CUBE_SCALE/2;
            
        }

        private function drawRect(s:Sprite, c:uint):void {

            var g:Graphics = s.graphics;
            g.lineStyle(2, 0xffffff);
            g.beginFill(c, 0); // z sort してないから塗りは消しておく
            g.drawRect(-CUBE_SCALE/2, -CUBE_SCALE/2, CUBE_SCALE, CUBE_SCALE);
            g.endFill();
            
        }
        
    }
    
}


astro.as
package {
    public namespace astro = "http://www.adobe.com/2008/actionscript/Flash10/";
}

Flash Player 10 で 3Dしてみた 2  テキストもいるけ (Unknown Quality)
http://un-q.net/2008/05/flash_player_10_3d_astro.html

Flash Player 10 で 3Dしてみた 2  テキストもいける

flash10_3d2_astro
Flash Player 10 で 3Dしてみた (Unknown Quality)
http://un-q.net/2008/05/flash_player_10_3d.html
の続き
テキストを追加してみたらちゃんとテキストも3Dで表示されたよ。
動的なテキストでもいけるのは嬉しいですね。

こちらからFlash Player 10をインストールしてからみてください。
Adobe Labs - Downloads: Flash Player 10
http://labs.adobe.com/downloads/flashplayer10.html

このコンテンツには最新のFlashPlayerが必要です

package {

    import flash.display.*;
    import flash.text.*;
    import flash.events.*;

    use namespace astro;
            
    public class Flash10Sample04 extends Sprite {

        private var sp:Sprite;
        private const CUBE_SCALE:int = 100;        
        
        public function Flash10Sample04() {                        

            var txt:TextField = new TextField();
            addChild(txt);
            txt.text = "クリックで始まります";
            txt.autoSize = TextFieldAutoSize.LEFT;
            txt.setTextFormat(new TextFormat("_ゴシック", 15, 0xffffff));
            
            stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
                removeChild(txt);
                stage.removeEventListener(MouseEvent.CLICK, arguments.callee);
                init();                
            });
                        
        }

        private function init():void {
            createCubeFace();
            
            addEventListener(Event.ENTER_FRAME, function(e:Event):void {
                sp.astro::rotationY += 1;
                sp.astro::rotationX += 1;
            });

        }

        private function createCubeFace():void {

            sp = new Sprite();
            addChild(sp);
            sp.x = 250;
            sp.y = 250;

            var s:Sprite;
            faceArray = new Array();

            function createFace(c:uint):Sprite {
                var s:Sprite = new Sprite();
                drawRect(s, c);
                sp.addChild(s);
                return s
            }
            
            // 背面
            s = createFace(0xff0000);
            s.astro::z = CUBE_SCALE/2;
            
            // 左
            s = createFace(0x0000ff);
            s.astro::rotationY = 90;
            s.x = -CUBE_SCALE/2;
            
            // 右
            s = createFace(0x00ff00);
            s.astro::rotationY = 90;
            s.x = CUBE_SCALE/2;
            
            // 上
            s = createFace(0xffff00);
            s.astro::rotationX = 90;
            s.y = -CUBE_SCALE/2;

            // 下
            s = createFace(0x00ffff);
            s.astro::rotationX = 90;
            s.y = CUBE_SCALE/2;

            // 前面
            s = createFace(0xaaaaaa);
            s.astro::z = -CUBE_SCALE/2;

            var t:TextField = new TextField();
            s.addChild(t);
            t.text = "名古屋で?nActionScript";
            t.autoSize = TextFieldAutoSize.LEFT;
            t.setTextFormat(new TextFormat("_ゴシック", 15, 0xeeeeee));
            t.x = -50
            t.y = -20

            
        }

        private function drawRect(s:Sprite, c:uint):void {

            var g:Graphics = s.graphics;
            g.lineStyle(2, 0xffffff);
            g.beginFill(c, 0); // z sort してないから塗りは消しておく
            g.drawRect(-CUBE_SCALE/2, -CUBE_SCALE/2, CUBE_SCALE, CUBE_SCALE);
            g.endFill();
            
        }
        
    }
    
}

FIVe3DのAS3版

FIVe3Dで検索してきてくれる人が、最近多いんですがまだAS3版の記事書いてません><

ごめんなさい!
そのうち書きます。

AS3版のFIVe3Dに関してはmoriBlogさんが記事をたくさん書いているので、以下よりどうぞ。

[FIVe3D]Z-Sortの続き。Cubeを表示 | moriBlog
http://moringo.moo.jp/wordpress/?p=122

[FIVe3D]Sprite3DのZ-SORT | moriBlog
http://moringo.moo.jp/wordpress/?p=121

[FIve3D] Video3Dクラス | moriBlog
http://moringo.moo.jp/wordpress/?p=120

FIVe3D curveToSpace使ってみるテスト | moriBlog
http://moringo.moo.jp/wordpress/?p=119

[FIVe3D] 3D RSS Reader(非実用的) | moriBlog
http://moringo.moo.jp/wordpress/?p=118

FIVe3D 3D空間に描画 | moriBlog
http://moringo.moo.jp/wordpress/?p=115

FIVe3Dで好きなフォントを使う(日本語も) | moriBlog
http://moringo.moo.jp/wordpress/?p=113

nitoyonさんも書いてますね

FIVe3D で Keynote 風 Cube トランジッション - てっく煮ブログ
http://d.hatena.ne.jp/nitoyon/20080513/p1

2008年05月22日

電子工作系で質問があったけどわからないから誰か答えてくだせぇ

以下のようなコメントいただきました

http://un-q.net/2008/03/ruby_funnel_gainer_ocs.html#comment-16717

加速度センサーを使って このような物 製作したいのですが RC 送信機の外部端子はPPMパルスでないと受け付けない様です RC用ジャイロは サーボを制御するため PWMパルスを 出しています。 どうすれば ジャイロ信号を送信機から 送れるのでしょう

このような物です
http://www.youtube.com/watch?v=GCd5sVdRa6k&feature=related
http://www.youtube.com/watch?v=KDPS4Hgndmc&feature=related

しかーし!
私には申し訳ないのですがさっぱりわかりませんw
誰かわかる人は教えてください><


2008年06月02日

Flashのバージョンチェック

ActionScript2の話 FlashPlayer10 をいれたら見れなくなるサイトがあるなーと思ってたけど、今日こんなコードに出会った。

var v = getVersion(); // output MAC 9,0,115,0
if (Number(v.substr(4,1) < 7)) {
    // バージョンアップしてね
}

これじゃFlashPlayer10で見れません><
splitをつかってやりましょう!

var v = getVersion(); // output MAC 9,0,115,0
if (Number(v.split(" ")[1].split(",")[0]) < 7) {
    // バージョンアップしてね
}

もしかしたらFlashPlayer10で見れないサイトはこんな感じのコードだったりするのかな。 それとも明示的に10を取り除いてるんだろうか。。。

ちなみにActionScript3でバージョン取得する場合は
flash.system.Capabilities.version

で取得できます。

2008年06月10日

FLVPlaybackのsmoothing

メモ

AS3のFLVPlaybackのsmoothingのかけかた。
playerがFLVPlayback

player.getVideoPlayer(player.activeVideoPlayerIndex).smoothing = true;

FLVPlaybck使わない場合はVideoクラスにsommthingのプロパティがある。

2008年06月12日

FlashPlayerのExpress Installがうまくいかない

おれの環境だけだろうか

9以上じゃないとExpress Install動くはずなのだが。。。
http://labs.un-q.net/flash/expressTest/

Screenshot_1.png

となってしまう。。。

Mac OS X 10.4.11
Firefox
FlashPlayer 8.0 r27


あと
Archived Flash Players available for testing purposes
http://kb.adobe.com/selfservice/viewContent.do?externalId=tn_14266&sliceId=1

にあるFlash Player8のアーカイブって全部Intel Mac未対応?
9からはIntel用もあるんだけどなー


追記 2008.6.17
WinのFirefoxだとうまくいったっぽい
なんだろーなー

Macでも9.0.115からだったらうまくいったっぽい

うむー

選択したオブジェクトを(0,0)に移動するJSFL

確実に誰かが作ってると思うけど練習かねて書いてみた

var doc = fl.getDocumentDOM();
if (doc.selection.length > 0) {
    var x = doc.getElementProperty("x");
    var y = doc.getElementProperty("y");
    var w = doc.getElementProperty("width");
    var h = doc.getElementProperty("height")
    doc.moveSelectionBy({x:-x+w/2, y:-y+h/2});
}

JSFLめんどい
doc.getElement()とかあったら便利だと思うんだけどなー
ないっぽいなー


追記 2008.6.16
上のスクリプトだと、複数選択してたときとかにおかしなことになってた。
というかdoc.selectionのなかに選択したelementが入ってるから、それのプロパティ直接変更できたよ。ちゃんとドキュメント読まなきゃなー
var doc = fl.getDocumentDOM();
for (var i in doc.selection) {
    doc.selection[i].x = 0;
    doc.selection[i].y = 0;
}
こんな感じでもいけるっぽい
ただ、これだとオブジェクトがシンボルになってれば基準点を基準に(0,0)に移動してくれるけど、直接書いたシェイプとかだと、基準点を勝手にオブジェクトの中心にしてしまう。
個人的にはオブジェクトの左上を(0,0)にしたいのでこんな感じにしてみた。
var doc = fl.getDocumentDOM();
for (var i in doc.selection) {
    if(doc.selection[i].elementType == "shape") {
        doc.selection[i].x = 0 + doc.selection[i].width/2;
        doc.selection[i].y = 0 + doc.selection[i].height/2;
    } else {
        doc.selection[i].x = 0;
        doc.selection[i].y = 0;
    }
}

2008年06月17日

FLVPlaybackからNetConnectionとNetStreamを取得する

めもー

bufferLengthがFLVPlaybackから直接取得できなかったので、調べてみたらFLVPlaybackからNetStreamとかNetConnectionが取得でっぽい。

FLVPlaybackコンポーネントからNetConnectionオブジェクトを得る方法 - akiyan.com 管理人メモ
http://d.hatena.ne.jp/akiyan/20071102/1193992725

netc = player.getVideoPlayer(player.activeVideoPlayerIndex).netConnection;
nets = player.getVideoPlayer(player.activeVideoPlayerIndex).netStream;

2008年06月18日

Firefox3にFlash Switcherいれた

Twitter / nori: せっかくFireFox3にしたので、Flash Swi...
http://twitter.com/northprint/statuses/837373839

Firefox extensions - Flash Switcher - sephiroth.it
http://www.sephiroth.it/firefox/flash_switcher/

いつのまにか新しいやつ出てたっぽいのでいれておいた。
しかも1つでMac Win Linuxに対応してる。

ちなみにスイッチできるバージョンを増やすには
Flash Switcher入れてみた(OSX版) - cellfusion blog
http://blog.cellfusion.jp/2008/05/339

Macだけどwinも同じだよねきっと

2008年06月19日

MacのFirefox3でFlashフルスクリーンにするとMouseEventが取得できない

※注意
どうも環境によるみたいっす。詳しいことはまだよくわかってません。

なんてこったい><


MacのFirefox3にてFlashをフルスクリーンにすると、マウスイベントがうまく取得できなくなるっぽいです。
ほかの環境はあまり試してないので皆さん試してみてください。

クリックしたりすると一瞬いろいろなイベントが取得できるけど、すぐにだめになる。
右クリックで画質変更するとなぜかイベントがくる。。。そのあと一度でもどこかをクリックするとまた イベントがこなくなる。
クリックイベントの直後はイベント取得できるっぽいので、ボタンのクリックの処理は大丈夫そうですが、その他はダメな感じです。

■追記 2008.6.19 17:00
Mac のFirefoxでちゃんとイベントとれてる環境もあるみたい
今の環境書いておく
  • Firefox/3.0 (lzyc)
  • Flash Player 9,0,124,0 Debug
  • Mac OSX 10.4.11

■追記 2008.6.19 19:50
もしかしてこれかなー

Bug 435868 ? Flash mouse input is partially blocked when in full screen (fullscreen) display state
https://bugzilla.mozilla.org/show_bug.cgi?id=435868

検証用
上のボタンでフルスクリーンきりかえできます。したのオブジェクトにmouseOverとmouseOut,clickでテキストが入れ替わります。 traceには他のイベントも出してます。
このコンテンツには最新のFlashPlayerが必要です


そーす
package {

    import flash.display.*;
    import flash.events.*;
    import flash.text.*;

    [SWF(width="300", height="300", frameRate="24", backgroundColor="#000000")]    
    public class FullscreenFx3Test extends Sprite {

        private var fullscreen_btn:Sprite;
        private var testText:TextField;

        private var testSp:Sprite;
        
        function FullscreenFx3Test() {
            
            createButton();

            trace(" --------------- start FullscreenFx3Test ---------------");
            trace(" いろいろ出力します ")
            
            fullscreen_btn.addEventListener(MouseEvent.CLICK,
                                            function(e:MouseEvent):void {
                
                if (stage.displayState == StageDisplayState.NORMAL) {
                    stage.displayState = StageDisplayState.FULL_SCREEN;
                } else {
                    stage.displayState = StageDisplayState.NORMAL;
                }
                testText.text = "";
                
            });


            eventCheckInit()
        }


        private function eventCheckInit():void {
            
            testSp.addEventListener(MouseEvent.MOUSE_OVER,
                                            function(e:MouseEvent):void {
                trace("mouse over");
                testText.text = e.type;
            });

            testSp.addEventListener(MouseEvent.MOUSE_OUT,
                                            function(e:MouseEvent):void {
                trace("mouse out");
                testText.text = e.type;
            });
            
            testSp.addEventListener(MouseEvent.CLICK,
                                            function(e:MouseEvent):void {
                trace("mouse click");
                testText.text = e.type;
            });

            var events:Array = [MouseEvent.CLICK,
                                MouseEvent.DOUBLE_CLICK,
                                MouseEvent.MOUSE_DOWN,
                                MouseEvent.MOUSE_MOVE,
                                MouseEvent.MOUSE_OUT,
                                MouseEvent.MOUSE_OVER,
                                MouseEvent.MOUSE_UP,
                                MouseEvent.ROLL_OUT,
                                MouseEvent.ROLL_OVER];
            var i:uint;
            var l:uint = events.length;
            for(i=0; i<l; i++) {
                testSp.addEventListener(events[i],
                                        function(e:MouseEvent):void {
                    trace(stage.displayState , e.type);
                });
            }
            
        }


        private function createButton():void {
            
            // fullscreen_btn
            fullscreen_btn = new Sprite();
            var g:Graphics = fullscreen_btn.graphics;
            g.beginFill(0xffffff);
            g.lineStyle(1, 0x999999);
            g.drawRect(0, 0, 200, 40);
            g.endFill();
            fullscreen_btn.x = 300/2  -fullscreen_btn.width/2;
            fullscreen_btn.y = 100/2 - fullscreen_btn.height/2;
            addChild(fullscreen_btn);
            fullscreen_btn.buttonMode = true;
            fullscreen_btn.mouseChildren = false;
            var ftxt:TextField = new TextField();
            ftxt.autoSize = TextFieldAutoSize.LEFT;
            ftxt.text = "Toggle FullScreen";
            ftxt.setTextFormat(new TextFormat("_ゴシック", 15));
            ftxt.x = 30;
            fullscreen_btn.addChild(ftxt);            


            // testObject
            testSp = new Sprite();
            g = testSp.graphics;
            g.beginFill(0xaaaaaa);
            g.lineStyle(1, 0x999999);
            g.drawRect(0, 0, 200, 200);
            g.endFill();
            testSp.x = 300/2  -testSp.width/2;
            testSp.y = 80;
            addChild(testSp);
            testSp.buttonMode = true;
            testSp.mouseChildren = false;

            testText = new TextField();
            testText.autoSize = TextFieldAutoSize.LEFT;
            testText.text = "";
            testText.defaultTextFormat = new TextFormat("_ゴシック", 15);
            testText.x = 50;
            testSp.addChild(testText);            
            //testText.visible = false;
            
        }
    }
}

2008年06月20日

Emacsのキーバインド鬼軍曹

Copy/Cut/Paste:Emacsキーバインド強制elisp"鬼軍曹.el"をcommitした
http://blog.livedoor.jp/k1LoW/archives/65055608.html

俺もEmacs使ってるけど未だに矢印とか使っちゃうから入れてみた。
速攻怒られた><
がんばろう

2008年06月25日

EmacsからFlashをパブリッシュ

EmacsからFlashのパブリッシュとムービープレビューをできるようにしてみた。環境はMacだけどWinでも出来ると思う。。。

.emacs.elに
(defun publish-flash()
  (interactive)
  (do-applescript
   (format "
tell application \"flash\"
  try
    open alias \"Macintosh HD:Users:hoge:labs:jsfl:publish.jsfl\"
  on error
    beep
  end try
end tell")))

(defun testmovie-flash()
  (interactive)
  (do-applescript
   (format "
tell application \"flash\"
  activate
  try
    open alias \"Macintosh HD:Users:hoge:labs:jsfl:testMovie.jsfl\"
  on error
    beep
  end try
end tell")))
  
(global-set-key [\C-return] 'publish-flash)
(global-set-key [\M-return] 'testmovie-flash)
として、適当な場所に以下の jsflファイルを配置しておきます。

Macintosh HD:Users:hoge:labs:jsfl:publish.jsfl
fl.getDocumentDOM().publish();

Macintosh HD:Users:hoge:labs:jsfl:testMovie.jsfl
fl.getDocumentDOM().testMovie();
これでEmacs上からCmd+Enterでムービープレビュー、Ctrl+Enterでパブリッシュされます。 さらにムービプレビュー時はFlashのウインドウがアクティブになります。

仕組み的には Emacsから AppleScript経由でJSFLを実行してるだけ。この方法を使えばあらゆるJSFLがEmacsから実行できます。

超ニッチな気もするけど便利なのでEmacsでAS書いててかつ Flash持ってる人は使ってください。

2008年06月28日

開いているflaファイルを全てパブリッシュしつつ、アクティブなやつをムビープレビューするjsfl

焼酎甲類ビッグマンが好きなbigchuがやってたのを拡張してみた。

開いているflaファイルを全てパブリッシュするJSFLで乾杯 - 酒は血液、呑んだら献血
http://d.hatena.ne.jp/bigchu/20080625/1214413128

ひらいてる.flaをパブリッシュしつつ、アクティブな.flaをムービープレビューします。
メインのswfが複数のswfを読み込むようなコンテンツの開発してるときには便利かも。 思いつきで書いたのでなんも保証しません。
var activeDoc = fl.getDocumentDOM()
for (doc in fl.documents) {
    if (fl.documents[doc] != activeDoc) {
        fl.documents[doc].publish();
    }
}
activeDoc.testMovie();

2008年06月29日

ActionScript Thread Library 1.0 (そうめん) がリリースされた

暑くなってきたのでそうめんの季節ですねー

ActionScriptもそうめんの季節です!

BeInteractive! [ActionScript Thread Library 1.0 (そうめん) リリース!!]
http://www.be-interactive.org/index.php?itemid=385

ActionScript Thread Library 1.0 (そうめん) ドキュメント
http://www.libspark.org/htdocs/as3/thread-files/document/

AS3のスレッドライブラリなのですが、すげーいいです。まだ基本的な部分しか使えてないっぽいですが
、addEventListener地獄から抜け出すことができますw


わりとサーバーと非同期通信を何回も行うFlashを作ることが多いので、addEventListnererを大量に書くことになったりするんですが、このライブラリがあればaddeventListenerソースからみるみる消えていきます。

ドキュメントもしかりしててサンプルもたくさんあるので、まだ1日しかさわってませんが、実践投入しちゃいました!
なんとかTherad.asというファイルがいっぱいですw
スレッドを細かく分けてみたんだけど、後で読み返したり修正するのが結構楽かなと思いました。

そうめんを使う人のことを「soumener」というらしいので「名古屋のsoumener」と言われるように頑張ります!
http://twitter.com/beinteractive/statuses/846022419

soumenerのよみかたは「そーめなー」でいいのかな

Macしゃべらしたらそんな感じだった。

$ say soumener

全然関係ないけど

$ ls /System/Library/Speech/Voices 

ってすると、しゃべってくれる人の一覧がでてきて
$ say -v Trinoids soumener

ってするとその人の声でしゃべってくれるwww

2008年07月01日

パブリッシュできなくなったらとりあえずASOを削除しましょう

さっきMacがフリーズして強制終了したんだけど、再起動したらそれまで開いてた.flaが急にパブリッシュできなくなった。

パブリッシュしようとするとメモリがたりません的なエラーが出てきてしまい、にっちもさっちもいかない状態に。

svnから古いバージョン落としてきてもだめ。。。
どうやら特定のクラスを読み込むと落ちているようだったので、クラスを作り直したりしてみたけど、全くなおらない。

そろそろ荷物もまとめて逃げようかと考えていたところ、そーいえば昔も同じようなことがあってASO消せば直った覚えがあったので、消してみたら見事に直りました。

ASOファイルとは.asのファイルをキャッシュしてパブリッシュを高速化するようなものです。
メニューの制御の中に「ASOファイルを削除」ってのがあるのでそれで消せます。

みなさんも.flaがパブリッシュできなくなったらASOファイルを消してみましょう。

2008年08月25日

EmacsでAS書くときインデントがおかしいので

actionscript-modeそのままだと自動改行が
function hoge()
    {
    }
となってしまう。
本当はこうしたい
functionn hoge()
{
}
c-set-offsetでインデントを設定できるようなので、以下のようにしてみた。
(add-hook 'actionscript-mode-hook
  '(lambda ()
     (c-set-offset 'statement-cont 0)
     (c-set-offset 'substatement-open 0)
     (c-set-offset 'block-open 0)     
     (c-set-offset 'case-label '+)
     (c-set-offset 'statement-case-open 0)
     (setq tab-width 4)
     (setq c-basic-offset tab-width)
     (setq indent-tabs-mode nil)))
GNU Emacsマニュアル: Programs
http://www.geocities.co.jp/SiliconValley-Oakland/3432/man/emacs/emacs-ja_23.html#SEC249

2008年09月05日

Progression3リリース!!!!


progressionlogo.png

progression.jp
http://progression.jp/

ついにバージョン3リリースです!
昨日はリリースのイベントがアップルストアでありました。

Launching "Progression 3" in Apple Store, Ginza
http://event.progression.jp/

立ち見でいっぱいになるくらい人が来てて、Progressionの注目度の高さに驚かされました。リリースのイベントをアップルストアでやるってのがすげーっすよ!アンケートでProgression使ったことある人に手を挙げてもらってたけど、まだまだ少なかった感じがちょっとしました。

もうみんなProgression使えばいいと思いますよ。


なんかいろんな人とニアミスしてたり、隣にチンカスの人がいたり、最終的に京都から来た人を巻き込んで朝方まで飲んでたり、大変おもしろいイベントでしたw


そんなこんなで、これからFlashサイト作るときはProgressionがスタンダードになるんじゃないでしょうか。クライアントから「Flashでお願いします」じゃなくて「Progressionでお願いします」って感じになったりしそう。


とりあえずProgression御殿が建ったら遊びに行きたいです。
今後もProgressionからは目が離せませんね!

2008年09月13日

iphoneasがすごい!

すごいです!

uranodai/iphoneas - Spark project
http://www.libspark.org/wiki/uranodai/iphoneas

iPhoneとFlashをつなぐiphoneasリリースしました|ameblo.jp/uranodai
http://ameblo.jp/uranodai/entry-10133210948.html

このライブラリを使うためにiPhoneを購入したと言っても過言では無いのですが、実際に試してみて感動しました。このライブラリが使えるだけでiPhoneを買った価値がありますよ!
FLASHerでiPhoneを持っているならば必ず試すべきです。試しなさい!

ネイティブアプリ版のほうがマルチタッチの細かい情報とか、傾きセンサーの値とかが取得できるのと、レスポンスがよさげなのでおすすめです。

アプリは
Josh’s Blog ? OSCemote
http://lux.vu/blog/oscemote/
を使用します。
600円だと思ってたら、ふとアクセスし直してみると115円くらいになってたので、ラッキーと購入しました。

少し飲んでいるのでやたらとテンションが高くBlogの記事を書いていますが、そうでなくてもこのライブラリはすごいと思います。

作者のuranodai先生には足を向けて寝ることができません。

とりあえずこれを使って何か作ってみたいと思います。
sparkの準備とか時計つくったりとかしなきゃいけない気がしますがが、全部がんばる!

2008年09月14日

Flashのselenium

Adobe - デベロッパーセンター : Selenium RCによるFlash用の機能テストの作成と実行
http://www.adobe.com/jp/devnet/flash/articles/flash_selenium.html

キタコレ!
seleniumってのはnium先生とは全く関係ないのですが、テストツールで、unitテストとかのようにプログラム側からのアプローチじゃなくてブラウザの操作自体、GUI側からのアプローチでテストを行うためのツールです。htmlのアプリケーションなら動作を記録してそれをテストケースとすることができちゃったりします。

で、会社でseleniumを導入し始めてたんだけど、Flashのテストは無理っすよーなんて言ってしまってたわけですが、なんかadobeのデベロッパーセンターにこんな記事を見つけてしまった!

RAWHIDE.ではサーバー側のテストはちゃんとやってるんだけど、Flash側はまだまだ不十分で、Unitテストを導入するためいろいろ調べてたんだけど、これも調べる必要がありそう!

Flashでテストってどのくらい書かれてるんだろうか、そうめんはテストがちゃんと書かれてのでその辺りを参考にしながら、RAWHIDE.のFlash制作のフローにもテストをちゃんと組み込んでいこう。

[アンケート]Flash or flexでユニットテストって書いてますか

作るモノによって全然違う気がするけど、何となく気になるのでアンケートします。
気軽に答えてください。

コメントがある人はコメントしてくださいな。

2008年10月10日

手描きで時計が作れるサービスのモックアップてきな

てら子には諸事情で参加できなくなってしまったんだけど、とりあえず時計作りました。

tegakiClock.png

手描きで時計が作れるサービスのモックアップ的な何かです。

tegakiClock
http://labs.un-q.net/tegakiClock/mock/tegakiClock.html

モックアップなので保存とかできないし、いろいろ足りてない感じでグダグダです。
今後はちゃんとしたサービスとしてリリースできるように作り込んでみようかと思ってます。

まずは作った時計が保存できて、ブログパーツになるところからですかね。

時計部分はTeraClockを利用させていただきましたー。

2008年11月07日

ユーザーが拡大縮小移動回転などできるオブジェクトをAS3で

まーあれですPhotoShopとかでオブジェクト移動したりするやつ。
以前AS2で作ったことあるんですが、AS3で必要になり移植だるいなーと思ってたらふとそんなライブラリがあったなーということで試してみました。

TransformTool
http://www.senocular.com/demo/TransformToolAS3/TransformTool.html

使い方は超簡単。newしてaddChildしてtarget決めるだけ。
var tTool:TransformTool = new TransformTool();
addChild(tTool);
tTool.target = container;
クリックされたらtargetを入れ替えるようにすればそれっぽく使えそうです。
しかもいろいろな設定ができて至れり尽くせりな感じ。
tTool.registration = new Point(container.width/2, container.height/2); // 中心点            
tTool.controlSize = 30; コントロールポイントの大きさ
tTool.moveEnabled = false; // 移動できるかどうか
tTool.registrationEnabled = false; // 中心点の表示
tTool.rotationEnabled = false; // 回転できるかどうか
tTool.scaleEnabled = false; // 拡大縮小できるか
tTool.skewEnabled = false; // 菱形に変形できるかどうか
tTool.outlineEnabled = false; // 枠をの表示
tTool.cursorsEnabled = false; // カーソル変更するかどうか
tTool.constrainScale = true; // 比率を保つかどうか
tTool.constrainRotation = true; //constrainRotationで設定した角度ずつ回転
tTool.constrainRotationAngle = 10;
tTool.maxScaleX = 2; // scaleXの最大値
tTool.maxScaleY = 2; // scaleYの最大値
他にもよく分からないプロパティがいくつかあったのでいろいろできそう。
あとコントロールポイントの見た目もカスタマイズできるっぽい。

サンプル
このコンテンツには最新のFlashPlayerが必要です
いちおうサンプルのソース全文
package
{    
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    import com.senocular.display.TransformTool;
    
    [SWF(width="500", height="400", frameRate="30", backgroundColor="0xffffff")]    
    public class TransformTest01 extends Sprite
    {
        
        [Embed(source='photo.jpg')] private var Photo:Class;
        
        public function TransformTest01()
        {

            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;            

            init();
        }

        private function init():void
        {
            var container:Sprite = new Sprite();
            var photo:Bitmap = new Photo() as Bitmap;
            container.addChild(photo);
            addChild(container);

            var tTool:TransformTool = new TransformTool();
            addChild(tTool);

            tTool.target = container;

            tTool.registration = new Point(container.width/2, container.height/2); // 中心点            
            //tTool.controlSize = 30; コントロールポイントの大きさ
            //tTool.moveEnabled = false; // 移動できるかどうか
            //tTool.registrationEnabled = false; // 中心点の表示
            //tTool.rotationEnabled = false; // 回転できるかどうか
            //tTool.scaleEnabled = false; // 拡大縮小できるか
            //tTool.skewEnabled = false; // 菱形に変形できるかどうか
            //tTool.outlineEnabled = false; // 枠をの表示
            //tTool.cursorsEnabled = false; // カーソル変更するかどうか
            //tTool.constrainScale = true; // 比率を保つかどうか
            //tTool.constrainRotation = true; //constrainRotationで設定した角度ずつ回転
            //tTool.constrainRotationAngle = 10;
            //tTool.maxScaleX = 2; // scaleXの最大値
            //tTool.maxScaleY = 2; // scaleYの最大値
        }
    }
}

2008年11月18日

開いてるすべてのファイルの1フレーム目にASを追加するJSFL

メモメモ
for (doc in fl.documents) {
  var dom = fl.documents[doc]
  var tl = dom.getTimeline();
  var as = tl.layers[0].frames[0].actionScript
  as = "stop();\n" + as;
  tl.layers[0].frames[0].actionScript = as;
}

2008年12月05日

Flash CS3ヘルプファイルの場所

メモ
Macだけど

file:///Library/Application Support/Adobe/Flash CS3/ja/Configuration/HelpPanel/Help/

Flashのヘルプで見るのはしんどすぎるので、直接ブラウザで開いてみた方がいいね。
特に外部のエディタの場合は、Flashからフォーカス外すとヘルプのウィンドウ消えるし。


CS4のAS3リファレンス、こっからzipのアーカイブダウンロードできるみたいだけど、日本語版のZIPアーカイブどこ?
http://help.adobe.com/support/documentation/en/flash/10/ActionScript3LangRef.zip

2008年12月18日

Wonderflすごいよ!

Wonderfl Build Flash Online
http://wonderfl.kayac.com/

これすごいですよ。
ブラウザにActionScript書くと自動的にコンパイルされて、出力されたswfが自動で表示されちゃいます!
FlexSDKがなくてもAS3を簡単に試せる!

さらに楽しい機能がForkです。
人のソースコードをコピーして自分で編集していろいろ楽しめちゃいます。勉強の為に人のソースをちょっとずつ変えてみたり、こうしたら面白いかなーと思ったことをその場でやってみたりできちゃいます。

私もいくつか投稿してみました。
こんなのとか
http://wonderfl.kayac.com/code/57b6cd7eaee06e66f57c28edfa5272e90550d020

そしたらminonさんがForkしてくれました。
http://wonderfl.kayac.com/code/a633dccd8127924be447dbf2f8b626092b0d1427
元のよりおもしろくなってる!

さらにForkしてみた
http://wonderfl.kayac.com/code/73fb77583665dd6dc4da09f3769595aba6d6d83b

こういった形でForkをされ、自分の作品が変化していくのも楽しめそうです!

海外でも取り上げられてるみたいで
Mr.doob's blog | Wonderfl: coding + compiling Actionscript inside the browser
http://mrdoob.com/blog/post/617/

These Japanese are crazy...

クレイジーw

わんだふるすぎるよ!

2008年12月22日

Progression 3.1.0 をリリース!!!

CS4に対応したProgressionがリリースされました!
めでたい!
niumさんおつかれさまです!!!

Progression™ >> Progression 3.1.0
http://progression.jp/ja/download/3.1.0/

注文したCS4が届きません><
Amazonさんがんばって!

2009年01月08日

WonderflするときはIt's All Text!を使おう

Wonderflするときはだいたい、自分の環境で作ったコードを貼付けて投稿してるわけですが、直接ゴリゴリできたほうが楽かなとおもって、Firefoxのアドオン、It's All Text!を試してみました。

It's All Text! :: Firefox Add-ons
https://addons.mozilla.org/ja/firefox/addon/4125

このアドオンは、テキストフィールドを任意のエディタで編集できて、保存時にテキストフィールドを更新してくれる超便利ツールです。

保存時にテキストフィールドを更新してくれるので、保存するとソースがコンパイルされてswfがプレビューできちゃいます。 これでお気に入りのエディタでわんだふれちゃいますよ!!

エディタを設定する部分で、Macの場合ひと手間必要です。 どうも.appを指定してもうまく動きません。その場合.shを経由して設定すればOKです。

1, 適当な場所に「iat.sh」というファイルを作ります。
2, 以下のようにappを指定します。例はTextMate.app
#! /bin/sh  
open -a /Applications/TextMate.app "$@"
3, iat.shに実行権限を与えます。ターミナルで作成したファイルのディレクトリまで移動して以下のコマンドを実行。
$ chmod +x iat.sh 
4, iat.shをIt's All Textのエディタに設定。

こんな感じでいけると思います。

ここ数日間全然Wonderflしてないので、この環境でやってみよう。

2009年01月19日

SWFのメモリ使用量とかFPSをグラフ表示してくれるSWF Profiler

こちらで紹介されてて便利そうなのでちょっと試してみた

TweensyとSWF Profiler | relishable blog
http://blog.relishable.jp/2009/01/tweensy-and-swfprofiler/

右クリックで出てくる「Show Profiler」を選択するとProfilerが表示されます。

このコンテンツには最新のFlashPlayerが必要です

こちらからダウンロードできます。
AS3 SWF Profiler ? Lost In Actionscript - Shane McCartney
http://www.lostinactionscript.com/blog/index.php/2008/10/06/as3-swf-profiler/

使い方は
SWFProfiler.init(stage, this);
とするだけ。
一つ目の引数はstageの参照で、二つ目はコンテキストメニューの対象です.

ぼーっと見てるとがベージコレクションされてるの分かりますね。
ステージクリックでSystem.gc()を実行するようにしてあるので、そちらでも確認できると思います。System.gc()ってFlashPlayer10から通常版のプレイヤーでも実行されるようになったんだよね。

ちなみにSWFProfilerにもgcメソッドがあるんだけど、これはSystem.gc()を呼び出すのではなく、LocalConnectionを2回呼び出して強制的にgcするやつが実装されてました。

こんな感じのやつ
    public static function gc() : void {
        try {
            new LocalConnection().connect('foo');
            new LocalConnection().connect('foo');
        } catch (e : Error) {
        }
    }


デバッグ中には結構便利だと思うので、使ってみようかと思います。
リリース時にはちゃんと消しましょう。

似たようなライブラリでstatsというのもあります。
http://code.google.com/p/mrdoob/wiki/stats

2009年02月27日

FlashLite1.1でMovieClipの存在をチェック

ここ2週間くらいFlashLite1.1やってるんですが、ちょびっとはまったのでメモ。

FlashLite1.1では、特定のパスにあるMovieClipが存在するかどうかをチェックする方法がありません。 (私が知らないだけであったりしたらごめんなさい。そんなときはツッコミおねがいします)

AS2やAS3だったら
if(this.hoge) {
     trace("あるよー");
}

みたいな感じでチェックできますが、FlashLite1.1だとうまくいきません。


例えばこんな感じだとまずパブリッシュできません。
if (/hoge) {
     trace("あるよー");
}

こんな感じにしてもだめ
if(eval("/hoge") {
     trace("あるよー");
}
そこでこんな感じにしてみました。
/hoge:a = 1;
if (/hoge:a ne "" {
     trace("あるよー");
}

チェックしたいMovieClipに対して変数を入れてみて、その後取り出せたらそのMovieClipは存在するみたいな。

めんどくせーw

Flashは4のころからやっていたので、FlashLite1.1はすごく懐かしく感じます。配列やオブジェクトや関数がなくっても意外とつくれるもんだなーと変に感心してます。

最近はActionScript自体高度になってきているので、技術ばかりを追いかけがちです。でも工夫をすればgotoAndPlayとちょっとしたスクリプトだけでゲームとか作れちゃうわけなので、技術勉強するよりも面白い物考えて、プログラムとかグチャグチャでいいから,、とりあえず作ってみるというのもいいんじゃないかなと思いました。

wonderflで質問しよう

wonderflの開発をしてるmaaashさんがこんなことつぶやいてました

[wonderfl]質問があればコードを書いてquestionタグをつけるというアイディア http://wonderfl.kayac.com/tag/question

http://twitter.com/maaash/status/1256391436

http://wonderfl.kayac.com/tag/question

これすげーいいアイディア!!!

なぜかうまくいかないコードをwonderflに投稿してquestionタグをつけておくと、知らぬ間にだれかがforkしてうまい方法を教えてくれるみたいな感じかな。

wonderflに対して敷居の高さを感じていた人も、参加できるような仕組みなんじゃないでしょうかこれ。

対決的なことできないかな。お題のプログラムがあって、それを誰が一番最適化(速く)できるかみたいない。

まだまだwonderflにはいろいろな可能性を感じますねー。


選択中のオブジェクトの座標の小数点を丸めるJSFL

こんな感じかな。
var doc = fl.getDocumentDOM();
for (var i in doc.selection) {
    doc.selection[i].x = Math.round(doc.selection[i].x);
    doc.selection[i].y = Math.round(doc.selection[i].y);
}

2009年03月05日

選択しているオブジェクトのインタンス名から宣言を生成するJSFL

var doc = fl.getDocumentDOM();
var n;
var l;
for (var i in doc.selection) {
    l = doc.selection[i];
    n = doc.selection[i].libraryItem.name.split("/");
    //l.name = n[n.length - 1].toLowerCase(); // これはライブラリの名前からインスタンス名つけるやつ
    fl.trace("public var " + l.name + ":Sprite;");
}

output
public var hoge:Sprite;
public var fuga:Sprite;
public var uge:Sprite;
public var moge:Sprite;

型とかも動的に出せるかもね。

2009年03月09日

インスタンス名を上から連番でつけるJSFL

選択しているオブジェクトのy座標順にインスタンス名をつけていく。

var doc = fl.getDocumentDOM();
var a = [];
for (var i in doc.selection) {
    a.push(doc.selection[i]);
}
a.sort(function(a, b) { return a.y - b.y});
for (var i=0; i<a.length; i++)
{
    a[i].name = "hoge_" + (i+1);
}

2009年04月10日

Extension Managerふっかーーーつ!

ありがとうahchang!

立ち上げた瞬間に落ちてたExtension Managerが復活しました!


散蓮華 ? Blog Archive ? Extension Manager なおったああああ!!!!!
http://tirirenge.undo.jp/?p=1658

どうやらSafari 4 betaが問題みたいで、アンインストールしたらさくっとなおったよ!

ちなみにSafari 4のアンインストールは、ここからダウンロードできるインストールパッケージに入ってるアンインストーラーでできます。

2009年06月08日

PaperVision3D のログ(trace)の消し方

PaperVision3Dを使うと大量に知らないtraceが出力されてて、「traceアクションを省略」にチェックいれてもtrace消えなかったので、どうやったら消えるんかなーと調べてたらこんな感じで消せるみたい。

Papervision3D.PAPERLOGGER.unregisterLogger(Papervision3D.PAPERLOGGER.traceLogger);

[Papervision3D] Trace Statments
http://osflash.org/pipermail/papervision3d_osflash.org/2008-October/026587.html

Papervision3D 2.1alpha でColladaのアニメーションがパワーアップ

Papervision3D 2.0つかってアニメーションを含んだCollada(.dae)を読み込んでゴニョゴニョしてたんだけど、結構おもいんですよね。

ファイルの読み込み自体は普通なんだけど、その後アニメーションを解析してるような感じで「FileLoadEvent.ANIMATIONS_COMPLETE」ってイベントが発生するまで、アニメーションが再生できません。
この解析時間が結構長くてテストしてるファイルでは20秒くらいかかってた。

これはヤバいなーと思って試しに、Papervision3Dをtrunkの最新にしてみたら、いきなり速くなった!20秒が2秒くらいにwww

Papervision3D 2.1 - alpha | Floorplanner Tech Blog
http://techblog.floorplanner.com/2009/05/26/papervision3d-21-alpha/

どうやら2.1 alphaとやらが出ててDAEクラスに結構手が入ってるみたい。
アニメーションも切り分けて使えるようになってたりと便利そう。
でもalphaか。。。

2009年06月13日

ActionScript 3.0 でZIPの圧縮と解凍

でっかめのテキストデータを扱いたかったので調べてみた。テキストデータってzipにすると結構圧縮されるんよね。

ライブラリはこちらを使ってみた。
AS3 Zip Library Release ? nochump.com
http://nochump.com/blog/?p=15

圧縮は結構速いけど、解凍は結構時間かかる感じ。5MBくらいのテキストデータで、圧縮は1秒くらいだけど解凍に3秒以上かかった。(時間に関しては環境に依存すると思います)

今回はテキストの圧縮、解凍だけど、基本的にはどんなファイルでも圧縮解凍できるはず。

[追記 2009/6/18]
書き忘れてたけど、このzipライブラリは非同期で走らないので、3秒くらい解凍にかかるってことは3秒間いっさいの処理が止まるってこと。なのあまり実用的でないんでないかという結論に達しそうな今日この頃。
非同期なやつが欲しいです。

圧縮
var fileName:String = "foge.txt"; // 圧縮するファイルの名前
var fileData:ByteArray = new ByteArray(); // 圧縮対象のByteArray
fileData.writeUTF("圧縮したいテキストデータを"); // 今回はテキスト
var zipOut:ZipOutput = new ZipOutput();
var ze:ZipEntry = new ZipEntry(fileName);
zipOut.putNextEntry(ze);
zipOut.write(fileData);
zipOut.closeEntry();
zipOut.finish();
var zipData:ByteArray = zipOut.byteArray; // 圧縮したzipのByteArray

// ダウンロード
stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
    var file:FileReference = new FileReference();
    file.save(zipData, "hoge.zip");
});

解凍
var data:ByteArray = _loader.data; // _loader.dataはURLLoaderでとってきたzipデータ
var zip:ZipFile = new ZipFile(data);

// zipの中には複数のファイルがあるかもしれん
for (var i:int = 0; i<zip.entries.length; i++)
{
    var entry:ZipEntry = zip.entries[i];
    var zd:ByteArray = zip.getInput(entry);
    trace(zd.toString());
}

2009年07月07日

七夕なので星空つくってみた

久しぶりにわんだふるー

PhotoShopのチュートリアル参考にしました。
A Slick Supernatural Text Effect - Psdtuts+
http://psd.tutsplus.com/text-effects-tutorials/a-slick-supernatural-text-effect/

2009年07月31日

AS3でデータ圧縮するならZipのライブラリよりByteArray.compress

Flashで大きめのデータを扱うときに、圧縮したいことなんかがあるんだけど、とりあえず思いつくのがZIPのライブラリ。以前ちょっと紹介したりしました。

ActionScript 3.0 でZIPの圧縮と解凍 (Unknown Quality)
http://un-q.net/2009/06/actionscript_30_zip_as3.html

上のエントリーにも書いたんだけど、解凍が結構時間かかる。そんなときはByteArrayクラスのcompressメソッドがおすすめ。

こんな風に使えます。
var data:ByteArray = new ByteArray();
data.writeUTF("hogehogehoegho.....");
data.compress() // 圧縮
data.uncompress() // 解凍

たとえばcollada形式の3Dモデルデータを読み込むときなんかに使えます。colladaはXML形式のデータなので圧縮すると結構容量が減ります。まずcolladaのXMLをFlashに読み込みByteArrayにしてcompressして、それをファイルとして保存してしまいます。コンテンツではその保存したデータを読み込んでuncompressして使う感じです。

こんな感じで読み込み用のデータを作ります。
// URLLoaderでcolladaのデータを読み込む
// ここはURLLoaderのEvent.COMPLETEハンドラ内
// _loaderがURLLoader
var b:ByteArray = new ByteArray();
b.writeUTFBytes(_loader.data); // _loader.dataにcolladaのXMLデータ
b.compress();
stage.addEventListener(MouseEvent.CLICK, function(e:MouseEvent):void {
    var file:FileReference = new FileReference();
    file.save(b, "filename.dat");
});

ちなみに7MBほどのデータを処理したときの結果。解凍の速度が圧倒的に違います。
※ZIPのライブラリはnochump.util.zipの物を使ってます。
start zip compress
end zip compress 1877ms

start zip uncompress
end zip uncompress 3736ms

start ByteArray compress
end ByteArray compress 1178ms

start ByteArray uncompress
end ByteArray uncompress 36ms
画像のデータとかはあまり圧縮できないですね。ZIPでもそれは同じだと思います。あと圧縮率はテキストの場合ZIPでもByteArrayのcompressでも大きな差はありませんでした。

[追記]
ZIP圧縮と圧縮率が変わらないのは、FlashPlayerでのcompressはzlibのアルゴリズムを使ってるからです。AIRだと圧縮のアルゴリズムを変更することが出来ます。詳しくはドキュメント読んでください。
ByteArray - ActionScript 3.0 言語およびコンポーネントリファレンス

2009年10月14日

Flash制作に欠かせない3つのツール・ll_koba_ll編

なんかKAYACさんの_level0で流行ってたので便乗してみる。


1.Charles


ch.png

Charles Web Debugging Proxy ? HTTP Monitor / HTTP Proxy / HTTPS & SSL Proxy / Reverse Proxy
http://www.charlesproxy.com/

これが無いと本当に仕事になりません。サーバーサイドと連携するFlashを作成することが多いのですが、そういったとき問題になるのがバグの原因がFlash側のなのか、サーバー側のなのか判断がつかないときです。こういった状況を確認する為に、Flashからどんなデータが送信されて、サーバーからどんなデータが返ってきたかが重要になります。そんなときCharlesを使えば通信の内容を簡単に確認することができます。JSONやXMLもツリー形式にしてくれたりと色々と便利です。

もう一つ便利なのが、特定のサーバーにあるファイルを、ローカルの物と差し替える機能です。サーバーサイドで動作するようなphpなどのファイルは無理ですが、swfやjsなどはサーバーにアップロードすること無く、確認が可能です。詳しくはこちらの記事に書かれています。


2.rascut

ActionScript やるなら入れとけ。rascut 導入と使い方。 - てっく煮ブログ
http://d.hatena.ne.jp/nitoyon/20070914/how_to_install_rascut

最終的な制作にはFlashCS4などのIDEを利用していますが、ちょっとした実験のコードなどはFlexSDKをつかっています。そんな時に便利なのがrasucut。これは、ファイルを保存すると自動的にコンパイルを実行してくれて、しかもブラウザを自動で更新してくれます。エディタで編集して保存するだけで、コンパイルから確認までが素早く行えるため、実験的なコードなどを作るのが非常に楽になります。内部的にfcshを使ってくれているので、コンパイルも速いです。


3.tail

traceのログをターミナルに表示する為にtailしてます。地味ですが、これも無いと困りますね。
Macだとこんな感じ。

tail -f Library/Preferences/Macromedia/Flash\ Player/Logs/flashlog.txt 

rascutつかうときは、ターミナルを分割して上をrascut、下をtailにしてます。


こんな感じで3つ並べてみましたが、Charlesはマジで便利なので使ってみてください。有償のソフトですがお金払う価値ありです。

Flash制作に欠かせない3つのツールのまとめ

3つのツールのやつまとめてみた。捕捉できていない物もあると思うので、足りないのがあったら教えてください。
まずはKAYAC方たちから。

Flash制作に欠かせない3つのツール・松村編 | エントリー | _level0.KAYAC
Flash制作に欠かせない3つのツール ・松山編 | エントリー | _level0.KAYAC
  • jsfl
  • Adobe Bridge CS4
  • デスク周り

Flash制作に欠かせない3つのツール・嶋田編 | エントリー | _level0.KAYAC
Flash制作に欠かせない3つのツール・日高編 | エントリー | _level0.KAYAC
Flash制作に欠かせない3つのツール・小林編 | エントリー | _level0.KAYAC
Flash制作に欠かせない3つのツール 原編 | エントリー | _level0.KAYAC
  • A5方眼ノート
  • iPhone
  • 外付けキーボード

Flash制作に欠かせない3つのツール・安藤編 | エントリー | _level0.KAYAC
Flash制作に欠かせない3つのツール・中村編 | エントリー | _level0.KAYAC
Flash制作に欠かせない3つのツール・島田(コウショウ)編 | エントリー | _level0.KAYAC
Flash制作に欠かせない3つのツール・來島編 | エントリー | _level0.KAYAC
Flash制作に欠かせない3つのツール・道家編 | エントリー | _level0.KAYAC
  • PSDファイルのレイヤーをすべてPNGで書き出すJSX
  • シンボル名からフォルダわけするJSFL
  • インスタンスの座標を整数にするJSFL

Flash制作に欠かせない3つのツール・村井編 | エントリー | _level0.KAYAC
Flash制作に欠かせない3つのツール・佐藤編 | エントリー | _level0.KAYAC
  • Colors
  • Free
  • RulerDropJPG

KAYACさんここまで --------------------

Flash制作に欠かせない3つのツール・独学ActionScript編 - 独学ActionScript
Flash制作に欠かせない3つのツール・和泉編 ? Fountain
Flash制作に欠かせない3つのツール:便乗しました - Is It So Easy?
flair4 blog - Flash制作に欠かせない3つのツール・flair4jp編
Flash制作に欠かせない3つのツール・emzah編 ? emzah Blog
WhirlPowerBlog | Flash制作に欠かせない3つのツール・WhirlPower編
  • ペンタブレット
  • プログラマブルキーボード
  • 紙とえんぴつ

Flash制作に欠かせない3つの設定・clockmaker編 | ClockMaker Blog
  • キーボードのリピート速度を最速に
  • OSの挙動をキビキビに
  • パソコンの周りは常に整理整頓

Flash制作に欠かせない3つのツール・FlexBuilderプラグイン編 ? ひよっこ。
Flash制作に欠かせない3つのツール@BMA_JAPAN編 - BillionMilesAway Blog
  • Twitter
  • デスクと椅子
  • ビタラガ

BOONDOCK RADIO | Flash制作に欠かせない3つのツール・nbhd編
馬鹿全 - Flash制作に欠かせない 3つのツール・馬鹿全編
  • FlashDevelop
  • マルチディスプレイ
  • アーロンチェア

xingxx - Flash制作に欠かせない3つのツール kaede編
  • 国語
  • 数学
  • 英語

planet-ape|blog - Flash制作に欠かせない3つのツール:便乗
Flash制作に欠かせない3つのツール・ll_koba_ll編 (Unknown Quality)
  • Charles
  • rascut
  • tail

2009年12月17日

AIRで画像のURLを使わずに画像を保存 HTMLLoaderつかうよ

たまには技術的なこと書かないといかんですね。というわけでちょろっとAIRを触っています。 画像のURLを使わずにその画像を保存する方法が無いもんかなと考えて、HTML読み込んで画像の部分だけBitmapDataにdrawしたらいいやん、ということでやってみました。


HTMLLoaderで取得したHTMLから保存したい画像をDOMで取得して、画像の位置と大きさでクリップしてBitmapDataにdrawします。


var h:HTMLLoader = new HTMLLoader();
h.load(new URLRequest("http://un-q.net")); // HTMLを読み込む
h.width = 800;
h.height = 1500;
h.visible = true;

h.addEventListener(Event.COMPLETE, function(e:Event):void {
    var img:Object = h.window.document.images;    
    var mtx:Matrix = new Matrix();
    // 仮にimg[0]が取得したい画像だとして
    mtx.translate(-img[0].x, -img[0].y);
    var rect:Rectangle = new Rectangle(0, 0, img[0].width, img[0].height);
    b.draw(h, mtx, null, null, rect);
    // あとはBitmapDataをjpgかなんかにエンコードして保存したらええと思います。
});

別にhtmlから画像のURL抜き出して、Loaderで読み込めばいいんですが、、再度画像を読みに行かなくて済むので、こっちのほうがサーバーに優しいですね。あまり使い道ないと思うけど。

2010年01月18日

AMFPHP1.9ベータがPHP5.3で動かない時の対応策

AMFPHPってのは、AMF(ActionScript Message Format)をPHPで扱うためのものなんですが、PHP5.3で動かそうとしたら動かなかったのでメモ。

eregi_replaceってのがPHP5.3から非推奨になってるのが原因とのこと。
なので amfphp/core/shared/util/MethodTable.phpの505行目の

$comment = eregi_replace("\n[ \t]+", "\n", trim($comment));
$comment = str_replace("\n", "\\n", trim($comment));
$comment = eregi_replace("[\t ]+", " ", trim($comment));

ってのを
$comment = preg_replace("`\n[ \t]+`U", "\n", trim($comment));
$comment = str_replace("\n", "\\n", trim($comment));
$comment = preg_replace("`[\t ]+`U", " ",trim($comment));
と変更すると動きました。

参考
もぐめぽろぐ PHP5.3.0でAMFPHPを実行できない
http://mogmet.blog20.fc2.com/blog-entry-21.html


それとは別にdateがエラーを出してたので、
date_default_timezone_set('Asia/Tokyo');
ってのをgateway.phpに追加してます。
これに関しては今のところよく調べてないです。


2010年02月10日

表示オブジェクトからgetQualifiedClassName使って、クラス名取得

すでにaddChildしてるオブジェクトのクラス名がわからないけど、もう一個newしたいとき、こんな感じでいける。
var a = getChildAt(0); // 参照があればなんでもおk

//どっちでもおk
//var className:String = describeType(a).@name;
var className:String = getQualifiedClassName(a);

var c:Class = Class(getDefinitionByName(className)); // これはクラスそのものなので、、これをaddChildしてもだめ。
addChild(new c());

2010年02月14日

AIR2.0 Bata 2 でNativeProcessつかってみる。Flash CS4つかって。

AIR2.0 Bata 2 でNativeProcessを試してみます。Mac環境でやってるので、Windowsの人は適当に読み替えてください。
とりあえずFlash CS4でAIR2.0 Bata 2が利用できるに設定

以下を参考にしました。

Adobe AIR 2 ベータ版公開 - akihiro kamijo
http://blogs.adobe.com/akamijo/archives/2009/11/adobe_air_2_3.html

Bata2は以下よりダウンロード
Adobe Labs - Downloads: Adobe AIR 2 Beta 2
http://labs.adobe.com/downloads/air2.html



環境ができたら、CS4でAIRのプロジェクトを作ります。
今回はpingの結果をtraceで表示させてみます。
pingコマンドはターミナルで実行するとこんな感じになります。
$ ping google.com
PING google.com (66.249.89.147): 56 data bytes
64 bytes from 66.249.89.147: icmp_seq=0 ttl=51 time=10.121 ms
64 bytes from 66.249.89.147: icmp_seq=1 ttl=51 time=11.729 ms
64 bytes from 66.249.89.147: icmp_seq=2 ttl=51 time=11.633 ms
64 bytes from 66.249.89.147: icmp_seq=3 ttl=51 time=9.520 ms


まずはドキュメントクラスをこんな感じで作ります。
package 
{
    import flash.desktop.*;
    import flash.filesystem.*;
    import flash.events.*;
    import flash.display.Sprite;

    // pingをairから実行して、結果をtraceに表示してみる
    public class NPSample extends Sprite 
    {
        private var _process:NativeProcess;

        public function NPSample()
        {
            addEventListener(Event.ADDED_TO_STAGE, _init);
        }

        private function _init(e:Event):void
        {
            removeEventListener(Event.ADDED_TO_STAGE, _init);
            stage.align = "LT";
            stage.scaleMode = "noScale";

            var info = new NativeProcessStartupInfo();
            // 実行するプログラムを指定 相対パスの場合、flaのあるフォルダからのパス
            var file:File = File.applicationDirectory.resolvePath("bin/ping.sh");
            info.executable = file;

            // 実行するプログラムに渡す引数
            var args:Vector.<String> = new Vector.<String>();
            args.push("google.com");
            info.arguments = args;
            
            _process = new NativeProcess();
            _process.addEventListener(ProgressEvent.STANDARD_OUTPUT_DATA, outputHandler);
            _process.addEventListener(ProgressEvent.STANDARD_INPUT_PROGRESS, progressHandler);
            _process.start(info);

        }

        private function outputHandler(e:ProgressEvent):void 
        {
            // pingの結果を受け取る
            trace(_process.standardOutput.readUTFBytes(_process.standardOutput.bytesAvailable));
        }

        private function progressHandler(e:ProgressEvent):void 
        {
            trace(e);
        }
    }
}

flaのあるフォルダにbinというフォルダを作ってping.shというファイルを以下の内容で作成します。Windowsだと.batファイルとかでいけるんかな。.batはダメみたいです。
#!/bin/sh
ping "$@" 
これでコンパイルするとpingの実行結果がtraceに出力されます。
こんな感じ
PING google.com (66.249.89.147): 56 data bytes
64 bytes from 66.249.89.147: icmp_seq=0 ttl=51 time=10.121 ms
64 bytes from 66.249.89.147: icmp_seq=1 ttl=51 time=11.729 ms
64 bytes from 66.249.89.147: icmp_seq=2 ttl=51 time=11.633 ms
NativeProcessを使うとOSの機能を使ったAIRアプリが作れるので、いままでAIRでは実現が難しかったアプリもつくれそうですね。

--
追記 2010.02.16
application.xml を書き換えないと動かないってのを書き忘れてました。
詳しくはこちら。
電卓を起動する AIR アプリを作ってみた | tanablog
http://blog.kaihatsubu.com/archives/001676.html
---

2010年02月24日

SubversionのProxy設定

めも

~/.subversion/server
[groups]
hoge = svn.example.com
[hoge]
http-proxy-host:proxy.example.local
http-proxy-port:1111

2010年03月02日

テキストファイルのEmbed

memo
public class TextEmbedTest extends Sprite 
{
    [Embed(source="hoge.txt", mimeType="application/octet-stream")]
    private var hoge:Class;

    public function TextEmbedTest()
    {
        var h:String = new hoge();
        trace(h);        
    }
}

2010年11月10日

AS2でAS3のgetDefinitionByNameつかったクラス生成っぽいもの

さいきんはFlashLite2をしこしこやっておりまして、AS2ゴリゴリ書いてます。

AS3だと文字列からクラスを生成するときにgetDefinitionByNameなんかを使ったりするわけですが、AS2の場合はevalをつかったりします。

var classRef = eval("HogeClass");
var hoge = new classRef();

ただ、この場合HogeClassクラスがswfに含まれてないとだめなので、適当なところに
HogeClass;

としておく必要があります。

2010年11月25日

AS2の_globalには。。。

クラスがパッケージの形のオブジェクトで入っている。

たとえば以下のようなクラスを使っているとすると。
・Main
・buttons.HogeButton

_globalのなかにMainとbuttonsというObjectがあり、buttonsのなかにはHogeButtonがはいってます。

for (var v in _global) {
    trace(v  + " : " + _global[v]);
}
結果
Main : [object Object]
buttons : [object Object]
ここで例えば以下のようなコードを書いてしまうと、HogeButtonがインスタンス化できなくなります。
_global.buttons = "button";
var b = new HogeButton(); // <- インスタンスできない。HogeButton自体がundefinedに

ちなみに_global.MovieClipとか_global.Stringとかもはいってますね。
_globalなんて使うなよって話ですが、はまったので。

About development

ブログ「Unknown Quality」のカテゴリ「development」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

前のカテゴリはbooksです。

次のカテゴリはeventです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。