ActionScript 誰かが物凄い勢いで解答するスレ 10

このエントリーをはてなブックマークに追加
952Now_loading...774KB:2006/02/19(日) 01:51:25 ID:R8+T8tsD
とりあえず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秒ごとに指定関数が呼び出される。
953Now_loading...774KB:2006/02/19(日) 01:52:24 ID:/OgoJ+KT
setIntervalを使うとか。
timerID = setInterval(呼び出し関数・命令, 間隔)
954Now_loading...774KB:2006/02/19(日) 11:04:46 ID:MZfyo/zA
数式解析できたよー。逆ポーランド記法はもう紹介されてたんで、
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];
 }
}
955954: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除算、予期しない値なんかの
エラー処理ははしょってるので実用には難アリ。
あくまでも考え方の参考にでもしてね。
956Now_loading...774KB:2006/02/19(日) 11:42:35 ID:oP2Yfspf
( ´_ゝ`)フーン
957Now_loading...774KB:2006/02/19(日) 14:40:30 ID:P25vGukH
for(i=0;i<10;i++){
hoge(i);
}

function hoge(param){
var str[param] = "test";
}

こんな感じで、str1, str2 str3・・・と
渡したパラメータの番号をつけてローカル変数を作っていきたいのですが、
うまく動作させることができません。
アドバイスをよろしくお願いします。
958Now_loading...774KB:2006/02/19(日) 14:46:21 ID:8ktPPUi4
いったん二分木を生成してから評価を行うのと、
二分木を使わず再帰処理のみで評価を行うのとでは、
どっちが速いですかね?
959Now_loading...774KB:2006/02/19(日) 14:56:03 ID:y3nzH8K8
質問です。
チャットをフラッシュで組み立てたいと思っていて、
発言表示部分をTextAreaのコンポーネントにしました。
「下」にいくほど発言が新しいです。

dialog.text += hoge + "\r";
(dialogがTextAreaの名前、hogeはCGIから受け取った新着発言)

としたんですが、これだとチャットを続けると永久にデータが増え続けてしまいます。
20行くらいいったら古い発言から消去したいんですが、どうすればいいのでしょう・・・?
配列使うんでしょうか。

環境はFlash 8,XPです。お願いします。
960Now_loading...774KB:2006/02/19(日) 14:57:56 ID:s8s9NbuI
>>958
テスト用のswfをアップしたら何人かは実験に協力してくれると思うよ。
961Now_loading...774KB:2006/02/19(日) 15:31:53 ID:R8+T8tsD
>>959
ttp://www.game3rd.com/flash/action/string.htm
ttp://www.game3rd.com/flash/action/array.htm

dialog.text += hoge + "\r";
var list = dialog.text.split("\r");
if (list.length > 20) list.shift();
dialog.text = list.join("\r");

こんな感じでいけるんでない?
962Now_loading...774KB:2006/02/19(日) 15:34:40 ID:y3nzH8K8
>>961
ありがとうございます。さっそく試してみます。
963Now_loading...774KB:2006/02/19(日) 16:59:56 ID:58H4YuB8
>>957
function hoge(param) {
  str[param] = "test";
}

str = new Array(); //配列の作成
for (i = 0; i < 10; i++) {
  hoge(i);
}

functionは呼び出す前に定義する事
varじゃなくて、その前に配列を作成しないと値が入らないよ
964Now_loading...774KB:2006/02/19(日) 17:05:48 ID:58H4YuB8
ごめん配列じゃなくてローカル変数だったね

function hoge(param) {
  this["str" + param] = "test";
}
for (i = 0; i < 10; i++) {
  hoge(i);
}
965Now_loading...774KB:2006/02/19(日) 17:58:42 ID:X1aQEJdQ
同一フレームなら

for (i = 0; i < 10; i++) {
hoge(i);
}
function hoge(param) {
this["str" + param] = "test";
}

の順番でもおk
966Now_loading...774KB:2006/02/19(日) 18:20:23 ID:DY5K+1H5
this[...]じゃ、全然ローカル変数ちゃうがな。
967Now_loading...774KB:2006/02/19(日) 20:02:17 ID:P25vGukH
>>964
ありがとうございます。
ですが、いただいたスクリプトをパブリッシュしようとするとエラーがでてしまいます・・

**エラー** シーン = シーン 1, レイヤー = レイヤー 1, フレーム = 1 :行 2:シンタックスエラー
  this["str" + param] = "test";

**エラー** シーン = シーン 1, レイヤー = レイヤー 1, フレーム = 1 :行 3:予期しない '}' があります。
}

ActionScript エラー数 :2 報告済みエラー :2

どのように処理すればいいのでしょうか
968Now_loading...774KB:2006/02/19(日) 20:35:35 ID:X1aQEJdQ
>>967
あーそりゃ964の書き方が悪いんだわ。
全角スペースでインデントされてるんよ。
969881&905&924:2006/02/19(日) 21:52:15 ID:E9EpxFH4
文字列の記号を演算子に変換 -3 (Flash電卓)

色々なアドバイス有難うございます。
四則計算はできるようになりました。

お試し下さい>>> http://www.uploda.org/uporg317136.zip.html
※DL→解凍後、HTMLから起動して下さい。
970Now_loading...774KB:2006/02/19(日) 22:40:36 ID:5jEKhGWO
>>967
タイムライン変数で良いなら関数なんて無理に使わんでも
for(i=0;i<10;i++){this["str"+i] = "test";}
で、良いんじゃないの?
971Now_loading...774KB:2006/02/20(月) 05:34:40 ID:0YCcku9R
>>969
つか、Flash単体で動かないって、、、Flash電卓じゃないじゃん

>>967
Flashでは配列はローカルじゃないよ。
どういう用途でとか書いてくれれば、みんなよくわかると思うし、
解決策たくさん出てくると思う。
972Now_loading...774KB:2006/02/20(月) 10:02:31 ID:JOdy/gl4
配列だったらこの形でローカル変数になるしょ

unko();
function unko(){
var arr = new Array();
for(i=0;i<10;i++){arr[i]="test";}
trace(arr);}
trace(arr);
973Now_loading...774KB:2006/02/20(月) 10:22:28 ID:0YCcku9R
うん。言いたかったのはstr1,str2という変数を作り出す必要があるの?てことなんだ。
974881&905&924:2006/02/20(月) 18:51:24 ID:2psipxBT
>>971 つか、Flash単体で動かないって、、、Flash電卓じゃないじゃん

あー、それは突っ込まないで下さいw
975Now_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 = 」以降を青色にしたいのですが、何も変化が現れません。
間違いのご指摘を願います。
976Now_loading...774KB:2006/02/21(火) 00:58:27 ID:YXRwvR1l
>>975
テキストフィールドにcolorとかfontっていうプロパティはないよ。
それをやるならTextFormatクラス。
部分的に色を変えたいならTextField.html=trueにして、TextField.htmlTextにHTMLを書く。
[TextField] はテキストフィールドのインスタンス名ね。変数名じゃないよ。
977975:2006/02/21(火) 01:43:57 ID:i4Vni9Lo
>>976
どうも。
TextFormatクラスですね。「ActionScriptポケットリファレンス」(馬場ぎんが 著)
を見ていたのですが、「Flash ActionScript 逆引き大全550」(ITフロンティア)
のp218以降に例が書いてありました。
本を読みながらやってみます。
978975: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 = ";
}

としましたが、変化がまだ現れません。ご指摘ねがいます。
979Now_loading...774KB:2006/02/21(火) 03:31:04 ID:WMl2Ag4U
>>978
答えを一発で教えてやることも出来るが、あえて教えてあげない。
理解が不十分な関数やクラスが出てきたなと感じたら、
ヘルプで基礎的な知識を、そしてGoogleでノウハウを会得すべし。
980975&978:2006/02/21(火) 09:11:18 ID:bqmYG2Ht
>>979
ヘルプやGoogleを見ましたが、よく分かりませんでした。とりあえず、
_root.disp = _root.disp+"Y = "; をon (press)処理の先頭に置いたと
ころ、希望する書式になりました。
ただし、Y = の後に文字を入れると、元の書式に戻りました。これを改善する
ため、_rootのフレームアクションでonEnterFrame内に書いたところ、入力
の際一瞬元に戻りますが、希望する書式になります。
※setNewTextFormat()は未だ試していません。

一応解決しましたが、皆さんの解決法とは違いますでしょうか?
981Now_loading...774KB:2006/02/21(火) 17:14:14 ID:g9hzywSR
IEのバグで、設定したフレームレートより低いFPSで再生されるってのがあると思うのですが、
ttp://numerous.org/bazooka/mt/archives/2004/05/15_144104.html
ここに載ってる解決策をしてもなお
flash player単体で動作させた速度には到底およびません。

何か解決策はないものでしょうか?
982Now_loading...774KB:2006/02/21(火) 17:24:53 ID:4LTFSNF5
>>981
FPSの意味解ってる?
983Now_loading...774KB:2006/02/21(火) 18:24:49 ID:u4ByeRcQ
わかってるんじゃね?
984Now_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)も出ません。
どうしたらいいでしょうか?
985Now_loading...774KB:2006/02/21(火) 18:59:04 ID:21qMzZlM
>>984
スコープの問題では?
986Now_loading...774KB:2006/02/21(火) 19:22:32 ID:g9hzywSR
>>982
frame per secondだと思うのですが、違うのかな。
987Now_loading...774KB:2006/02/21(火) 19:33:10 ID:sYc6Ncku
982は頭の不自由な子だから気にしないで
988Now_loading...774KB:2006/02/21(火) 19:53:50 ID:4LTFSNF5
>>987
すまんの、頭の悪いやつがスレ主で
989Now_loading...774KB:2006/02/21(火) 19:56:37 ID:4LTFSNF5
国際電話と市外通話を一緒のレスポンスでというのは無理でしょ。
990Now_loading...774KB:2006/02/21(火) 20:27:16 ID:fCcRPsV6
>>984
なんか書式が気持ち悪い。
便所に寝室が入ってる感じ

答えじゃなくてごめんね、ごめんね。
991Now_loading...774KB:2006/02/21(火) 20:28:08 ID:YPZ7ifKI
SA Playerは高速道路、ブラウザ再生は一般道路みたいなもんだと思っとくといいかも。
それと、いくら「東大合格!」と目標をかかげても無理な奴は無理なように
PCの能力をこえるFPSを設定しても出ないものは出ない。
目標を下げる、つまりFPSを低めにするか描画内容を単純化するしかない。
992Now_loading...774KB:2006/02/21(火) 20:32:07 ID:g9hzywSR
>>991
SAプレイヤーとプラグインプレイヤーは全然処理速度が違うんですか。
知らなかった・・
勉強になりましたm(_ _)m
993Now_loading...774KB:2006/02/21(火) 21:56:29 ID:mGaivqJn
処理速度の差はあるが、
IEのソレはswfの処理の重さに関係なく、
本来の実行速度が出ないってバグだよ。
994Now_loading...774KB:2006/02/21(火) 23:56:53 ID:4LTFSNF5
すまーん、例によってホスト規制でたてれないので、誰かお願い。
修正済みテンプレは以下。あと、このスレかどこか忘れたけど過去ログ検索の
HPつくっていただいたとこのURL探しきれんかった、、もし記録してる方いれば
追加情報にお願いします。

タイトル
ActionScript 誰かが物凄い勢いで解答するスレ 11

>>1の内容は以下

AcitonScriptのことなら
初歩的な質問でもなんでもおk

見れない、保存したい、flashを作りたいはスレ違い
下記の関連スレ、超基本的な質問へ。

●質問する時は自分の環境を書く
書いてない場合WinXP,FlashMX2004(AS2.0以降)を前提で
●質問はものすごい勢いじゃなくて結構
●できるだけコードも示す
●自分が試してみた処理を書く

直前スレ
ActionScript 誰かが物凄い勢いで解答するスレ 10
http://pc8.2ch.net/test/read.cgi/swf/1134826648/l50

関連スレ
Flash製作初心者の質問スレッド レイヤー32
http://pc8.2ch.net/test/read.cgi/swf/1133555936/l50
Flashの超基本的な質問はここでしろ! part26
http://pc8.2ch.net/test/read.cgi/swf/1136837485/l50
サイト、書籍、関連情報は>>2-10あたり
995Now_loading...774KB:2006/02/22(水) 01:01:57 ID:FKf/UdR+
じゃ立てます。
少々お待ちを。
996Now_loading...774KB:2006/02/22(水) 01:05:06 ID:FKf/UdR+
無理だったヽ(`Д´)ノウワァァン
997Now_loading...774KB:2006/02/22(水) 01:52:13 ID:ghjdGLxd
じゃあ。俺が。
998Now_loading...774KB:2006/02/22(水) 01:55:25 ID:ghjdGLxd
ダメだった。ゴメンな。↓頼んだ
999Now_loading...774KB:2006/02/22(水) 02:46:07 ID:bdFR4E5A
なれてないせいかとんでもない間違いをしたorz
http://pc8.2ch.net/test/read.cgi/swf/1140543822/
新スレできるまで退避で使ってくれ。
まかせた↓
1000Now_loading...774KB:2006/02/22(水) 02:56:01 ID:oA6EbtOg
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。