« 2007年11月 | メイン | 2008年01月 »

2007年12月 アーカイブ

2007年12月03日

ちょい絶技巧発表会やってきた

先週金曜にやりました。

場所はapplepleさんにお借りしました。
ありがとーございます。

私の発表はカメラをユーザーインタフェースとして利用できないかなーというような感じのことをやりました。

カメラでレース
http://labs.un-q.net/choizetsu/01/cameraRaceDemo.html
Screenshot_4.png


以前WCANで発表したネタなのですが、カメラで読み込んだ映像を左右半分に分けて動体検知して、たくさん動くとキャラクターがたくさん走る感じ。絵はbigchuに書いてもらいました。

動体検知は以下と同じ方法にしてあります。
ActionScript3.0で動体検知 01 (Unknown Quality)
http://un-q.net/2007/08/actionscript30_01.html

ポイントは上のthresholdの戻り値が変更されたピクセルの数がかってくるので、それをパラメーターとしてキャラクターを走らせています。


もうひとつは作りかけの物なんだけど、カメラで特定の色を検知させてその部分をマウスカーソルとして扱ったら、マイノリティーリポートっぽくなるんじゃねってヤツです。

まだうまく動いてないのでとりあえず画像。
Screenshot_3.pngScreenshot_1.png


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
とのこと。

~/.subvertion/configに
[tunnnels]
ssh_hoge = ssh -p 8888
して
svn co svn +ssh_hoge://hostname/svn/hogehoge
でいける。
キーを切り替えたい場合は
[tunnnels]
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;
}

ちょい絶のやつソース公開

コメントもらった http://un-q.net/2007/12/post_20.html#comment-13250
あと、すごくあつかましいと思うのですが、もし支障がないようでしたらよろしければソースを見せていただけないでしょうか? 初対面(?)なのにこんな事聞いていいのか迷ったですが、ほんとに「もしよければ」でいいので、よければ勉強させてください、 よろしくお願いします。

ということでしたので、まだ作ってる途中でぐちゃぐちゃだけど公開しておきます。
ソースは途中でもいいから公開した方がいいよいいよーって誰かが言ってた気もするし。
だれか添削してくださいな

ActionScript3.0 ColorTracking UI 赤色でをカーソルとして認識
http://labs.un-q.net/as3/camera/colorTracking/03/
Screenshot_3.png
package {

    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;    
    import flash.media.Camera;
    import flash.media.Video;
    import net.un_q.utils.ColorUtil;
    
    public class ColorTracking03 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 drawbmd:BitmapData;
        
        private var mt:Matrix;
        private var mirrorMt:Matrix;
        private var pt:Point;
        private var rect:Rectangle;
        private var ct:ColorTransform;

        private var w:int;
        private var h:int;

        private var drawsp:Sprite;
        private var g:Graphics;

        private var nowx:int;
        private var nowy:int;

        private var penFlag:Boolean = false;
        
        public function ColorTracking03() {
            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;
            }

            w = camera.width*2;
            h = camera.height*2;
       
            srcbd = new BitmapData(w, h ,false,0xff000000);
            viewbd = new BitmapData(w, h, false, 0xff000000);
            greenbd = new BitmapData(w, h);
            bluebd = new BitmapData(w, h);
            drawbmd = new BitmapData(w, h, true, 0x00ffffff);
            
            mirrorMt = new Matrix();
            mirrorMt.scale(-1, 1);
            mirrorMt.translate(w,0);            

            pt = new Point(0,0);
            rect = new Rectangle(0,0,w, h);
            ct = new ColorTransform();
            mt = new Matrix();

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

            // Sprite drawsp
            drawsp = new Sprite();
            addChild(drawsp);
            drawsp.y = h + 10;

            g = drawsp.graphics;
            g.beginFill(0xffffff);
            g.drawRect(0,0,w,h);
            g.endFill();
            
            g.lineStyle(2, 0x000000,1,false,"normal",CapsStyle.ROUND,JointStyle.ROUND,3);

            stage.addEventListener(KeyboardEvent.KEY_DOWN, function(e:KeyboardEvent):void {
                switch (e.keyCode) {
                case 67:
                    //c
                    g.beginFill(0xffffff);
                    g.drawRect(0,0,w,h);
                    g.endFill();
                    break;
                case 86:
                    g.lineStyle(2, ColorUtil.randomRGB(),1,false,"normal",CapsStyle.ROUND,JointStyle.ROUND,3);
                    break;
                }

                trace(e.keyCode);
            });
            
        }


        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();

            draw();
        }


        private function draw():void  {
            var r:Rectangle = viewbd.getColorBoundsRect(0xffffffff, 0xffffffff);
            if (r.x == 0 && r.y == 0) {
                g.moveTo(nowx,nowy);
                penFlag = false;
                return;
            } else {
            }

            if (!penFlag) g.moveTo(r.x, r.y);
            
            g.lineTo(r.x, r.y);
            penFlag = true;
            nowx = r.x;
            nowy = r.y;

        }
    }
}

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でつかってみる

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月13日

THE PROCESSING MATCH

PCの処理速度で戦えるみたい。
アイディアがおもしろいですね。
単純に負荷のかかる処理を実行してタイムを計ってそれをサーバーに保存、それらを比較してバトル。

でもこれってPlayerのバージョンとかブラウザによっても変わってくるんじゃ。。。
でもそれっぽいことが重要ですね、こういうのは。

インテル:パソコンの中ではこのくらいの変化は、もう常識
http://www.intel.co.jp/jp/personal/campaign/promotion/index.htm


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));
}
となります。

2007年12月19日

emoつくってみた

emo[エモ] - ブログを書いたら自分がわかった!
http://blog-emotion.com/emo/

2007年12月20日

MyMiniCity

ll_koba_ll - MyMiniCity
http://llkoball.myminicity.com/

つくった
URLに _ がはいらなくて悲しい><

これブログパーツみたいにはれたらいいのになぁ

無名関数をaddEventListenerした場合外部からremoveEventListenerするには・・・

: 無名関数の乱用注意 - 酒は血液、呑んだら献血
http://d.hatena.ne.jp/bigchu/20071220/1198149849

bigchuワールド全開なわけですが確かにどーすんだろ。

2007年12月21日

すごい Flash 2007

あなたの「すごい Flash 2007」を教えてほしい - てっく煮ブログ
http://d.hatena.ne.jp/nitoyon/20071221/flash2007

これはいいエントリー。
早速コメントしてきました。

みなさんもすごいflashをコメントしましょー

emoのつながり家系図

これすごくいい。
自分が貼ったブログパーツから登録した人が、家系図のように表示される。
おもしろいですねー

Screenshot_7.png

2007年12月25日

近況報告とマタタビのキャンペーン(神戸牛当たるよ!)


最近はこんな感じです。

さて、今日からまたマタタビでキャンペーンやります。
なんか書くと比較的高確率当たるような気がします。

神戸牛が食いたいですね。


ユクタビクルタビキャンペーン powered by マタタビ
http://matatavi.com/campaign/camp1221
bn_yukutabi_l.gif


ニヤリ発見フォトコンテスト powered by マタタビ
http://matatavi.com/campaign/camp_pict
bn_niyari_l.gif


期間中、新規登録された方の中から抽選で50名プレゼント
http://matatavi.com/info/news#20071225_04

About 2007年12月

2007年12月にブログ「Unknown Quality」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2007年11月です。

次のアーカイブは2008年01月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。