ActionScript 誰かが物凄い勢いで解答するスレ 10 とりあえず2つほど。 まずわかりやすいのが、1秒たつまで自前で数えるやり方。 var count = 0; onClipEvent(enterFrame){ count++;// 毎フレーム1増やして if (count == 30){// FPS30だとして、30まで数えりゃ1秒たってるよね count = 0; MyFunc();// } } FPSが落ちない限り、もしくは「大体1秒」でさえあれば正確さは問わないなら、 これが初心者にはわかりやすいな。 で、ちゃんとしたつくりとしてオススメなのが、setIntervalを使って、指定間隔で関数を呼び出すやり方。 var id = null; onClipEvent(load){// load時に設定しておく。 id = setInterval(MyFunc,1000);// 1000ms,つまり1秒ごとにMyFuncを呼び出す } これなら正確に1秒ごとに指定関数が呼び出される。
setIntervalを使うとか。 timerID = setInterval(呼び出し関数・命令, 間隔)
数式解析できたよー。逆ポーランド記法はもう紹介されてたんで、 2分木でやてみた。遅いけどね こんなクラス作って、 function node(v) { var _value,_left,_right if (Number(v.toString())) { //数値のケース this._value = Number(v.toString()); } else { //式と思われるケース var _c = ["+", "-", "*", "/"]; for (var i = 0; i<3; i++) { var flg = false; for (var j=0; j<v.length; j++) if (_c[i] == v[j]){flg = true;break}; if (flg)break; } this._left= new node(v.slice(0, j));this._right = new node(v.slice(j+1));this._value = _c[i]; } }
955 :
954 :2006/02/19(日) 11:08:01 ID:MZfyo/zA
こんなメソッド付けて、 node.prototype.getResult=function(){ with(this){ switch(_value){ case "*" : return _left.getResult() * _right.getResult(); case "/" : return _left.getResult() / _right.getResult(); case "+" : return _left.getResult() + _right.getResult(); case "-" : return _left.getResult() - _right.getResult(); default:return _value } } } で、 var _a =[123,"+","2","*",10]; var n = new node(_a) trace(n.getResult()) //143 こんな感じ。 数式としての整合性のチェックや0除算、予期しない値なんかの エラー処理ははしょってるので実用には難アリ。 あくまでも考え方の参考にでもしてね。
( ´_ゝ`)フーン
for(i=0;i<10;i++){ hoge(i); } function hoge(param){ var str[param] = "test"; } こんな感じで、str1, str2 str3・・・と 渡したパラメータの番号をつけてローカル変数を作っていきたいのですが、 うまく動作させることができません。 アドバイスをよろしくお願いします。
いったん二分木を生成してから評価を行うのと、 二分木を使わず再帰処理のみで評価を行うのとでは、 どっちが速いですかね?
質問です。 チャットをフラッシュで組み立てたいと思っていて、 発言表示部分をTextAreaのコンポーネントにしました。 「下」にいくほど発言が新しいです。 dialog.text += hoge + "\r"; (dialogがTextAreaの名前、hogeはCGIから受け取った新着発言) としたんですが、これだとチャットを続けると永久にデータが増え続けてしまいます。 20行くらいいったら古い発言から消去したいんですが、どうすればいいのでしょう・・・? 配列使うんでしょうか。 環境はFlash 8,XPです。お願いします。
>>958 テスト用のswfをアップしたら何人かは実験に協力してくれると思うよ。
>>961 ありがとうございます。さっそく試してみます。
>>957 function hoge(param) {
str[param] = "test";
}
str = new Array(); //配列の作成
for (i = 0; i < 10; i++) {
hoge(i);
}
functionは呼び出す前に定義する事
varじゃなくて、その前に配列を作成しないと値が入らないよ
ごめん配列じゃなくてローカル変数だったね function hoge(param) { this["str" + param] = "test"; } for (i = 0; i < 10; i++) { hoge(i); }
同一フレームなら for (i = 0; i < 10; i++) { hoge(i); } function hoge(param) { this["str" + param] = "test"; } の順番でもおk
this[...]じゃ、全然ローカル変数ちゃうがな。
>>964 ありがとうございます。
ですが、いただいたスクリプトをパブリッシュしようとするとエラーがでてしまいます・・
**エラー** シーン = シーン 1, レイヤー = レイヤー 1, フレーム = 1 :行 2:シンタックスエラー
this["str" + param] = "test";
**エラー** シーン = シーン 1, レイヤー = レイヤー 1, フレーム = 1 :行 3:予期しない '}' があります。
}
ActionScript エラー数 :2 報告済みエラー :2
どのように処理すればいいのでしょうか
>>967 あーそりゃ964の書き方が悪いんだわ。
全角スペースでインデントされてるんよ。
>>967 タイムライン変数で良いなら関数なんて無理に使わんでも
for(i=0;i<10;i++){this["str"+i] = "test";}
で、良いんじゃないの?
>>969 つか、Flash単体で動かないって、、、Flash電卓じゃないじゃん
>>967 Flashでは配列はローカルじゃないよ。
どういう用途でとか書いてくれれば、みんなよくわかると思うし、
解決策たくさん出てくると思う。
配列だったらこの形でローカル変数になるしょ unko(); function unko(){ var arr = new Array(); for(i=0;i<10;i++){arr[i]="test";} trace(arr);} trace(arr);
うん。言いたかったのはstr1,str2という変数を作り出す必要があるの?てことなんだ。
>>971 つか、Flash単体で動かないって、、、Flash電卓じゃないじゃん
あー、それは突っ込まないで下さいw
975 :
Now_loading...774KB :2006/02/21(火) 00:30:24 ID:xwKgGxnD
ソフト=FlashMX2004,OS=Win98SE Q) テキストフィールドの書式を変更 テキストフィールド(変数名:disp)の書式を、初めは、「MSPゴシック・黒色・標準」 としておき、後で「Times New Roman・青色・斜体」に変更するため、ボタンアクション として on (press) { _root.disp.font = "Times New Roman"; _root.disp.color = 0x0000FF; _root.disp.italic = true; _root.disp = _root.disp+"Y = "; } を書きました。「Y = 」以降を青色にしたいのですが、何も変化が現れません。 間違いのご指摘を願います。
>>975 テキストフィールドにcolorとかfontっていうプロパティはないよ。
それをやるならTextFormatクラス。
部分的に色を変えたいならTextField.html=trueにして、TextField.htmlTextにHTMLを書く。
[TextField] はテキストフィールドのインスタンス名ね。変数名じゃないよ。
977 :
975 :2006/02/21(火) 01:43:57 ID:i4Vni9Lo
>>976 どうも。
TextFormatクラスですね。「ActionScriptポケットリファレンス」(馬場ぎんが 著)
を見ていたのですが、「Flash ActionScript 逆引き大全550」(ITフロンティア)
のp218以降に例が書いてありました。
本を読みながらやってみます。
978 :
975 :2006/02/21(火) 02:45:03 ID:7kY+TiAz
Q) テキストフィールドの書式を変更 -2 すみません。976さんと「逆引き大全550」を参考に、dispInsをテキスト フィールドのインスタンス名として on (press) { disp_ins = new TextFormat(); disp_ins.font = "Times New Roman"; disp_ins.color = 0x0000ff; disp_ins.italic = true; _root.dispIns.setTextFormat(disp_ins); _root.disp = _root.disp+"Y = "; } としましたが、変化がまだ現れません。ご指摘ねがいます。
>>978 答えを一発で教えてやることも出来るが、あえて教えてあげない。
理解が不十分な関数やクラスが出てきたなと感じたら、
ヘルプで基礎的な知識を、そしてGoogleでノウハウを会得すべし。
>>979 ヘルプやGoogleを見ましたが、よく分かりませんでした。とりあえず、
_root.disp = _root.disp+"Y = "; をon (press)処理の先頭に置いたと
ころ、希望する書式になりました。
ただし、Y = の後に文字を入れると、元の書式に戻りました。これを改善する
ため、_rootのフレームアクションでonEnterFrame内に書いたところ、入力
の際一瞬元に戻りますが、希望する書式になります。
※setNewTextFormat()は未だ試していません。
一応解決しましたが、皆さんの解決法とは違いますでしょうか?
わかってるんじゃね?
984 :
Now_loading...774KB :2006/02/21(火) 18:48:58 ID:kQEdNlaS
開発ソフトは、FlashMX2004です。 ステージ上のMC(XY)に点のMCを並べて曲線を描こうとしています。ここでは、 最初の例として直線を目標にしています。 下の通り、リンケージ設定したMC(markA)をattachMovie()により、XY座標に 並べたいのですが、うまくいきません。 mId = 0; //カウント用ID x0 = -(_root.XY._width/2)+1; //XYの左端 xX = x0; として、 on (release) { function makeMark() { mId++; trace("mId= "+mId); newMark = "markA"+mId; prop = {_x:xX+x0, _y:2*Math.pow(xX+x0, 1)}; //実質 y=2x の線 _root.XY.grobalToLocal(prop); _root.XY.attachMovie("markA", newMark, mId, prop); } _root.XY.onEnterFrame = function() { xX = xX+0.5; //X座標を0.5づつ増加 trace("marking"); _root.makeMark(); }; } onEnterFrameが動作しているかどうかの判定である trace("marking") は 実行されているのですが、trace("mId= "+mId) での mId は表示されませ んし、点のMC("markA"+mId)も出ません。 どうしたらいいでしょうか?
>>982 frame per secondだと思うのですが、違うのかな。
982は頭の不自由な子だから気にしないで
国際電話と市外通話を一緒のレスポンスでというのは無理でしょ。
>>984 なんか書式が気持ち悪い。
便所に寝室が入ってる感じ
答えじゃなくてごめんね、ごめんね。
SA Playerは高速道路、ブラウザ再生は一般道路みたいなもんだと思っとくといいかも。 それと、いくら「東大合格!」と目標をかかげても無理な奴は無理なように PCの能力をこえるFPSを設定しても出ないものは出ない。 目標を下げる、つまりFPSを低めにするか描画内容を単純化するしかない。
>>991 SAプレイヤーとプラグインプレイヤーは全然処理速度が違うんですか。
知らなかった・・
勉強になりましたm(_ _)m
993 :
Now_loading...774KB :2006/02/21(火) 21:56:29 ID:mGaivqJn
処理速度の差はあるが、 IEのソレはswfの処理の重さに関係なく、 本来の実行速度が出ないってバグだよ。
じゃ立てます。 少々お待ちを。
無理だったヽ(`Д´)ノウワァァン
997 :
Now_loading...774KB :2006/02/22(水) 01:52:13 ID:ghjdGLxd
じゃあ。俺が。
ダメだった。ゴメンな。↓頼んだ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。