[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/19 02:53 / Filesize : 240 KB / Number-of Response : 671
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:Now_loading...774KB mailto:sage [2011/12/25(日) 02:37:34.48 ID:APghLI2o]
AcitonScriptのことなら
初歩的な質問でもなんでもおk

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

●質問する時は自分の環境を書く(AS2,AS3の別も)
●質問はものすごい勢いじゃなくて結構
●できるだけコードも示す
●まず自分がやりたいことを明確に書く。そのために試してみた処理を書く

前スレ
ActionScript 誰かが物凄い勢いで解答するスレ29
toro.2ch.net/test/read.cgi/swf/1309349827/

関連スレ
Flashの超基本的な質問はここでしろ! part42
hibari.2ch.net/test/read.cgi/swf/1305783143/
※初心者は↑こちら推奨

ActionScript ライブラリ総合
hibari.2ch.net/test/read.cgi/swf/1308658905/


303 名前:Now_loading...774KB mailto:sage [2012/02/17(金) 18:44:33.05 ID:KEIXzgCy]
>>300
言ってることがわからんが、
パーティクルとかの画像処理を短い可変長で処理することなんか考えにくいんだが。
ある程度まとまった同じ物を高速に処理したいから(処理したい要望が多いから)、
ベース型固定の配列Vector<T>が追加されたわけだ。

たいした数も無いのにわざわざ制限の多いVector使う必要性を感じない。


304 名前:Now_loading...774KB mailto:sage [2012/02/17(金) 18:47:47.74 ID:KEIXzgCy]
う、間違えた
>>303>>301

305 名前:Now_loading...774KB [2012/02/17(金) 19:45:50.63 ID:e9Df/ptL]
Array・Vectorのことは
みんなに教えてもらってすこしづつ分かってきたんですが、
本で三つのムービークリップをArrayを使用して
回転させる例があったんですけど、
var nWidth :int=stage.stageWidth;
var arr :Array=[my0_mc.my1_mc.my2_mc];
mc_btn.addEventListener(MouseEvent.CLICK,BTA);
function BTA(event:MouseEvent):void{
for(var i : uint = 0; i <nLengt; i++){
var my_mc:MovieClip=arr[i]
my_mc.rotation+=5;
}}
これがよくわからないこと多くて。
var nWidth :int=stage.stageWidth;←よくわからない。

var arr :Array=[my0_mc.my1_mc.my2_mc];←よくわかる
mc_btn.addEventListener(MouseEvent.CLICK,BTA);←よくわかる
function BTA(event:MouseEvent):void{←よくわかる
for(var i : uint = 0; i <nLengt; i++){←全然わからない。
var my_mc:MovieClip=arr[i]←よくわからない。
my_mc.rotation+=5;←my_mcでまとめて指示出せるの!?
}}


var arr :Array=[my0_mc.my1_mc.my2_mc];
mc_btn.addEventListener(MouseEvent.CLICK,BTA);
function BTA(event:MouseEvent):void{
for each(var AAA:Object in arr){
AAA.rotation+=5;}}
だけだと思っていたんですがスイマセン教えてください!

306 名前:Now_loading...774KB mailto:sage [2012/02/17(金) 20:17:32.09 ID:S/ZZMj6I]
>>305
for(var i : uint = 0; i <nLengt; i++){
これは、、、最初にiに0を入れて、iがnLengt未満の間はループして、毎ループ最後にi++するって命令
今回の場合、nLengtは3だから、iが0〜2の間だけループする

だから、for eachで書くなら
for each(var my_mc:MovieClip in arr){
my_mc.rotation+=5;}}
と同じ

nWidthはそのソース内で全く使ってないな


307 名前:Now_loading...774KB mailto:sage [2012/02/17(金) 20:18:58.14 ID:S/ZZMj6I]
>>303
いや。うん。だから、長い可変長で使うのが普通だよね
>>292が「Vectorは固定長を意識」とか言ってるから、それに対してレスしてるんだけど


308 名前:288, 299 mailto:sage [2012/02/17(金) 20:28:14.13 ID:L5yN7HP6]
>>301

(´・ω・`) ゴメンチャイ。見落としていた。


309 名前:Now_loading...774KB mailto:sage [2012/02/17(金) 20:31:12.17 ID:+5zzT17q]
Vectorは密な配列だから速いけど挿入や削除の処理が重くなる
fixedなんてプロパティがあるくらいだしな
とはいえ、万単位の長さで処理くらい行かないと体感できるほどの差は出ないだろうけど

310 名前:Now_loading...774KB mailto:sage [2012/02/17(金) 20:36:28.18 ID:KEIXzgCy]
>>307
え?可変長にしたときってのが…具体的に言うとpush自体をやりたくないんだけど。
help.adobe.com/ja_JP/as3/mobile/WS4bebcd66a74275c3a0f5f19124318fc87b-7fff.html

>Vector のサイズが時間よりも先に指定されない場合、Vector の容量が不足すると、サイズが増えます。
>Vector のサイズが増えるたびに、メモリの新しいブロックが割り当てられます。
>Vector の最新の内容がメモリの新しいブロックにコピーされます。
>データを余分に割り当てて複製することにより、パフォーマンスに影響があります。
>上述のコードでは、Vector の初期サイズを指定することでパフォーマンスが最適化されています。
>ただし、コードの保守性は最適化されていません。保守性も改善するには、再利用された値を定数に保存します。
俺の勘違いかと思って調べちゃったよ。

俺の主張は最初から、Vectorを利用する時点でパフォーマンスが気になってるんだろうから、
パフォーマンスに影響ある可変長の利用をやめておこうってことだ。

311 名前:Now_loading...774KB mailto:sage [2012/02/17(金) 20:37:40.43 ID:KEIXzgCy]
>>309
100x100で万オーダーだよね。



312 名前:Now_loading...774KB [2012/02/17(金) 20:48:16.98 ID:4bug8P+G]
うーん難い…。勉強不足スイマセン。
全部まとめて指示出すときは
>>306
for each(var AAA:MovieClip in BBB){○○○○○○;}のカタチで問題ないってこと?
あと例えばさっきの記述でムービークリップ1個だけに指示出すなら
var my_mc:MovieClip=arr[1]みたいな記述したほうがいいのですか?
質問トンチンカンかもしれませんが教えてください。
my_mc.rotation+=5;←my_mcでまとめて指示出せるのはArrayで格納してるから?

313 名前:Now_loading...774KB mailto:sage [2012/02/17(金) 21:13:06.07 ID:ccaQv1M3]
>>305
>var nWidth :int=stage.stageWidth;
これはstageのstageWidthを取得する毎にわざわざstageから値を参照するより
一度変数に保持してその値を使う方がパフォーマンスがいいとされてるから
これが使えるのは「何度参照しても必ず同じ値が返ってくる」事が前提
ただ今回は>>306が書いてるように使ってないから意味がないけど

>var my_mc:MovieClip=arr[i]
これも同じような理由
でもFP10.1ぐらいから配列アクセスのパフォーマンスが改善されてるから
やってもやらなくてもいいと思う

Vectorの重要なところは指定した型以外の値が代入されない事が保証されてる事だと思う
仮に間違えてarrに数字を入れた場合Arrayだとmy_mc.rotation+=5;を実行した時に
初めてエラーになるけどVector.<MovieClip>ならそもそも数字が入らないから
null以外のチェックは不要になる

314 名前:Now_loading...774KB mailto:sage [2012/02/17(金) 21:33:36.38 ID:S/ZZMj6I]
>>310
うーん。だから、設計思想の違いでしょ
ループなんか画面描画に比べたら微々たるものなんで、保守性を考えたら無視しちゃうね、って


315 名前:Now_loading...774KB [2012/02/17(金) 21:37:34.08 ID:4bug8P+G]
>>313
あざす。なんとなく分ってきました 。

ちなみに例えばムービークリップaとbとc、ボタンAとBとCがあって。
Aを押すとa表示 b.c非表示、
Bを押すとb表示 a.c非表示、
Cを押すとc表示 a.b非表示したいとき、

a.b.cをArrayで格納して(arr1に格納)
Aを押すとarr1非表示 a表示
Bを押すとarr1非表示 b表示
Cを押すとarr1非表示 c表示みたいにできるのは分ったんだけど

A.B.CもArrayで格納して(arr2に格納)
arr2を押すとarr1非表示 を最初に記述しといて
Aを押すとa表示
Bを押すとb表示
Cを押すとc表示みたいにしたほうがいいんですかね

基本的にスプリクトはできるだけまとめたほうが
パフォーマンスがよくなる?記述を短く分りやすくするため?
上の3パターンだったら結局処理作業は一緒なのですか?
またはもっといいやりかたがある?

316 名前:Now_loading...774KB mailto:sage [2012/02/17(金) 22:01:39.51 ID:S/ZZMj6I]
うーん。最後のが良いんじゃない?

俺ならボタンにムービークリップへの参照を持たせちゃうかな
言ってる意味わからないかも知れないけど

317 名前:Now_loading...774KB mailto:sage [2012/02/18(土) 00:00:36.74 ID:HDvxo8mQ]
>> 314
ちがうなぁ、設計思想より後のチューニングレベルの話。

>ループなんか
これを本気で言っているのならびっくりするが。
ループの中で描画する要素なんかいくらでもあるだろ。

>ループなんか画面描画に比べたら微々たるものなんで
ここを考えて設計思想で語るなら、
微々たるような場合にVectorを使う選択をしないとなるな。
Arrayで十分と。>>313が言うような仮に間違えた場合ってのがあったとすると、
それは設計がまずいって事になる。

>>315
俺も最後のやり方を選択するだろうなぁ。
ボタンの役割がそれしかないなら、ボタンのイベントハンドラは一つにまとめてしまう。
最初にすべて非表示にして、イベントのソースがAならa表示っていう風に。


318 名前:Now_loading...774KB [2012/02/18(土) 01:20:01.81 ID:88fQmfvS]
>> 317
for each(var element1:Object in arr1){
element1.addEventListener(MouseEvent.CLICK,element1BTA);
function element1BTA(event:MouseEvent):void{
for each(var element2:Object in arr2){
element2=false;
}
}
}
こんな記述でOKですか?

度々の初心者質問ですいません。
ボタンを押すスプリクトのときじゃなくて、
element1.element2を最初に設定できておける?
例えばarr2を別のボタンで非表示にするときは
そのつどfor each(var ○○○:Object in arr2){○○○.visible=false;}
で表示しなければならない?arr1もしかりで


319 名前:Now_loading...774KB mailto:sage [2012/02/18(土) 02:51:11.72 ID:HDvxo8mQ]
>>318
途中から混ざったので混乱させると申し訳ないが、
>>315での質問をベースに考えると、
・ボタンが押されたら、a,b,c非表示処理
・ボタンを判別して一つを表示
と考えられる。

> ボタンを押すスプリクトのときじゃなくて、
> element1.element2を最初に設定できておける?
これはできる。
btnA.addEventListener(MouseEvent.CLICK,clickHandler);
こんな感じで、ほかのボタンについてもやればいい。そのあとに、clickHandlerの中身で、
function clickeHandler(event:MouseEvent):void {
// 全要素非表示
for each(var elm:Object in arr1) {
  elm.visible = false;
}
// ボタンに対応する要素を表示
var clickedBtn:Sprite = event.currentTarget as Sprite;
clickedBtn.visible = false;
switch ( clickedBtn ) {
 case btnA:
  a.visible = true
  break;
 case btnB: //以降略

こんな感じでいけると思うが。書いてて、引数を渡してしまうほうがいいことに気づいたがまぁこっちを理解してくれ。

320 名前:Now_loading...774KB [2012/02/18(土) 21:11:41.39 ID:teRRq7Cr]
>>319理解できぬー。
>>318みたいなやり方はあまりよくないですか?
    

321 名前:Now_loading...774KB mailto:sage [2012/02/18(土) 21:36:45.79 ID:Lkc19fcT]
>>320
一個一個よんだらわかるだろ



322 名前:Now_loading...774KB mailto:sage [2012/02/18(土) 22:27:20.41 ID:3YkaDqya]
やり方の良し悪しとか聞かれてもな
動くなら何でもええがな


323 名前:Now_loading...774KB [2012/02/19(日) 00:28:55.69 ID:yeBKkr9h]
>>322確かに。
スプリクトをまとめられる方法が
あったら活用したいなと思って。
今こういうのできないかなと思っているのは
ABCの3つのインスタンスをそれぞれ
マウスが上にきたとき半透明になって
マウスが外れたら元に戻るようにしてるんですけど
これも一括で指示できたらなと
>>319理解できたらできそうですかね?



324 名前:Now_loading...774KB [2012/02/19(日) 10:56:59.05 ID:GNL5xJF/]
>>319少しTargetのこと理解しました。
>>323だったら、Target利用すると
Arrayでムービークリップを格納しなくても
ABCを親インスタンスMATOMEとして設定して
MATOME.addEventListener(MouseEvent.MOUSE_OVER,matome1);
MATOME.addEventListener(MouseEvent.MOUSE_OUT,matome2);
function matome1(eventObj:MouseEvent):void {
eventObj.target.alpha=0.5;
}
function matome2(eventObj2:MouseEvent):void{
eventObj2.target.alpha=1;
}
みたいな感じでできました。

325 名前:Now_loading...774KB [2012/02/19(日) 18:26:03.76 ID:f8M6VGgs]
Flash Builder 4.6/Windows7です。
s:Imageを使ってmxmlにswfを埋め込んで表示すると、スタンドアロンFlash Playerで読み込んで
ウィンドウを拡大したときにビットマップを埋め込んだときみたくジャギーが出てしまいます。
直接swfを読み込んで拡大するとシェイプなので当然スムーズな拡大ができるのですが、
mxmlに埋め込んだ状態でも同じ状態にするにはどうすればよいのでしょうか?

326 名前:Now_loading...774KB mailto:sage [2012/02/19(日) 23:13:51.62 ID:DmeOPZ/t]
>>325
UIComponentを継承したクラスを作ってそこに埋め込んで内部でインスタンス化→addChildするとか
んでmxmlに作ったクラスをタグで書く

327 名前:Now_loading...774KB [2012/02/20(月) 03:47:51.30 ID:u7ALn6Bw]
AS3でのXMLで質問です。

MCのswapChildrenみたいな感じでノード(要素)の順番入れ替えはどうやれば
簡単にできますか?
個別の参照は簡単に出来ますが、列挙する際や全体を見渡す際に順番が重要なので。
ヘルプを見ましたが、insertChildAfterやinsertChildBeforeは挿入のみでした。


328 名前:Now_loading...774KB mailto:sage [2012/02/20(月) 09:14:36.01 ID:tqhvBSLI]
AS3です
HogeからFooをnewし、FooコンストラクタからそのままBarをnewしようとすると、
「引数の数が正しくありません。1 個以下であることが必要です。」
と出るのですが、コンストラクタからのインスタンス化はよくないのでしょうか

329 名前:Now_loading...774KB mailto:sage [2012/02/20(月) 09:53:11.05 ID:XuPCcF8d]
なわけねえだろ
親切にコンパイルエラーの原因書いてくれてるのにガン無視かよ

330 名前:Now_loading...774KB mailto:sage [2012/02/20(月) 10:39:06.49 ID:tqhvBSLI]
>>329
ありがとうございます
Barの引数をいくつにしてもそう出るんです
例えば、Barの引数を3つにして、Fooから1つ以下を渡せば、エラーは出ません
逆に、HogeからBarをnewすれば(コンストラクタじゃない位置から)、
「引数の数が正しくありません。正しくは 3 です。」と出てくれます

331 名前:Now_loading...774KB mailto:sage [2012/02/20(月) 13:11:26.24 ID:yqyk706o]
>>327
AとBがあったらAを参照した値A一時変数に入れといてBをAにコピー その後変数をBにコピー
という自作関数作ればおk

>>330
コンストラクタと呼び出し側の引数の数合ってないとだめだろw
不特定多数の引数にしたいなら
pubkic function Foo( ...ary ){
trace("1個目の引数:"+ary[ 0 ]+"  2個目の引数:"+ary[ 1 ]+"  3個目の引数:"+ary[ 2 ]);
みたいな感じでがんがれ



332 名前:Now_loading...774KB mailto:sage [2012/02/20(月) 13:12:33.57 ID:yqyk706o]
pubkic じゃなくて publicなw

333 名前:Now_loading...774KB mailto:sage [2012/02/20(月) 13:43:25.41 ID:ce4zyWnj]
再現するクラスのコード見せてみ。噛み合ってないわ。

334 名前:Now_loading...774KB mailto:sage [2012/02/20(月) 14:54:49.96 ID:tqhvBSLI]
>>333
すみません、newがなかっただけっぽいです・・
テストということで、戻り値を受け取ってなかったのがダメでした

>>331
可変個引数ですが、まだまだ遠い道です・・

package{
import flash.display.*;
import hoge.*
public class Main extends flash.display.Sprite{
public var hoge_:Hoge;
public function Main(){
hoge_ = new Hoge();
}}}

package hoge{
public class Hoge{
public function Hoge(){
HogeOne(1, 2, 3); //←newがない
}}}

package hoge{
public class HogeOne{
public function HogeOne(h1:int, h2:int, h3:int){
}}}

335 名前:327 mailto:sage [2012/02/21(火) 07:31:32.75 ID:dLQZS1YQ]
>>331
やっぱそういう方法に落ち着くのですね。


336 名前:Now_loading...774KB mailto:sage [2012/02/21(火) 12:24:52.20 ID:6Qa4wvjV]
>>314
このループなんかって書いてる奴はホントに思ってるのかな?
ループの中でbitmapdata触ったりしないんだろうか??

337 名前:Now_loading...774KB mailto:sage [2012/02/21(火) 14:54:41.75 ID:ePNvSvPU]
FlashProとBuilderの連携で困ったことがあったので質問

BuilderだとコードヒントでremoveChildrenが出てくるんだけど
Proの方でswf書きだそうとすると
#1069: flash.display.Sprite にプロパティ removeChildren が見つからず、デフォルト値もありません。
が出てしまう。
ライブラリパスはどっちも同じように設定してるはずなんだけど・・・
removeChildrenってFP11のplayerglobal.swcに入ってる・・・で間違ってないよね?

338 名前:Now_loading...774KB mailto:sage [2012/02/21(火) 15:20:56.94 ID:vQq6hp4a]
何をどうやったかしらんけどここみれ。
cuaoar.jp/2012/01/flash-player-112-air-32-1.html
ライブラリパス設定しても無駄だから。

339 名前:Now_loading...774KB mailto:sage [2012/02/21(火) 16:28:48.33 ID:ePNvSvPU]
ありがとう 試してみる

340 名前:Now_loading...774KB mailto:sage [2012/02/21(火) 16:47:31.45 ID:ePNvSvPU]
ExtensionManagerが管理者権限で起動しても権限どうたらこうたら出てしまうので、
できるまでremoveChildrenやら使わない方向で行きます・・・

341 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 00:32:42.80 ID:3hHo2Jqu]
removeChildrenなんてなくてもいいだろ
Stage3D使わないのにターゲットをFP11にする意味はないな



342 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 00:49:07.55 ID:Tf4jVTsr]
>>336
いや「ループ自体」は速くなるんだろうけど、その中のdrawに掛かる時間は一緒でしょ?


343 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 08:04:54.01 ID:oirG2aPR]
>>341
問題の焦点そこじゃない

344 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 12:28:04.09 ID:979q3B4N]
>>342
ループ自体が早いって話はなに?

ArrayよりVectorのほうが高速に要素にアクセス出来るっていう話が前提で、
描画時間にくらべれば、要素にアクセスする時間なんか無視できるぐらい小さいっていってんの?



345 名前:Now_loading...774KB [2012/02/22(水) 13:02:16.19 ID:oX4oxnAi]
Flashライブラリを作っているんだけど、ちょっとした便利関数を作る場合
・カテゴリごとにパッケージ作って丸裸の関数を入れるか、
・それともカテゴリごとにクラス作ってstaticメソッドとして実装するか
どっちの方が良いのだろうか?Adobe的にはどっちのやり方を推奨しているのかな

346 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 13:05:00.14 ID:qhKKZGjt]
チェスやオセロなんかの大量の単純計算ならArrayとVectorで速さに明確な差が出るが
比較的重い描画系処理ならたいして変わらないって話じゃない?

347 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 13:08:46.30 ID:qhKKZGjt]
>>345
推奨なんか特に無いお
便利関数ならカテゴリ云々はわからんがstatic実装だろうな〜
複数インスタンスなんかめったに利用しないだろうしstaticの方が速い

348 名前:Now_loading...774KB [2012/02/22(水) 13:22:04.90 ID:oX4oxnAi]
>>347
いや、ウチが言いたいのは
package 大カテゴリ.小カテゴリ{ public function 便利関数():void{...} }
か、あるいは
package 大カテゴリ
{
 public class 小カテゴリ{ public static function 便利関数():void{...} }
}かなんだが……。
static実装には同意

349 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 13:42:30.91 ID:meU+M1II]
コミュ障ばっかだなあw

350 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 13:59:31.87 ID:979q3B4N]
>>346
そういう話ならわかるが、そもそもこの話のもとは>>292からはじまってて、
同じ人かわからないけど、
>>301
>えー。そもそも大量に固定長の配列が必要になるって、何?
とか質問があるわけよ。
>>300
>ループを高速に処理したいからVector使うかってなるわけで、
って所が前置きとしてあるのに、
>>301
>えー。そもそも大量に固定長の配列が必要になるって、何?
って…。
100x100x100のループとか普通にやるけどな。
ある一定の配列アクセスが発生するなと思った場合、
固定長Vectorで宣言することでパフォーマンスが稼げるから固定長になるだけなんだが。

FPS稼ぐとかそういったことやる必要が無い人には意識することが無い事なのかな??

可変長であることが確定してる、もしくは動的にしか配列長が決まらない場合は
素直にArrayを使えば良いだけで、
ジェネリック型としてVectorを使いたいってだけで、Vectorでpush使いまくってたら、
そのたびに内部的に再構築されてArrayより遅くなることがわかりきってるわけよ。
保守性とか言ってたけど、型固定で代入時にコンパイラチェックされることが重要とは
とても思えない。Arrayで作ったときに「うっかり」別の型のものを代入する?
宣言時などはあっても、ループ内では考えにくいがなぁ??

最初から使いどころの話をしているわけで、
保守性考えたらVectorを固定長で使わないっていう主張がまるで理解できない。

351 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 14:25:53.38 ID:meU+M1II]
型が不定なのがクソキモいって人もいるんじゃないの?
君がVector可変で使うのがクソキモくて理解できないのと同じで。



352 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 14:28:00.20 ID:meU+M1II]
目的が速度だったらpushしてるのはアホだろうけど、必要感じてないらしいからね。

353 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 14:48:40.70 ID:xEPG2eul]
pushって遅くなんの?
どれくらい?


354 名前:Now_loading...774KB [2012/02/22(水) 15:00:06.86 ID:xEPG2eul]
2乗するのにビット演算の方が速い、みたいな「根本原理」的な話?


355 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 15:01:45.08 ID:xEPG2eul]
ageてスマン

356 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 15:16:44.77 ID:xEPG2eul]
何度もスマン。自分で測ってみたから質問下げる

357 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 15:45:42.66 ID:979q3B4N]
>>351,352
そういう人も居るだろうけどね、Arrayってもともとそういうものだよ??
型固定じゃないとイヤなのに、intとかプリミティブ型で宣言したのに、Booleanをpush出来てしまう
暗黙的型変換が許容できるのがクソキモイ。

必要感じてないのにVector使うのは俺には理解できない。
pushで最大サイズの拡張が行われたら、Arrayより遅くなるのに。

>>353
いまテストしてみた。100万の配列アクセスの場合。
最悪Arrayの4倍遅い
固定長(Fixed)の20倍
wonderfl.net/c/aIfc



358 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 15:48:06.30 ID:979q3B4N]
テストしたんか…俺の20分返せ!w

359 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 18:19:47.27 ID:VgwNTH2O]
俺のいる板だと会話がすぐ煽り合いになるが
マは平和でいいわ


360 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 18:34:28.92 ID:3hHo2Jqu]
>>350
型決定による速度向上と補完による効率があるからぜんぜんちがうよ
pushで使おうがArrayのpushより速いんだし意味ないわけないじゃない

361 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 18:38:48.95 ID:3hHo2Jqu]
ああArrayのpushより遅い場合があるのね
失礼

俺は補完(だいじ まあArrayでもできなくはないけど)と型決定があるから常にVectorを押すよ
push使おうが遅くなるのは出し入れする時だけなんだから、読むときはArrayより速いわけじゃん

ネイティブでArray使わされる場合(filterなど)以外はVectorつかうよん



362 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 19:05:13.98 ID:8QtLEpE+]
push遅いのか

pushみたいな感じので一番速いのなんだろう

363 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 21:37:42.80 ID:979q3B4N]
>>361
遅い場合があるんじゃなくて、ほとんどの場合遅いのよ。

>push使おうが遅くなるのは出し入れする時だけなんだから、読むときはArrayより速いわけじゃん
なんか矛盾してるが。
>読むときはArrayより速いわけじゃん
は間違い無い。ただ、pop,shiftはナシ。

あと、固定長Vectorであれば、書き込みも読込とさほど差が無い。
だからVectorを使う時は>>292と書いわけだが。

>俺は補完(だいじ まあArrayでもできなくはないけど)と型決定があるから常にVectorを押すよ
>ネイティブでArray使わされる場合(filterなど)以外はVectorつかうよん
型決定はどうでも良い。入れる型が異なることがほとんど無いからね。
しかし、補完があるのが大きいってのはわかる。

それでも、キューの様なpush,popを多用する動作においては採用しないし、
何回もアクセスするような場合は変数に取り出すだろう。(foreachであれば最初からでてるわけだし。)
変数に出してやれば補完の問題も解決するし、Arrayだと基本的なテクニックのひとつだしね。

しつこいとよく言われるが、>>296みたいに添字で書くことなんか普通のことなんだけど、おかしい?

364 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 21:56:18.99 ID:3hHo2Jqu]
>>363
添字が基本なことに突っ込んでるんじゃないよ
pushで使わざるを得ない時に時にVectorを使うのはアホっていってるのに対して言ってるの

それから型決定って型が決定してることによるアクセス速度の向上のこと言ってるのよ、どうでもよくないだろ

矛盾してないよ
出し(pop)入れ(push)するときはArrayより遅いかもしれないけど、readする時は確実に速いので使い方如何では一概には言えないでしょ、って意味

365 名前:Now_loading...774KB mailto:sage [2012/02/22(水) 23:29:59.37 ID:979q3B4N]
>>364
えー。Vectorが密な配列、連続したメモリ領域だから早いわけで、
その連続したメモリ領域を確保するためにジェネリクスの構文をわざわざ拡張したんじゃないか。
順序が逆だと思うが。

もし今後拡張でArrayにもジェネリクスが採用されたりした場合、
Arrayも型固定だから速いってことになるよ?

>出し(pop)入れ(push)するときはArrayより遅いかもしれないけど、readする時は確実に速いので使い方如何では一概には言えないでしょ、って意味
出すがpopとは思って無かった。readと思った。
>pushで使わざるを得ない時に時にVectorを使うのはアホっていってるのに対して言ってるの
だれがアホって言ったの?
だいたい>>292でpush使う時に言及しているわけだし、
>Vectorを使いたい時点で固定長を意識した方が良い。
っていうのが何で問題なの?
固定長にするだけでパフォーマンスは確実にあがるわけだよ。
その分気を付けないといけない事が増えるだろうけど。
それを嫌って使わないことを選択することは排除してないけどな?



366 名前:Now_loading...774KB [2012/02/23(木) 04:26:25.09 ID:hlXk4FcN]
調べてみたら固定長であろうが、添字であろうが、pushであろうが
一度領域を確保させたらその後の添字でのアクセス速度は大体同じだった。

初期化時間がほんの少し変わる程度のレベル。
使い回しで運用するなら何も変わらない。
好みでいいよホント。

367 名前:Now_loading...774KB [2012/02/23(木) 22:20:50.15 ID:bCZii22t]
初心者です。
例えばAボタンを押して、
ムービークリップをArrayに格納したarr1を表示するときに
A.addEventListener(MouseEvent.CLICK,Aclick);
function Aclick(event:MouseEvent):void {
for each(var ARR:Object in arr1) {
ARR.visible = true;}
}
と記述した場合、
この「ARR」はまた使えるのでしょうか?
別のスプリクトでarr1を押してムービークリップBを表示するときに
for each(var ARR2:Object in arr1){
ARR2.addEventListener(MouseEvent.CLICK,ARR2click);
function ARR2click(event:MouseEvent):void {
B.visible = true;}
}

最初の記述のfor each(var ARR:Object in arr1) {
2番目の記述のfor each(var ARR2:Object in arr1){ のように
毎回var のあとの変数名はかえなければならないのでしょうか?
基本的な質問ですいません。



368 名前:Now_loading...774KB mailto:sage [2012/02/23(木) 23:17:12.04 ID:4zJ2MKxN]
同じ関数内ならまた使える
他で使いたいなら別の変数で受けておくんだけど >別のスクリプト ってなんやねん
クラスファイルならメンバ変数用意して入れとけば同クラス内のどこからでも参照できる

369 名前:Now_loading...774KB [2012/02/24(金) 00:51:13.38 ID:lFddvvqM]
>他で使いたいなら別の変数で受けておくんだけど
具体的にどうやるのですか?

370 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 00:59:51.37 ID:B98DNoNH]
ARR.visibleとか頭痛くなるからやめて(>_<)

371 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 01:02:16.44 ID:sjrQC//F]
大文字はないな



372 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 01:07:00.75 ID:sjrQC//F]
警告無視すれば、同じ変数名使っても問題なく動くよ
まあコードとしては問題あるから警告出るんだけど

あるいはArray#forEachとか使えば警告出なく出来るかな

373 名前:Now_loading...774KB [2012/02/24(金) 01:49:25.81 ID:mgywVX5W]
スレ違いと分かってながら、人が今見てそうと思って皆にヘルプ><

概要:背景に使う画像が2種あり、それぞれをレイヤーに分けている。
   AVIで書き出すと、レイヤー1を表示、レイヤー2を非表示の場合は
   綺麗に書きだせる。

   レイヤー2を表示、レイヤー1を非表示にして書き出すと
   ムービー全体が荒くなる。文字やそのほかのおオブジェクト全て。

   前者と後者の書き出し方に全く違いは無いはずなのに
   ○一日かけて書き出ししても一向に改善策が分からない。

   教えてエロい人><
   

374 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 02:12:23.40 ID:O3+Z2z4C]
>>373
スレチ
まで読んだ

375 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 08:26:17.63 ID:qyPhU7PI]
AS3のFlash5.5で質問です。

ステージ上にsquareというムービークリップがあります。
そのシンボルはプロパティのライブラリ欄でASリンケージをsquareClassという名前で設定しています。
以下のコードでsquare0〜square9のインスタンスを複製したいのです。

for ( var i:int = 0; i < 10; i++ ) {
var name_str:String = "square"+i;
var myClass:squareClass = squareClass(getDefinitionByName(name_str));
addChild(myClass);
}

ところが、以下のようなエラーが出てしまいます。
ReferenceError: Error #1065: 変数 square0 は定義されていません。
at global/flash.utils::getDefinitionByName()
at test_fla::MainTimeline/frame1()

何が足りないのでしょうか?



376 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 09:57:29.98 ID:eaKQgxO0]
>>375
インスタンスの変数を一度で連番にする方法は、配列に入れるしか無いと思う。間違ってたらごめん
そのgetDefinitionByNameは、クラス名を指定するのであって変数名ではないはず。
つまり、square0〜square9のクラスがあるんだったらいいけど、squareClassしか無いのであれば
エラーだと思う。



377 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 10:58:02.16 ID:Hi2zR84C]
AS2の記述と混同してるっぽいな
AS3なら普通にインスタンス変数複数用意してnewして複製すればおk
var square:Array = new Array();
for ( var i:int = 0; i < 10; i++ ) {
square[ i ] = new squareClass();
addChild( square[ i ] );
}//試してないっす

378 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 11:09:58.85 ID:6mEC4lLr]
クラス名が小文字で始まるのが気持ち悪いが、
stage.getChildByName(name_str)で複製元がとれるんで、
squareClassにcloneメソッド(クラスのメンバを複製するメソッド)を追加して
やってみればいいんじゃないかな。

379 名前:Now_loading...774KB [2012/02/24(金) 11:34:01.04 ID:89pLhC/J]
AS3 Flash5.5の質問です。
入力フォーム(インスタンス名:in_text)に文字を入力して、それをswitch文で一致したものを表示したいのですが上手くいきませんorz

in_btn.addEventListener(MouseEvent.CLICK,in_next);
function in_next(e:MouseEvent){
switch (in_text.text){
case "テスト":
trace("テスト");
break;
default:
trace("なし");
trace(in_text.text);
}
}
traceするとin_text.textにはしっかり テスト と入っています。
どうすればよろしいのでしょうか?;;


380 名前:Now_loading...774KB [2012/02/24(金) 12:28:11.17 ID:yqBxVBmR]
小数点以下の任意の単位で切り捨てたいのですが、うまくできません。
現在下記の公式で切り捨てています。
expr:Number = 切り捨てたい値
digit:Number = 丸めたい単位
Math.floor(expr / digit) * digit

0.3333の0.1未満を切り捨てたい場合、
Math.floor(0.3333 / 0.1) * 0.1 == 0.3の結果を期待したいのですが、
0.30000000000000004となってしまいます。
必要以上に小さい桁を切り捨てたいのですが、どうすればよいでしょうか?

381 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 12:46:27.28 ID:6mEC4lLr]
>>379
そのスクリプトの最後のほうの
trace(in_text.text); で
なし
テスト
と表示されるなら、default側に来てるってことでしょ。

>>380
Numberは浮動小数点だから、0.3ってものが表現できない。
文字列でフォーマットするか、int/unitで処理して10で割るとか
工夫が必要



382 名前:Now_loading...774KB [2012/02/24(金) 12:58:10.79 ID:89pLhC/J]
379です。説明不足すみませんでした。
入力フォームでテストと入力してcase"テスト"と一致させ
テスト
を出力させたいのですが、
381で仰られている通り、テストと入力しても一致せずdefaultに流れて
なし
テスト
と表示されています。
一致させて
テスト
を表示させるにはどこを直せばよろしいでしょうか?

383 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 13:06:58.73 ID:Hi2zR84C]
>>379
var t:String = in_text.text;
switch ( t ){//1回変数で受けてもだめ?

>>380
こうだな
var num:Number = 0.1233456;
num = Math.round( num * 1000) / 1000;//小数点第三位まで
num = Math.round( num * 100) / 100;//小数点第二位まで

384 名前:Now_loading...774KB [2012/02/24(金) 13:27:30.36 ID:lJqfUYy5]
質問があります。よろしくお願いします。
マウスが押されたら

click_del( e , L_zero_n[0] )

という関数を実行するために、次のようなコードをかきました。

L[0].addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEven
t):void{ A( e , L[0] );} );

このように記述した場合は問題がないのですが、これを複数用意するために、


for(i=0; i <10; i++){

L[i].addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEven
t):void{ A( e , L[i] );} );

}

このように記述すると、コンパイルエラーが発生します。

385 名前:Now_loading...774KB [2012/02/24(金) 13:28:01.93 ID:lJqfUYy5]
(つづき)

エラーは関数Aの第二引数に書いているL[i]が存在しないというものです。
なので仕方がなく、

L[0].addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEven
t):void{ A( e , L[0] );} );
L[1].addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEven
t):void{ A( e , L[1] );} );
L[2].addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEven
t):void{ A( e , L[2] );} );



のように0,1,2,3...とひとつずつ手打ちで記述していますが、
どうにもやりきれない思いを感じます。
おそらくスコープの問題なんでしょうが、for文を使って一気に書いてしまう方法は
存在しないのでしょうか? よろしくお願いします。

関数Aは

function A(e:MouseEvent , MC:MovieClip){
MC.x=400;
MC.y=1400;
}

このように、第二引数のムービークリップの配置座標を変更する処理を行っています。

386 名前:Now_loading...774KB [2012/02/24(金) 13:30:13.03 ID:lJqfUYy5]
すいません、上から4行目の

click_del( e , L_zero_n[0] ) :誤

 ↓

A(e,L[0]):正

の間違いでした。申し訳ありません。

387 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 13:43:56.67 ID:6mEC4lLr]
>>382
試したがうまくいく。
初期文字列に空白とかが入っているとか。


388 名前:Now_loading...774KB [2012/02/24(金) 13:49:29.46 ID:89pLhC/J]
>>383
駄目でしたorz
が、tのtraceも加えて気になったことが一つあります。
最後のところで
trace("なし");
trace(in_text.text);
trace(t);
の3つを連続traceしているのですが、結果に改行らしきものが入ります。
なし
テスト
←ここ
テスト

※現在こんな感じです。↓
var t:String;
in_btn.addEventListener(MouseEvent.CLICK,in_next);

function in_next(e:MouseEvent){
t = in_text.text;
switch (t){
case "テスト":
trace("テスト");
break;
default:
trace("なし");
trace(in_text.text);
trace(t);
}
}


389 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 14:11:34.03 ID:6mEC4lLr]
>>388
t.indexOf("\r");
ってやって、-1以外だったら改行コードがはいってることになるね。

390 名前:Now_loading...774KB [2012/02/24(金) 14:24:20.71 ID:89pLhC/J]
>>389
trace(t);の下に
t.indexOf("\r"); いれてみましたが、
何も返ってこないですね・・・ということは改行コードが入っているのかな?

391 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 14:28:27.96 ID:6mEC4lLr]
あ、すまん。
trace(t.indexOf("\r"));
ってことです。



392 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 14:31:58.80 ID:N7X/EAID]
>>384
iの値は保持されないので、
Dictionary使うとか、L[i]にiの値を入れるための変数定義するとか

393 名前:Now_loading...774KB [2012/02/24(金) 14:34:27.31 ID:89pLhC/J]
>>391
3が返ってきました('-';
-1じゃないので改行が入ってるってことですね(T-T)


394 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 14:42:57.07 ID:6mEC4lLr]
>>384

> L[0].addEventListener(MouseEvent.MOUSE_DOWN, function (e:MouseEvent):void{ A( e , L[0] );} );
ここと
>function A(e:MouseEvent , MC:MovieClip){
> MC.x=400;
> MC.y=1400;
> }
ここを見る限り、
クリックされたオブジェクト(L[0] )がほしいだけだよね。
質問の意図からは外れてしまうが、わざわざFunctionを使うまでもないとおもうんだが。
(別のインデックスのオブジェクトのつもりならだめだが、)

L[i].addEventListener(MouseEvent.MOUSE_DOWN, A );
と普通にイベント登録して、
function A( ev:MouseEvent ) {
 var mc:MovieClip = ev.currentTarget as MovieClip;
 mc.x = 400; // 以降略
}
でよくない?

395 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 14:43:45.74 ID:6mEC4lLr]
>>393
ですねw

396 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 14:47:14.18 ID:Hi2zR84C]
>>384
実行関数は1こにしてインスタンス名を取得して処理を変えるというのが一般的だ
その L :Array には何が入ってるんだお ボタンインスタンスなら

for( var i:int=0; i<L.length; i++ ){
L[i].addEventListener( MouseEvent.MOUSE_DOWN, aaa );
}
function aaa( e:MouseEvent ):void{//実行関数 イベントは複数の引数を指定できない
var st:String = e.currentTarget.name;
trace( st+" クリックしたインスタンス名により分岐処理" );
}

397 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 15:19:13.09 ID:6mEC4lLr]
>>393
TextFieldのmultilineをfalseに設定したら?

398 名前:Now_loading...774KB [2012/02/24(金) 18:55:47.76 ID:89pLhC/J]
>>397
TextFieldのmultilineをfalseに設定して単一行にしてもやはり改行が入っちゃうみたいです(T-T)
とりあえず今、TextFieldのプロパティでClssic TextをTLFに変更したらいけました!(この辺まだ勉強してないので
これでいいのかわかりませんが)
改行コードに四苦八苦(削除だとか統一だとか)させられてますが、もうちょい調べて頑張ってみます。

399 名前:Now_loading...774KB [2012/02/24(金) 20:17:56.71 ID:NSUKlyLJ]
初心者です。
ムービクリップの位置がX座標200/Y座標200にあって
mc.x=100;
mc.y=100;
と記述して位置を変更した場合、
これを『元の位置に戻す』みたいなことはできるのでしょうか?



400 名前:Now_loading...774KB mailto:sage [2012/02/24(金) 22:50:34.03 ID:6mEC4lLr]
一発でできるようなもんはない。
けど、大して難しくないよね。元の位置を覚えておくだけで良いし。

401 名前:Now_loading...774KB [2012/02/25(土) 05:43:25.69 ID:HczmMrqL]
質問です。
下記のような処理を行うとエラーとなります。

package {
import objects.MyObject;
     ~~~~~~~
public class Test() {
 public var objects:Array = new Array();
        ~~~~~~~~
 public function Test() {
  var len = this.objects.length; // ←未定義のプロパティ length と言われコンパイルエラーとなる
           ~~~~~~~~
 }
}
}

このエラーは恐らく objects という名前が衝突していると思われますが、
名前を変える以外でどうすれば回避できるでしょうか?
ご教授お願いしますm(_ _)m



402 名前:375 mailto:sage [2012/02/25(土) 10:36:21.34 ID:3xKaILQw]
AS3のFlash5.5で質問です。
ここの秀でた方々のおかげでムービークリップの複製は出来ました。ありがとうございます。
そこで質問なのですが、

■やりたいこと
ローカル変数としてstageにaddChildした後に、別関数からそれをアクセスしたい。
下記のコードでは未定義としてエラーとなります。

■前提
ステージ上にsquareというムービークリップがあり、ASリンケージはSquareClassとして定義。

■コード
addSquare();

function addSquare():void {
var square:Array = new Array();
for ( var i:int = 0; i < 10; i++ ) {
square[ i ] = new SquareClass();
stage.addChild( square[ i ] );
}
}

function moveSquare():void {
stage.square[ 0 ].x = 100;
}

■結果(エラー)
シーン 1, レイヤー 'レイヤー 2', フレーム 1、行 12 1119: 未定義である可能性が高いプロパティ square に静的型 flash.display:Stage の参照を使用してアクセスしています。


何が足りないのでしょうか?

403 名前:Now_loading...774KB mailto:sage [2012/02/25(土) 11:06:52.72 ID:JczUZ3dj]
>>402
stage["square"][0].xでどうかな?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<240KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef