オリジナルの記事にはなかった多くの追加コード例は、ユーザーFlashistによって提供されました。
1.ランダムソート
for ( var i: uint = 0; i < myArray.length; i++)
{
var rand: uint = int (Math.random() * myArray.length);
myArray.push( myArray.splice( rand, 1 )[0] );
}
* This source code was highlighted with Source Code Highlighter .
この記事の著者は、配列をカードのデッキとして想像し、サイクルの各ステップでランダムなカードを「取り出し」、その後、このデッキの最後に追加することを提案しています。 個人的には、配列(およびベクトル)を並べ替える標準機能を使用しなかった理由がわかりません。
/**
*
*
* @param obj1 1- .
* @param obj2 2- .
*
* @return , (-1, 0 1).
*/
public function randomizeSortFunction(obj1:Boolean, obj2:Object): int
{
var randNum: int = -1 + Math.floor((Math.random() * 3));
return randNum;
}
//
var array:Array = [0, 1, 2, 3, 4];
array.sort(ArrayTools.randomizeSortFunction);
trace(array);
* This source code was highlighted with Source Code Highlighter .
2番目の方法は、私にとってより理解しやすいようです。 さらに、これはAS3組み込みツールです。
2.グリッド上のオブジェクトの配置
著者は、オブジェクトを配置するためのそのようなシンプルで短い方法を提供します。 除算後の剰余演算子( % )を使用すると、オブジェクトをX軸上に正しく配置できます。また、切り捨てによる除算( Math.floor )を使用すると、Yの配置を把握できます。
for ( var i: uint = 0; i < 20; i++)
{
var displayObject:MyDisplayObject = new MyDisplayObject();
displayObject.x = displayObject.width * ( i % 5 );
displayObject.y = displayObject.height * Math.floor( i / 5 );
addChild(displayObject);
}
* This source code was highlighted with Source Code Highlighter .
この例では、特定の架空のクラスMyDisplayObjectの 20個のオブジェクトが作成され 、それらは5列のグリッド内に配置されています。 ご想像のとおり、コードの5という数字はグリッド列の数、つまり 7つの列がある場合、5の代わりに7を配置します。
3. DisplayObjectContainerからすべての「子」を削除する
ビジュアルコンテンツを持つすべてのコンテナの基本クラス(私はDisplayObjectContainerについて話している、はい、はい)には、すべての子オブジェクトを一度に削除する独自のメソッドがありません。 関係ありません! =)幸いなことに、そのような方法を自分で作成します。
/**
* - .
*
* @param parentClip , .
*/
static public function removeAllChildren(parentClip:DisplayObjectContainer): void
{
// 1 ,
while (parentClip.numChildren > 0)
{
parentClip.removeChildAt(0);
}
}
* This source code was highlighted with Source Code Highlighter .
さらに、DisplayObjectContainerとその「子」を操作するためのいくつかの機能を共有するFlashistユーザーからのプレゼント:
/**
* - .
*
* @param parentClip , .
*/
static public function hideAllChildren(parentClip:DisplayObjectContainer): void
{
var childrenCount: int = parentClip.numChildren;
for ( var childrenIndex: int = 0; childrenIndex < childrenCount; childrenIndex++)
{
parentClip.getChildAt(childrenIndex).visible = false ;
}
}
/**
* - .
*
* @param parentClip , .
*/
static public function showAllChildren(parentClip:DisplayObjectContainer): void
{
var childrenCount: int = parentClip.numChildren;
for ( var childrenIndex: int = 0; childrenIndex < childrenCount; childrenIndex++)
{
parentClip.getChildAt(childrenIndex).visible = true ;
}
}
/**
* .
*
* @param child .
*/
static public function childRemoveItselfFromParent(child:DisplayObject): void
{
// ,
if (child == null || child.parent == null )
{
return ;
}
child.parent.removeChild(child);
}
parentClip.removeChildAt(0);
}
}
* This source code was highlighted with Source Code Highlighter .
4. SWFが埋め込まれているページのURLを取得する
フラッシュドライブが埋め込まれているページのURLを取得するには、 ExternalInterfaceクラスを使用する必要があります。 不要な詳細に入らないようにするために、この例では、 ExternalInterfaceを使用して、フラッシュドライブが構築されているDOM(ドキュメントオブジェクトモデル)HTMLページにアクセスしているとしか言えません。
このアプローチの欠点は、 allowscriptaccessパラメーターをsameDomainまたはalwaysに設定して、フラッシュドライブをHTMLページに埋め込む必要があることです。 HTMLページへのフラッシュドライブの埋め込みを自分で制御する場合、これは問題ではないかもしれませんが、フラッシュドライブが他の人によって埋め込まれている場合、この方法は機能しない可能性があります。 このコードを使用するには、必ずflash.external.ExternalInterfaceクラスをドキュメントにインポートしてください。
function get currentURL():String
{
var url:String;
if (ExternalInterface.available)
{
return ExternalInterface.call( "window.location.href" );
}
return url;
}
* This source code was highlighted with Source Code Highlighter .
別の方法として、 loaderInfoオブジェクトのurlプロパティを使用できます。このプロパティは、フラッシュドライブのルートオブジェクト(またはステージ (著者のメモ))からアクセスする必要があります。 この方法を使用すると、フラッシュドライブが配置されているHTMLページのURLは認識されませんが、フラッシュドライブが配置されている場所はわかります。 この方法により、フラッシュドライブがどのドメインにあるかがわかります。
root.loaderInfo.url;
* This source code was highlighted with Source Code Highlighter .
フラッシュドライブの場所を把握し、他の非常に有用な統計情報を収集するために、cool-super-duperサービスMochiBotを使用できることを自分で追加します。
5. DisplayObjectContainerオブジェクトとその「子」の座標の丸め
このスニペットは、その自明さとシンプルさにもかかわらず、以前は考えていなかったので、少し喜んでくれました。 ポイントは、 DisplayObjectContainer関数に渡すことにより、この関数の再帰呼び出しを開始し、コンテナー自体とそのすべての子の座標を丸めることです。 子オブジェクトの1つ自体がDisplayObjectContainerクラスの代表である場合、それは既に関数に渡され、最後までネストされたすべてのコンテナーが列挙されるまで続きます。
function roundPositions(displayObjectContainer:DisplayObjectContainer): void
{
if (!(displayObjectContainer is Stage))
{
displayObjectContainer.x = Math.round(displayObjectContainer.x);
displayObjectContainer.y = Math.round(displayObjectContainer.y);
}
for ( var i: uint = 0; i < displayObjectContainer.numChildren; i++)
{
var child:DisplayObject = displayObjectContainer.getChildAt(i);
if (child is DisplayObjectContainer)
{
roundPositions(child as DisplayObjectContainer);
} else
{
child.x = Math.round(child.x);
child.y = Math.round(child.y);
}
}
}
* This source code was highlighted with Source Code Highlighter .
ああ、そうです、 ステージをチェックすることは、 ステージオブジェクトのxプロパティとyプロパティに誤ってアクセスしようとしないために価値があります(サポートされていません)(実行が発行されます)。
6. 2つの数字の間の乱数
さて、ここではすべてが非常に簡単です。私は何も説明したくさえありません)それを受け取って使用してください。
function random(min:Number, max:Number):Number
{
return min + Math.random() * (max - min);
}
* This source code was highlighted with Source Code Highlighter .
Flashistからの別の追加プレゼント。 機能は、このアナログ、注意、可能性に「組み込まれています」:
a)自動的に小さい整数に丸めます。
b)最も近い整数に自動的に丸めます。
c)自動的に大きな整数に丸めます。
うわー、それは本当にクールです:
/**
* .
*
* @param minNum .
* @param maxNum .
* @param isNeedFloor .
* @param isNeedRound .
* @param isNeedCeil .
*
* @return .
*/
static public function getRandomNum(minNum:Number, maxNum:Number, isNeedFloor:Boolean = false , isNeedRound:Boolean = false , isNeedCeil:Boolean = false ):Number
{
var randNum:Number = minNum + Math.random() * (maxNum - minNum);
if (isNeedFloor)
{
randNum = Math.floor(randNum);
}
if (isNeedRound)
{
randNum = Math.round(randNum);
}
if (isNeedCeil)
{
randNum = Math.ceil(randNum);
}
return randNum;
}
* This source code was highlighted with Source Code Highlighter .
7.ランダムなブール値
繰り返しますが、これについて特に複雑なことは何もありません。とにかく誰もが理解する必要があります。 シンプルで頻繁に必要な機能:
function get randomBoolean():Boolean
{
return Math.random() >= 0.5;
}
* This source code was highlighted with Source Code Highlighter .
8. 2点間の角度を見つける
そして、これはもっと面白いです。 このような機能は、マウスカーソルの移動/位置に応答する必要があるゲームやアプリケーションを開発するときに必要になることがよくあります。
function getAngle (x1:Number, y1:Number, x2:Number, y2:Number):Number
{
var dx:Number = x2 - x1;
var dy:Number = y2 - y1;
return Math.atan2(dy,dx);
}
* This source code was highlighted with Source Code Highlighter .
関数は度ではなくラジアン単位で角度を返すことを覚えておくことは重要です(すべての人がよく知っているように)。 しかし、この小さな欠点があるので、次の関数がそれを理解するのに役立ちます。
9.度をラジアンに変換する、またはその逆
/**
* .
*/
/**
* .
*
* @param angle .
*
* @return .
*/
static public function convertAngleToRadians(angle:Number):Number
{
var radians:Number = angle / 180 * Math.PI;
return radians;
}
/**
* .
*
* @param radians .
*
* @return .
*/
static public function convertRadiansToAngle(radians:Number):Number
{
var angle:Number = radians * 180 / Math.PI;
return angle;
}
* This source code was highlighted with Source Code Highlighter .
10.メール検証
ウェブサイトやゲームのあらゆる種類の登録を作成するための便利なスニペット。
function isValidEmail(email:String):Boolean
{
var emailExpression:RegExp = /([a-z0-9._-]+?)@([a-z0-9.-]+)\.([az]{2,4})/i;
return emailExpression.test(email);
}
* This source code was highlighted with Source Code Highlighter .
このRegExpは100%の保証を与えるものではないことを理解しておく必要があります(著者のメモ:残念ながら、これまでのところ、間違っていない単一のRegExpを見たことはありません)。 私の3分間の実験で、彼は少なくとも3つのケースで間違いを犯しました。 -mymail@mail.mail 、 .mymail @ mail.mail 、およびmymail@mail.mailのアドレスを確認してください。
11.スペースの削除
文字列からいくつかの文字を削除する必要があった場合、ここにあなたの問題の解決策があります=)
function stripSpaces( string :String):String
{
var s:String = string ;
return s.split( " " ).join( "" );
}
* This source code was highlighted with Source Code Highlighter .
気さくなFlashistは、このスニペットの「高度な」バージョンを共有しています。これを使用して、サブストリング(スペースだけでなく)を削除し、サブストリング(空のストリングだけでなく)を挿入できます。
/**
* , .
*
* @param sourceString , .
* @param oldString , .
* @param newString , .
*
* @return , .
*/
static public function replaceText(sourceString:String, oldString:String, newString:String):String
{
// ,
var replacedString:String = sourceString.split(oldString).join(newString);
//
return replacedString;
}
* This source code was highlighted with Source Code Highlighter .
12.スラギファイ
おそらく、 スラッグという用語は、CNC(人間が読めるURL)のように、ロシア語に最も正確に翻訳するでしょう。 人が簡単に読むことができるようなリンク。
function slugify( string :String):String
{
const pattern1:RegExp = /[^\w- ]/g; // Matches anything except word characters, space and -
const pattern2:RegExp = / +/g; // Matches one or more space characters
var s:String = string ;
return s.replace(pattern1, "" ).replace(pattern2, "-" ).toLowerCase();
}
* This source code was highlighted with Source Code Highlighter .
このスニペットは元の文字列を取得し、URLの生成に不適切なすべての文字を切り取ります。 ラテン文字、数字、ハイフン、アンダースコアを除くすべての文字。 「正しい」単語間のスペースはハイフンに置き換えられます。 したがって、「こんにちは、これはFlashに関する記事です!^ @#&*!@ ^#*&、ActionScript、Adobe、snippets and that_like_pieces-drunks」を関数に渡すと、「-flash-actionscript-adobe」が返されます-__- "。
13.部分文字列http://またはhttps://から削除し、オプションで任意の行からwwwを削除します
正直なところ、私はこの機能をおそらく4年間Flash開発のために必要としたことはありませんでしたが、誰かに役立つことを除外していません。
function stripHttp( string :String, stripWWW:Boolean = false ):String
{
var s:String = string ;
var regexp:RegExp = new RegExp(!stripWWW ? "https*:\/\/" : "https*:\/\/(www\.)*" , "ig" );
return s.replace(regexp, "" );
}
* This source code was highlighted with Source Code Highlighter .
14. HTMLマークアップの削除
そして、これはより興味深い、はるかに興味深い)一般に、スニペットを使用すると、HTMLマークアップ文字からテキストをクリアし、「クリーンな」テキストのみを残すことができます。 「 ここをクリックして詳細を確認してください」と入力すると、「ここをクリックして詳細を確認できます。」、クール、他に言いたいことがあります。
function stripTags( string :String):String
{
var s:String = string ;
var regexp:RegExp = new RegExp( "<[^<]*<" , "gi" );
return s.replace(regexp, "" );
}
* This source code was highlighted with Source Code Highlighter .
15. XML名前空間の削除
繰り返しますが、XMLで名前空間の競合の問題に遭遇したことは一度もありませんが、元の記事では、XMLが異なるソースからロードされるときにこのような問題が発生することがあると述べています。
function stripXMLNamespaces(xml:XML):XML
{
var s:String = xml.toString();
var pattern1:RegExp = /\s*xmlns[^\'\ "]*=[\'\"][^\'\"]*[\'\"]/gi;
s = s.replace(pattern1, " ");
var pattern2:RegExp = /<[\/]{0,1}(\w+:).*?>/i;
while(pattern2.test(s)) {
s = s.replace(pattern2.exec(s)[1], " ");
}
return XML(s);
}
* This source code was highlighted with Source Code Highlighter .
PS:
まあ、それがおそらくすべてです。 これらのスニペットが誰かの生活を楽にし、日常の開発に役立つことを願っています。 私自身のために、私はいくつかの興味深いものに注目しましたが、それはまだ私にとって有用だと思います。
もう一度、 Flashistは投稿のコード例を親切に提供してくれました。これは、 必死の投稿の後に他のユーザーによってひどく損傷を受けました。 厳密に彼を判断しないでください=)彼自身は、投稿とそのような大胆なコメントに対するこのようなタグについて少し後悔しています。 実際、この投稿は、おそらく彼が喜んで自分で公開するでしょうが、カルマだけがそれを許可しません(私は彼にカルマにいくつかのプラスをノックしようとしています。