ActionScript 誰かが物凄い勢いで解答するスレ28
var account = "
http://api.dan.co.jp/twicon/miyasuke1";
var loader1 = new MovieClipLoader();
loader1.loadClip(account, _root.mc);
var loader2 = new MovieClipLoader();
loader2.loadClip(account, 1);
これだとpngで大失敗。
Playerが7でも_level1以上なら読み込まれる
つまり2バイト文字が云々ってのが原因か
>>950 もしかしたら、そのpngファイルがちょっと壊れてるとか?
他のpngファイルでも同様なのか検証してみた?
ローカルのPlayerは10になってるんですけど
他のpngも片っ端から駄目でした
>>953 もし同じ方法で作られたpngならその方法やツール、そうでないなら
使ってるPCとかHDDとかアカウントとかFlashとか、なにかそちら独自の環境に起因する
問題じゃないか?
サーバにアップしても同様か検証してみれば、また何かわかるかも
和塩に上げてみたけど、やっぱりjpgの方しか読み込まれませんね
最近AS3.0始めた者です
どうにもよく分からん
Flashlite1.1は使えるし、モバゲーみたいなソーシャルアプリも開発してんだけど
今後スマフォなんかにも対応したいと思っているんで、やり始めたって感じですが
どうにもしっくり来ないんですよね
一応2までは習得しています
なんかいい覚え方ないでしょうか?
>>956 語呂合わせとか?
ねーよwwwwww
2.0とは似てるっちゃ似てるけど結構別物
2.0でもクラスベースでやってたなら楽かもね
とりあえずActionScript初心者wikiがおすすめ
三国志みたいなシミュレーションゲーム作る時ってクラスの設計は
Worldクラス、Nationクラス、Regionクラス、Bushoクラス
みたいな感じでいいんですか?
なんか参考になるサイトがあったら教えてください
えーっと、今までは一つの配列オブジェクトで world.nation.region みたいに
世界の下に複数の国家があって、国家の下にさらに複数の地域があってみたいな
ツリーで管理してきたんですけど、クラスを使って管理する場合はどうしたらいいんですか?
Worldクラス一つ作って、そこで一つの配列オブジェクトで管理するのってよくないですよね?
でもわけるとセーブする時とか面倒くさそうです。
961 :
960:2011/06/29(水) 10:27:28.91 ID:Pso49myN
書き込んだらどっさりレス増えて、解決済みにレスしてた俺おわた
>>958 俺なら結構細かくクラス化しちゃう
同じファイルにたくさん書きたくない
いいのか悪いのかはしらんけど
例えばゲームでplayerクラス作って、配列変数に1000個ぐらいのインスタンスを作った時、
playerの情報をセーブ・ロードするのってどうすればいいんですか?
playerインスタンスの配列変数とは別に、player情報の配列変数を作って保存するんでしょうか?
ファイルやsoに保存するって意味なら
俺は変換クラス作ってインスタンスから各情報をのプリミティブ値を抽出してそれらだけで再現できるようにしてそれを保存するよ
>>964 レスありがとうございます。なるほど・・・でもクラスで使う変数が百個とか多くなると
セーブもロードも面倒じゃないですか?
>>958 何かのいくつかの処理で「同じ変数を頻繁に使う」メソッドや関数を一つのクラスにまとめるのが基本じゃないかな
「細かくクラス分けする」ってのは他の作品にも流用が効く処理なら便利
>>959 その考え方で正しいと思うよ おれならデータベースクラスとして1個にまとめる
データベースなら1つのクラスが膨大になるのは仕方が無い セーブロードも1個のオブジェクトで済むし
クラスファイルが大きくなるのがいやならxml等でデータベースとして扱う
>>967 セーブもロードもそんな頻繁にするもんじゃないじゃん
操作したりなんか変更あるたびに倍の量保存するよりはセーブロード時にバーっと作っちゃたほうがメモリも処理もいいかなと思って
多少時間かかってもセーブロード時ってNow Loading... とかしても許されるかんじじゃん
現在の状態をByteArrayにして返す、ByteArrayから状態を復元するDataManagerクラスと
ByteArrayを受け取って保存する、ファイルを読み込んでByteArrayを返すIOManagerクラス
みたいなかんじにしてる
971 :
Now_loading...774KB:2011/06/29(水) 12:51:36.90 ID:B80sYTnu
ああー、根本的に勘違いしてたのかもしれません・・・、
今Player()クラスのインスタンスをplayer:Arrayに100個作って保存して
playerをsharedObjectに突っ込んでみたらセーブもロードもできました。
インスタンス変数とかもちゃんと保存されてます。
クラスのインスタンスって普通に配列オブジェクトみたいにSOに保存できるんですね。
この方法でセーブロード行うのは何かまずいのですか?
AS3でURLLoaderでテキストファイルを読み込んでるんですが
読み込み完了イベントの時に以下の処理をしていて、変な動作をしています。
var arr:Array = ss_loader_obj.data.toString().split(/\n/);
for(var i:int=0; i<arr.length; i++)
{
trace(i + ":" + arr[i]);
}
txtファイルの中身は
001.jpg
002.jpg
003.jpg
なのですが、上のプログラムの出力結果が
0:001.jpg
002.jpg
003.jpg
となってしまいます。i:がループの2回目から消えているのですが何故なんでしょうか???
>>972 クラスインスタンスまるごとよりは自分で必要なプリミティブ値を管理したほうが容量減ると思って俺はそうしてる
そのやり方でも普通にいいと思う
>>973 arr.lengthが1の時はきっとそう出力されるよね
つまりちゃんとsplitできてないと予想
とりあえずsplitしたあとtrace(arr.length)してみたらどうなる?
>>972 確認して、ちゃんとセーブ出来てるならいいんじゃないかな?
作りによってオブジェクトそのままだと出来ないのもあったりするから注意だけど。
>>972 やり方によっては、ゲーム内データにsharedObject参照が残ってて
どちらかの変更がそのままもう片方に反映されちゃう、ということもあるので
そのへんの注意は必要かも
>>974 arr.engthは3でした。
どうやら調べてみると、002.jpgと003.jpgの頭に
改行かなんか分からないものが入ってるっぽいです。
それが原因のような気がするのですが、これは一体・・・。
trace("test");
trace(arr[0]);
trace(arr[1]);
trace(arr[2]);
の出力結果が
test
000.jpg
001.jpg
002.jpg
みたいになります。。。
WINで作ったテキストファイルなら改行コードは\r\nだよ
>>978 ぬわーそうでしたか・・・。
\r\nで解決できました。ありがとうございます!!
AS3でLoaderを使って外部swfを読み込んでいるのですが、
読み込んだswfのwidthとheightが、読み込み元のステージの大きさになってしまいます。
var loader_swf:Loader = new Loader();
var url_swf:URLRequest = new URLRequest("slideshow.swf");
var info:LoaderInfo = loader_swf.contentLoaderInfo;
loader_swf.load(url_swf);
info.addEventListener(Event.COMPLETE, swfLoaded);
function swfLoaded(e:Event):void{
slideshow.addChild(loader_swf);
trace(loader_swf.loaderInfo.width + ";" + loader_swf.loaderInfo.height);
}
slideshow.swfは800*480で作っているのにも関わらず、
trace結果は800*500(呼び出し元のステージの大きさ)になってしまいます。
swfを元のファイルの大きさのまま呼び出すことは不可能でしょうか?
>>980 普通は元のサイズで読み込まれる
slideshowあたりが、拡大縮小されて配置されてるんじゃないの?
>>981 slideshow.flaのパブリッシュ設定で
HTMLのサイズをピクセル指定で800px*480px、
伸縮を拡大・縮小なしに設定しています。
まぁこっちはHTMLのほうの指定なのであまり関係なさそうですが・・・。
パブリッシュ設定のFLASHのタブには特にステージの大きさとか伸縮とかの
設定はなさそうですが・・・何か心当たりはありませんでしょうか?
ちなみに、slideshow.swfは拡大されていないので、
読み込み元swfのステージの中心に原寸サイズで表示されます。
(ムービークリップslideshowはステージの左上(0,0)に配置している空のムービークリップです。)
>>984 すまん、ちょっとよくわからんのだが、slideshow.swfが拡大されて表示されてるわけではないの?
slideshow.swfのステージheightが400で、表示サイズも400なのに、trace()すると500になってるの?
DisplayObjectのwidthとかheightってset可能だけど、結局中身の右端・下端の値になるんだよな
結構ハマったりするから要注意
「ある1つの関数の中からしか参照できない変数」を作りたいんだけどどうしたらいいんだろう
クラス内で宣言したらクラス内の他の関数からも参照できるし、
関数の初めで var hoge:int=0; みたいにローカル変数として定義したら実行するたびに初期化されるから
無駄が多そう&前回の内容を引き継ぐ処理ができないから不便。他に何か方法ないかな?
>>987 ひとつの関数もったクラスにしちゃう
クロージャ利用する
最近流れ速いし次スレたててくるわ
>>985 なので、slideshow.swfのオブジェクトの外側に白色の空白ステージ(Wordでいう余白みたいなもの)がある感じになってます。
で、(0,0)がslideshow.swfの左上ではなくて、余白の左上なので、なんか表示がずれてしまいます・・・。
ずれてる分の座標を、スクリプトでずらして表示させれば応急処置になるんですけど、
どうしても気持ち悪いのでどうにかしたいです。。。
どうやらようやくActionScript3.0にも風が向いてきたようだな・・・胸が熱くなるな
scriptって名前がなんかショボいイメージでイマイチプログラミング言語の仲間入りできてない気がする
>>971もあるしiPhone、Android、Stage3D、と風は吹いてる
SingletonにEventDispatcherの変数作ってそこ監視したりイベント送れば複雑な構成でも自由に行き来できる
という方法が便利で最近使うんだけどやっぱだめかな?
>>996 それはたぶん、MVCアーキティクチャのC(controller)なんじゃないだろうか。と思う。
クラスAからBにb()やらせたいときは
Aで
Singleton.eventReciever.dispatchEvent(new Event("byareyo"));
Bで
Singleton.eventReciever.addEventListener("hoge",b);
みたいな感じね
>>997 調べてみたけどさっぱりわからん
デザパタって意外と自分で思いついて使ってるもんだよね
どこからでもアクセスできちゃうってオブジェクト指向的にダメなんだろうか