数値を3桁ごとに「,(カンマ)」で区切るのを調べていたら
WadadanetさんのAS3で数字を3桁毎にコンマ区切りにするが見付かり
目的を達することは出来たのですが、構文の中に「?=」や「?:」など意味のわからないものが。
Twitterで質問してみたら正規表現の「先読み」らしいことがわかりました。
大ざっぱに言うと、
マッチングはするけど、カーソルは先読み部分の前で止めちゃうよ
ということなのですね。
そんなわけで自分向けメモ。
javascriptで書くとこんなん。
var maho = "マホは咲の真似してリンシャンあがった"; document.write( maho.replace( /(マホは(?=.+あがった)咲の真似して)/, "$1カンして" ) ); // 先読みを使った結果 // マホは咲の真似してカンしてリンシャンあがった document.write( maho.replace( /(マホは咲の真似して).+あがった/, "$1カンして" ) ); // 先読みを使わない結果 // マホは咲の真似してカンして
先読みを使うと「あがった」の部分までマッチングするけど、
その直前までしか「$1」で取得してません。
従来の方法だと「あがった」まで取得してしまうので、
同じように置換すると後半部分が消えてます。
従来方法で同じ結果を出すならこんな感じでしょうか。
document.write( maho.replace( /(マホは咲の真似して)(.+あがった)/, "$1カンして$2" ) ); // マホは咲の真似してカンしてリンシャンあがった
これでもいいですが、「リンシャンあがった」の部分になんらかの処理を加えたい時、
カーソルは通り過ぎているのでちょっと面倒なことになります。
![]() |
咲-Saki- ラブじゃん マホちゃんの必殺技完成! スクウェア・エニックス スクウェア・エニックス 2010-01-29 |
コマンドリストを実行している時、
途中のコマンドの結果によって分岐させたい時の方法。
var hogeCommand:HogeCommand = new HogeCommand();
var serial:SerialList = new SerialList();
serial.addCommand( hogeCommand );
serial.addCommand( new Func( function():void {
// コマンドの結果で分岐
if ( hogeCommand.value ) {
serial.insertCommand( new Trace("コマンドを挟む"));
}
}));
serial.execute();
HogeCommandクラスの実行結果を受け取りたいので
インスタンスを先に作っておきます。
var hogeCommand:HogeCommand = new HogeCommand();
今回のキモ「insertCommand」です。
これにより動的にコマンドを挿入させることができます。
// コマンドの結果で分岐
if ( hogeCommand.value ) {
serial.insertCommand( new Trace("コマンドを挟む"));
}
このやり方についてはIs It So Easy?さんが詳しく書かれています。
this.parentで挿入することも出来るんですねー。
![]() |
[改訂版]ActionScript3.0プログラミング入門 for Adobe Flash CS4/CS3 ビー・エヌ・エヌ新社 2009-07-23 |
いったい何がキッカケだったのかまったくわからないけど、ある日突然出てきたエラー。
Resource.as、行 44
1004: 名前空間が見つからないか、コンパイル時定数ではありません。
progression_internal static const $collection:IdGroupCollection = new IdGroupCollection();
いろいろ試して、音声ファイルがリンケージされていると発生することがわかりました。
下記のようにごく一般的なファイルを普通にリンケージしただけえす。
ファイル:testse.wav
クラス:testse
基本クラス:flash.media.Sound
「最初のフレームに書き出し」のチェックを外すとエラーは出ません。
しかし上記チェックを外すわけにもいかず色々試していたら、
Index.asに下記の行を追加したらエラーが出なくなりました。
function hogehoge():void {
getResourceById("hoge").data;
}
この関数はどこからも呼ばれませんが、記述しておくだけで良いようです。
バグなのか仕様なのかはわかりませんが、公式のフォーラムに報告しておきました。
![]() |
ActionScript 3.0 エラーアーカイブス コンパイルエラー・コンパイラ警告・ランタイムエラーの解法 大重美幸 ソシム 2009-09-09 |
Progressionのリソースキャッシュと、複数ファイル読み込みの組み合わせが
便利すぎて思わず漏らしてしまいそうです(チョロリ)。あっ。
外部画像を読み込んで一覧表示させるものを作ってまして、
各サムネイル内で読み込むようにしてたんですが、
最初にまとめて読むように変更しました。
というのも、リソースキャッシュのおかげで
画像の流用がすごく簡単に行えるようになったからです。
リソースキャッシュについては以前かいたこの日記を参照。
Progressionが備えているURLアンカー(URLの後の「#~」)によるページ遷移は
フルFlashサイトを作る際にはとても便利で素晴らしいのですが、
ブログパーツやメニューのみFlashにしている場合は誤動作の原因になる場合もあります。
今日まさにそれでハマっていたので対処法をメモっておきます。
ドキュメントクラス「Index.as」内の下記の箇所を書き換えれば
無効にすることができます。
protected override function atReady():void {
// manager.sync = true;
manager.sync = false;
// manager.goto( manager.syncedSceneId );
manager.goto( new SceneId('/index') );
}
manager.syncというプロパティが関係するらしいので「false」にします。
manager.syncedSceneIdもURLアンカーによる場所が格納されているぽいので、
移動先も強制的に「/index」にしてしまいます。
もっとエレガントな方法もありそうですが、とりあえずこれで対処できました。
![]() |
リトルアンカー(限定版) D3PUBLISHER 2009-04-23 |
Progression4から搭載されたResource関連がとても便利なのでメモ。
これまでも外部ファイル(swf、画像、mp3など)を読み込んで使い回す
ということは出来ましたが、それなりに手間がかかりました。
Progression4からはそれらを管理するResource系のクラスが登場し、
かなりシンプルになったようです。
michinoko blogさんで書かれていたことを参考に書いてみました。
Flashを使ったページを作っていると
「swfを更新したのにキャッシュから読み込まれてしまう」なんてのはよくある話です。
対応は簡単で、ファイルが新しいものだとブラウザに教えてあげればいいのです。
var flashvars = {};
var params = {
wmode: "transparent" // このへんは各自にあわせて
};
var attributes = {};
swfobject.embedSWF(
"menu.swf?20100128_001",
"flashcontent",
"700", "100", "9.0.45",
"expressInstall.swf",
flashvars, params, attributes);
これは SWFObject2を使った場合の書き方ですが、他の書き方でも同様に
「ホニャララ.swf?適当な文字」としてあげればよいのです。
ではプリローダーを使っている場合はどうなるか。
グローバル変数的な使い方についてもちょっと書きます。
続きを読む
ActionScript3の重ね順は setChildIndex()のおかげでだいぶラクになりましたね。
ゲームとかいろんなとこで必要になる、Y座標による重ね順の変更です。
だいぶ以前 mixiに書いてたのを掘り起こしてリプレースしました。