スマフォのブラウザで遊ぶソーシャルゲームでは、Mobageは「ExGame」、GREEは「Reel」または「Theatrical」というSWF変換エンジンが提供されています。その場合は、Flash Lite 1.1でパブリッシュされたSWFファイルを変換してくれるので、JavaScriptを使ってcanvasでガリガリ演出を作るよりは、まだまだFlashが活躍している現状があります。今回は、Flash Lite 1.1で重複しないランダムを作る方法を紹介します。
Flash Lite 1.1では配列が使えません。 配列が使うことさえできれば、いろんな方法がありますが、Flash Lite 1.1はActionScript4相当なので、配列というのがありません。こういう場合は、set()関数とeval()関数を駆使して、重複しないランダムを扱う方法があります。最初に、set()関数とeval()関数のおさらいから。
js 1
2
3
4
5
6
// set()関数は変数を作って値を代入することができます。 set("hensu", "ほげほげ"); trace(hensu); //ほげほげ と出ます。 // eval()関数は文字列で変数を呼び出すことができます。 trace(eval("hensu")); // ほげほげ とでます。 重複しない乱数を作ってみましょう。 0〜19まで数字を20個ランダムで作る例です。
js 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2011年の抱負を語ってから連続でAS3の話で恐縮ですが、、、毎度困ってる重複しないランダムのClassをメモします。
重複しないランダムは何かと便利です。その数を引っ張り出すのに、毎回関数で数字を生成するのはナンセンス。なので、一回のメソッドでほしい数分が格納された配列を作る。そんなClassを作りました。
ActionScript3 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
package { public class RandomNonOverlapping { //↓この配列に重複しないランダムの数字が入ります。 public var ary= new Array(); public var max:uint = new uint(); public var Need:uint = new uint();//必要な個数 public function RandomNonOverlapping(m,n) { init(m,n); } public function init(m,n):Array { var max:uint = m; var Need:uint = n; var int_a = new Array(); var int_b = new Array(); //0~maxの数字を全部配列に入れる for (var i:int=0; i<= max; i++) { int_a[i] = i;<br /> } var j:Number = 0; var a_length:Number = int_a.
※追記
最新のダウンロードできる場所はここです
https://github.com/mrdoob/Hi-ReS-Stats
AS3用のFPSとメモリーの使用量がわかる、Stats.asというのがあります。左上のグラフみたいなやつですね。めちゃくちゃ便利なんですが、PC移行の際にバックアップをとるのを忘れ、再度ダウンロードしにいったんですが、なんと!ソースがなくなってる?じゃないですか!
http://code.google.com/p/mrdoob/wiki/stats
↑だいたいここに飛ばされるんですがなくなってるみたいですよね。
あれば便利なんで、、、何とかしてみつけたいなぁーっと思い、探しに探したら見つかりました!
Stats.asがダウンロードできる場所はここ http://code.google.com/p/mrdoob/source/browse/trunk/libs/net/hires/utils/?r=109
↑Stats.asを右クリックで、名前をつけて保存。で保存してください。
簡単な使い方 Stats.asをひらくと、「package net.hires.debug」となってます。ドキュメントクラス、またはflaファイルがあるところに「net」フォルダ、その下に「hires」フォルダ、その下に「debug」フォルダを作ってその中にStats.asを置いてください。
ActionScriptに下記のコードを書きます。(古いコードです)
ActionScript3 1
2
import net.hires.debugStats; addChild(new Stats()); 追記 どうやらimportのパスが、変更になったみたいです。通りすがりのStarlingさんからご指摘いただきました。ありがとうございました!(^^)
ActionScript3 1
2
import net.hires.utils; addChild(new Stats());
Twitterの検索APIで、主に使われるのはハッシュタグで検索したつぶやきを使うときだと思います。たとえば、「#CS5_jp」のハッシュタグを検索APIで取得したいとします。
ATOM形式:http://search.twitter.com/search.atom?q=%23CS5_jp
JSON形式:http://search.twitter.com/search.json?q=%23CS5_jp
まぁFlashなんで、わざわざjsonじゃなくてatomでいいやー!と思いきや、ATOM形式はXMLを扱うように、ActionScriptでパースすることができませんでした。
ATOM形式はRSSリーダーに登録できるように設計されているもので、XML文章フォーマットでありながら閉じタグが省略されているのが、ActionScriptでうまくパースできない原因でした。ここで使うのがAS3のNamespaceクラスです。XMLをloadしたあと、格納された変数にnode名を入力してパースしていくと思います。その、noed名の手前に、このNamespaceを入力していく必要があるみたいです。Twitterの出力結果を見てみましょう。
xml 1
<feed xmlns:google="http://base.google.com/ns/1.0" xml:lang="en-US" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns="<b>http://www.w3.org/2005/Atom</b>" xmlns:twitter="http://api.twitter.com/"> feedの要素の中に、Namespaceが記述されています。「http://www.w3.org/2005/Atom」というのがNamespaceにあたる内容です。
ActionScript3 1
var ns:Namespace = new Namespace("http://www.w3.org/2005/Atom"); 変数「ns」にNamespaceを格納します。
ActionScript3 1
trace(xml.ns::entry[0].ns::title); パースしたい箇所の「ns::」を記述することで、Namespaceが適応され、つぶやきの内容を出力することができます。
まとめるとこんなかんじです。
ActionScript3 1
Flashコンテンツを更新する時に、アプリをわざわざ立ち上げずに外部にXMLファイルやテキストファイルを更新する方法とかが一般的だと思いますが、要素が増えていくと管理自体が大変だったり、データを作るのが大変だったりします。そこで考えたのが、Excleなどで入稿データを管理し、CSVファイルに書き出したものをFlashが読み込むことができないものか。調べてみると方法がありましたのでメモります。ActionScript3.0でCSVファイルを読み込む方法です。
文字コードに気をつけましょう! ExcelからCSVに書き出したファイルは、おそらくShift-JISに文字コードがなっていると思います。書き出したCSVファイルを、文字コードが変更できるテキストエディタで保存しなおすのは、ちょっとだけナンセンスなんで、下記のサンプルコードには文字コードをUTF-8に変換するJcodeライブラリを使わせていただきます。よっぽどのことがない限りないと思いますが、これでCSVファイルの文字コードがEUCの場合でも変更できます。 もし、余計なライブラリを読み込みたくないー!場合は、 System.useCodePage を true にしましょう。
Jcode.asはここからダウンロードできます。
http://web2memo.blog120.fc2.com/blog-entry-221.html
ActionScript3 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
ActionScriptのトゥイーン制御ライブラリTweenerの使い方の補足です。
ぼかし、ブラーをTweenさせようと思ってもエラーが出る。
## [Tweener] Error: The property '_Blur_blurX' doesn't seem to be a normal object property of [object MovieClip] or a registered special property. ## [Tweener] Error: The property '_Blur_blurY' doesn't seem to be a normal object property of [object MovieClip] or a registered special property. Tweenerライブラリを読み込む「import caurina.transitions.Tweener;」この記述の下に、ぼかしフィルターを適応させるライブラリをimportさせる記述書いて、初期化をする関数を実行させる必要があります。
ActionScript 1
2
3
4
5
6
7
8
9
// ぼかしフィルターのimport import caurina.transitions.properties.FilterShortcuts; // ぼかしフィルターの初期化 FilterShortcuts.
外部テキストファイルやCSV、XMLファイルをFlashに読み込んで表示する。そんなコンテンツはいっぱいあると思いますが、shift-jisの場合は日本語が正しく表示されないので「System.useCodepage」というおまじないを書きます。
1119: 未定義である可能性が高いプロパティ useCodepage に静的型 Class の参照を使用してアクセスしています。 ActionScript3.0でこんなエラーが出たら、「page」の「p」を大文字に変えてみてください。たったこれだけではまってしまいました。。orz
ActionScript3 1
2
//as3 System.useCodePage = true; ActionScript3 1
2
//as2以下 System.useCodepage = true;