サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
2024年ランキング
kkanda.hatenadiary.org
h氏とメッセでの会話より h> よく、インテリ君が「サブタイプとサブクラスは違う概念だからね」というのを見かけるがweb上に違いを説明している文章はあんまないです kkanda> ないね kkanda> それ、俺も不思議に思って探したんだけどあんままとまって書いてるところないね h>今、探したけれど、日本語の解説文はないっぽい ということで、h氏が海外のソースに当たってみた。 見つかったのがocamlのメーリングリストの過去ログとA Theory of ObjectsのFAQ どちらも、同じようなことが書いてあるのだがTheoryOfObjectsの方が明確に書いてあるので、そちらを引用すると、 Subtyping is a relation between (object) types, having to do with keeping track of the messages th
最近仕事で忙殺されていて、趣味のプログラムを全然書いてなかったので久しぶりに書いてみました。 作ってみたのは、スライドショーに使えそうなモザイクエフェクトです。 モザイクは、画像の拡大縮小によって実現しています。 まず、画像を縮小コピーします。縮小コピーするとその縮小率に応じて元画像より画素が減ります。これを元の大きさに拡大すると減った分の画素が縮小した時に残った画素で埋められるためモザイク状の画像になります。 ソースコード 以下、コードです。Main.asがスライドショー本体で、MozaicEffect.asがモザイクエフェクトのコードです。 //Main.as package { import flash.display.*; import flash.geom.*; import flash.events.*; import flash.utils.*; import flash.u
AdvancedDataGridのデフォルト設定だと、ヘッダがイケテなくて困った人は多いと思います。 とくに、並び替え機能が不要なときにsorter領域の縦線が消したくなった人は多いと思います。 普通に考えると、sortableColumnsというプロパティをfalseに設定する、もしくはAdvancedDataGridColumnのsortableプロパティをfalseにすれば並び替えができなくなる代わりに縦線は消えるだろうと思います。しかし、この縦線は並び替えを無効にしても残ります。 では、どうすれば良いのか? ここでのやり取りを追ってみると、AdvancedDataGridのsortExpertModeプロパティを「true」にすれば良いらしいことがわかります。確かに、これを設定すると、 という感じで縦線が消えます。ちなみに、このプロパティをtrueにするとctrl(macではcom
WebサービスにアクセスするAIRアプリを作成していると、ユーザーの利便性を考慮してWebサービスのユーザー名とパスワードを保存しておきたいと思う時があります。 そうした時のために、AIRにはEncryptedLocalStoreクラスが用意されています。このクラスはOS固有のデータ保護APIを使用してデータを保護する仕組みを提供しています。 このクラスを通して保存されたデータは、他のユーザーやアプリケーションが解釈できないように暗号化して保存されます。具体的には128 ビットの AES-CBC暗号 が使われています。 AES暗号のような共通鍵暗号を使う場合、アプリケーションに固定の鍵を組み込んでおくような実装をしがちですが、そういった実装だとアプリケーションを解析すれば鍵を取得出来るため、アプリケーションが保存しているWebサービスのユーザー名とパスワードを回収するような悪意のあるプログ
Flash CS3でFlash8のように、_parentで親ムービークリップを参照し制御しようと試みたが、_parentはparentに名前が変更されていた。 このparentプロパティは、正確にはflash.display.DisplayObjectクラスのプロパティで、flash.display.DisplayObjectContainer型である。そのため、Flash8のときによく書いていた、次のようなコードはコンパイルエラーになる。 parent.nextFrame(); そのときに出力されるエラーは、こんな感じ。 1061: 未定義である可能性のあるメソッド nextFrame を、静的型 flash.display:DisplayObjectContainer の参照を使用して呼び出しました。この問題は、parentがDisplayObjectContainer型であり、クラス
カメラから取り込んだ画像を使うFlashを随所で見かけるようになりましたが、複数のカメラがインストールされている環境が考慮されていない場合が多く、サンプルを動かせないということがよくあります。 ユーザーに複数のカメラから使いたいものを選択させるための設定パネルを表示するためには、 Security.showSettings(SecurityPanel.CAMERA); var cam:Camera = Camera.getCamera(); if ( cam != null ) { vid.attachCamera(cam); } といった感じで、Camera.getCamera()を呼び出す前に一行追加するだけです。 ちなみに、この方法はマニュアルのCameraクラスのgetCamera()の使用方法にて解説されていますが記載されているコードに誤植があります。 System.showSe
id:nishiohirokazuさんの少し前のエントリー「PointとArrayで速度比較」の、 ActionScriptの配列はC的な配列じゃないからかも。逆にクラスのメンバ変数はすでに配列として確保されていそう。xとかも整数にマップされてそう。 という推測が正しいのかを調べてみました。 まずは私もプロパティへ定数を代入する式の実行速度を比較してみました。 以下は、評価対象の式の一覧になります。各式を10,000,000回ループで実行した時の実行時間を//の後ろに記載しておきます。 また、pがPoint型、aがArray型、oがObject型となります。 p.x = 1; //216ms (1) p["x"] =1; //1631ms (2) a[0] = 1; //567ms (3) a["0"] = 1; //2681ms (4) o.x = 1; //2028ms (5) o["
最近読んでいるSICPの理解度を確かめるために、AS3で遅延評価を実装してみました。 遅延評価を理解する前に、AS3の関数呼び出しが値呼び出しであることを理解しておく必要があります。 値呼び出しというのは、例えば、 function square(x) { return x * x; } function ret2() { trace('called ret2'); return 2; } square(ret2()); というコードがあった場合、最初にret2()が呼び出されてからsquare()の呼び出しが行われます。なので、実行結果は、 called ret2 となります。 仮にAS3が値呼び出しではなく、名前呼び出しであったとしたら、ret2()が評価される前にsquare()の評価がはじまり、途中で次のような状態になります。 return ret2() *ret2(); なので、
このGW中、ずっと計算機プログラムの構造と解釈(通称SICP)を読みふけっておりました。 この本はいわゆる計算機科学の入門書で、本の中に出てくるプログラムはLISPの方言であるschemeで書かれており、 慣れないと少し取っ付きづらい本です。 この本の2章に「図形言語」という節では、schemeを使って図形描画を行ってみるという部分があります。 私は普段Macbookにgaucheというschemeの処理系をインストールしてプログラムを書いています。 この「図形言語」のプログラムをgaucheで書くにはOpen GL拡張であるgl-gaucheをインストールする必要があります。 id:higeponさんのこのエントリーを参考にしながらやってみたところ、 インストールはうまく行きました。しかし、起動するとX関係のエラーが出て動きませんでした。 問題を解くためだけに環境をあれこれいじるのも不毛
前からずっと気になっていたParticle Systemの実装方式について調べました。 調査を進めてみると、SpriteをわずBitmapDataを使って描画をするという選択肢もあるということが分かり新鮮でした。 ということで、今回はBitmapDataを使ったParticleSystemの実装を解説します。 そもそもParticle Systemは、粒子(particle)の動きをシミュレーションし粒子の状態に基づいて画面描画するという動作を繰り返します。 この「動きのシミュレーション」と「画面描画」を分けるのが非常に重要で、調査前の私の理解ではこの境界が曖昧でした。 Spriteを使って描画するParticle Systemの実装は、たまに見かけるのであえて私はあえてBitmapDataに直接書き込む方式で実装してみました。 実装するにあたって、aM laboratoryのpartic
突然ですが3次ベジェ曲線だと制御点が4つもあるので、スクリプトで制御する際にコードから描画イメージが沸きづらくないですか? グラフィックソフトで普段からベジェ曲線に慣れている人であればそうでも無いのかもしれないですが。。。 というわけで制御に慣れるために、マウスに連動してベジェ曲線を描画するサンプルを作ってみました。 ベジェ曲線の描画は、id:nitoyonさんのところからcurveTo()を使った3次ベジェ曲線の実装を拝借しています。 今回の実装では、4つの制御点のうち始点と終点はマウス位置にしています。そうすることで鱗形の曲線が描かれます。 ほんとは4つ全部をバラバラに動かした方が制御に慣れるんでしょうが、僕のレベルでは4つを奇麗にまとめて動かす方法が思いつきませんでした。 それとベジェ曲線とは全然関係ないんですが、マウスの動きをリプレイするコードを実装してみました。 単純に、マウス位
GCを強制的に起動する方法について追記しました(4/8) fladdictさんのAS3でガベージコレクションを見張る画期的方法メモにて、 弱参照のDictionaryのオブジェクトキーを利用して、対象のオブジェクトがガベッジコレクションされたかどうかを見張ることができるんじゃね?? という面白そうなお題があがっていたので実装、検証を行ってみました。 検証のために実装したクラスGCWatcherには、次の二つの機能があります。 GCが起動した場合にGARBAGE_COLLECTイベントを発行する 監視したオブジェクトを監視リストに追加し、GCに回収された場合にCHANGEイベントを発行する このクラスを使うと、fladdictさんがエントリー中で書いていた、 onGarbageCollection イベントを発行できるし、DictionaryのキーをダンプすればGCされそこねたオブジェクトの
Flickrを検索して表示するViewerを作ってみました。 画像の取得には、Adobe Labsで作成されたas3flickrlibというライブラリを使っています。 このライブラリは、サンプルコードも付属しておらずあまり解説している記事もみかけないので試しに使ってみました。 また、Flickrへのアクセスはクロスサイトのデータアクセスとなるためcrossdomain.xmlを読み込みが必要となります。その方法についても説明します。 as3flickrlibとは as3flickrlibは、Adobe Labsで作成されたas3用のFlickr APIラッパーライブラリです。 このライブラリを使うとURLLoaderなどを使って直接APIを呼び出した場合と比べて、データの受け渡しが楽になるなどのメリットがあります。 今回サンプルとして取り上げるのは検索用APIのみです。アップロードAPIに
DisplacementMapFilterを使って波紋を表現する 今回も前回に引き続きDisplacementMapFilterを使ったエフェクトに挑戦してみました。今回は、Macのウィジェットを追加した時のエフェクトみたいな波紋を作ってみたいと思います。 少し分かりづらいのですが、上の画像はMacのウィジェットマネージャを起動してウィジェットを追加したときに背景が波紋で揺れるエフェクトが出た瞬間をキャプチャしたものです。 このような波紋を作るには、下記のような周期的かつ滑らかに変化する置き換えマップが必要になります。 しかし、PerlineNoiseでこのような画像を生成する方法を思いつかなかったので別なアプローチを試すことにしました。 波紋用の置き換えマップ生成法(その1) まずはじめに試したのは、単純にdrawCircle()関数で円を描きそれをBlurFilterでぼかすという方法
とある事情で受け取ったflaファイルに、次のようなactionscriptが記述されていました。 getURL('javascript:doSomething()'); getURL('./somewhere.html'); これをパブリッシュすると、2つ目のgetURL()の呼び出しだけが実行されるのが確認できます。 どうして、そのような挙動になるのか動作検証をしながら原因を究明していこうと思います。 そもそもgetURL()ってどういう関数なのか? まずはFlash CS3 ドキュメンテーションの説明を見てみましょう。 特定の URL からウィンドウにドキュメントをロードしたり、定義済みの URL に存在する別のアプリケーションに変数を渡したりします。 つまりこの関数を使うと、Flashが読込まれたwindowに別なURLのhtmlを読込むことなどができます。また、"javascrip
TextFieldの行間は、TextFormatオブジェクトのleadingプロパティで指定出来ます。フォントサイズを大きくした場合、文章の見栄えを整えるために行間をマイナスに指定することがたまにあります(フォントサイズを大きくすると境界枠とグリフの間の余白が目立つので)。 その際、TextFieldのautoSizeプロパティが"none"以外に設定されている場合は注意が必要です。 TextFieldの行間をマイナスに指定し、autoSizeプロパティをデフォルトの"none"以外に設定するとテキストの下端が切れてしまいます。 以下、確認用のコードです。 package { import flash.display.Sprite; import flash.text.TextField; import flash.text.TextFormat; import flash.text.Te
BitmapDataクラスのperlinNoise()メソッドの実行結果を確認するためのFlashを作成してみました。perlinNoise()メソッドは、ランダムな雲模様や縞模様を作成する際に使います。通常は、DisplacementMapFilterと組み合わせるなどして利用し、単体で利用することは少ないです。 BitmapData.perlinNoise()の動作確認 このサンプルでは、右側のコントロールで指定した値がPerlinNoise()に渡され左側のプレビュー領域に表示されます。 使い方1:雲模様を作る BaseX、BaseYの値を1以上に設定するとノイズは雲模様になります。 使い方2:縞模様を作る BaseXの値を0にし、BaseYを1以上に設定すると縦の縞模様になります。逆にBaseXを1以上にし、BaseYを0にすると横の縞模様となります。 サンプルファイルのダウンロー
DisplacementMapFilterの動作は理解しづらいので、パラメーターとエフェクトの関連を確認するためのツールを作ってみました。 DisplacementMapFilterとは何か? DisplacementMapFilter クラスは、指定された BitmapData オブジェクト (置き換えマップイメージと言います) のピクセル値を使用して、オブジェクトの置き換え (変位) を実行します。このフィルタを使用して、MovieClip、SimpleButton、TextField、Video オブジェクトなどの DisplayObject クラスから継承したオブジェクト、および BitmapData オブジェクトにワープ効果や斑点効果を適用できます。 ActionScript 3.0 コンポーネントリファレンスガイドの DisplacementMapFilterクラスの説明から抜
ISBN:9784756150325がらFlexSDKの使い方を学習していたところ、beta1の内容を元に記載されている箇所があり数時間嵌まった。。。 本に記載されている通りに実行すると、次のようなエラーが出る。 This application cannot be run.(Error: This application requires a version of the Adobe Integrated Runtime (AIR) which is no longer supported. Please contact the application author for updated version.) つまり、バージョンが古くてサポートしてないということなので、アプリケーション記述ファイル(本文中では、Test-app.xml)をAdobe Labs | Previews, pr
ActionScrip2.0以降ではXMLをリテラル型として扱えるので、DOMの操作がそれなりに簡単に記述できる。 var myXML:XML = fugo fugofugo ; trace(myXML.book[0].title); // hoge trace(myXML.book.(@id==2).author); //fugofugo これを踏まえて、RSSフィードからデータを取得を試みたところ、名前空間の扱いで嵌まった。 例として、ITメディアのRSSフィード(RSS1.0)からデータを取得する場合を見てみる。 var feed:XML = http://www.itmedia.co.jp/news/fortop/ ITmedia Top Story の最新記事一覧です。 ja 2007-10-04T09:25:00+09:00 http://rss.rssad.jp/rss/ar
移転しました。移転先はこちら。 前回に引き続き、メタボールを使った表現にチャレンジしてみました。 今回は、壁面で反射するパーティクルをメタボールでレンダリングしてみました。多少見栄えを良くするためにBlurFilterとGlowFilterをかけています。 ソースコードはこちらから。 Tweenerを使って動きを作っていくとシャキーンという感じの動きを簡単に作れるのですが、 慣れてくると少し有機的な動きを取り入れてみたいという衝動に駆られます。 ということで、今回は「メタボール」に挑戦してみました。 メタボールって言葉自体はあまり馴染みがないかもしれませんが、ボールが滑らかにくっついたり離れたりするデモを見た事ある人は結構いるのではないかと思います。 あのレンダリング手法をメタボールと言います。 今回チャレンジしたのは2Dメタボールです。3Dは実装が大変そうなのでやめました。 参考にしたの
このページを最初にブックマークしてみませんか?
『プログラミングとかそんなの』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く