ActionScript 誰かが物凄い勢いで解答するスレ 17at SWF
ActionScript 誰かが物凄い勢いで解答するスレ 17 - 暇つぶし2ch200:Now_loading...774KB
07/09/04 16:40:25 y0mjhuPr
環境)OS:WinXP-Pro,Mem=1GB,ソフト:Flash8-Pro(Player7,AS2.0)

SharedObjectの新規ディレクトリ(フォルダ)について

path1 = "subhost/";
localSO = SharedObject.getLocal(path1+saveName1, "/");
とすると、#subhostフォルダ(シャープが付く)が作成され、その中に
saveName1.solが保存されました。

ここで作成とは反対に、作成ディレクトリ(フォルダ)の削除と名前の変更を
試みていますが、両方出来ません。
削除・変更は、(セキュリティ上)OSの機能を使わないとやはり駄目なのでしょうか?

なお、新規ディレクトリ内のsolファイルの削除は、saveName1を定義して 
localSO.clear(subhost); でOKでした。

201:Now_loading...774KB
07/09/04 20:32:37 5sDI9kzh
無理じゃないの?
てかそれ目的はなに?

202:Now_loading...774KB
07/09/04 20:47:43 5sDI9kzh
ちなみにプレーヤーの設定画面でローカル記憶領域を0にすれば
該当ドメインのsolをフォルダごと消せるけど
それではだめなの?


203:Now_loading...774KB
07/09/04 21:16:53 yJHGSOK3
質問なんですが、
とある本に、あるMCがマウスカーソルの動きに
遅れてついてくるスクリプトが書いてあり、
マウスカーソルの位置でピタリと止まるには

onClipEvent ( EnterFrame ) {
if ( _x < int ( _root._xmouse/10)*10) {
_x+=10;
} else if ( _x > int ( _root._xmouse/10)*10 {
_x-=10;
}
if ( _y < int ( _root._ymouse/10)*10) {
_y+=10;
} else if ( _y > int ( _root._ymouse/10)*10 {
_y-=10;
}
}

と、目標地点を移動量刻みに分割しろと書いてあったのですが、
同じようじ書いてもMCがカーソルのところで止まってくれません、
どこがいけないんでしょうか?

204:Now_loading...774KB
07/09/05 00:25:26 E+VHtrAA
サウンドプレーヤー作成にて質問です。

目的はループ再生(もしくは“100回”など)なんですが、一時停止後

//再生再開
on(release){
Sound1.start(Sound1.position/1000, 0)
}

と、ボタンアクションに記述すると、一時停止したその曲で終わってしまいます。
この記述のどこに変更、もしくは足せばループ再生的な事ができますか?
ループの回数は30回もあれば十分なので。よろしくおねがいします。

205:Now_loading...774KB
07/09/05 00:46:02 n30z77if
>>203
MCの移動量が10刻み、1にしたら多少マシになるかも

>>204
onSoundComplete = function(){ Sound1.start();}

206:Now_loading...774KB
07/09/05 01:00:45 STXMbf8o
>>203
MCの位置とマウスの位置が10(移動量)以内なら、
MCの位置にマウスの位置を代入するようにする。

207:Now_loading...774KB
07/09/05 01:01:52 Lv8sVb/D
眠くて頭が回んないので、気づいたとこだけ答えると、

>203
int()はMath.int()のまちがいじゃまいか。
あと、そのスクリプトは構文エラーなので、括弧の閉じ方とか
予約語などをもう一度見直した方がいい。
なお、そのスクリプトでどういう動きをしたいのかが分からないが、
「遅れてついてくるMC」なら、俺はこうする

onClipEvent ( enterFrame ) {
_x -= (_x - _root._xmouse) / 10;
_y -= (_y - _root._ymouse) / 10;
}

>204
ボタンアクションにそーゆーことを記述するのはめんどいのでオススメしない。
(つーか「クリップアクション」自体、なるべく避けた方がいいと思う。迷子になりやすいし)
とりあえず、そのスクリプトの「Sound1」を_rootから始まる場所に書き換えてみよう。
そのままだと、ボタンが置かれたMCで定義したSound1に対して
あれこれ仕様という意味になるから、もっと上で定義していたら、とうぜん空振りする。

208:200
07/09/05 01:08:38 l+jAGjWi
>>201
目的は、GUIとまでは行きませんが、solファイルを含むフォルダ操作です。
フォルダの作成に加えて変更・削除が出来れば、かなり自由度が増えると思いました。


>>202 ローカル記憶領域を0
試してみます。

209:Now_loading...774KB
07/09/05 01:20:11 /9kyThfX
>>208
Flashでフォルダ操作やファイル操作は出来ません。

210:Now_loading...774KB
07/09/05 01:39:27 Lv8sVb/D
>208
localSO.data.rootfolder.savedata1=保存内容
とかじゃだめ?
これならdataプロパティ以下の要素を、色々いじれるが。

ファイルを直接作ったり消したりしたいなら、あきらめたほうがいいかも。

211:200
07/09/05 02:25:57 l+jAGjWi
>>209-210
複数のフォルダ内の複数のsolファイルに色々な項目(例:身長,体重,年齢など)を
詰め込みたいので出来れば、フォルダ単位で消去・変更したいです。

なお、「ローカル記憶領域を0」は、まだ試していません。

212:Now_loading...774KB
07/09/05 02:48:47 Lv8sVb/D
>211
var root = new Object();
root = SharedObject.getLocal("root", "/");
saveData1 = SharedObject.getLocal("root/saveData1", "/");
root.data._content = "これはカレントのデータだお";
saveData1.data._content = [{height:"209cm", weight:"135kg", name:"G.馬場"},
{height:"191cm", weight:"102kg", name:"A.猪木"}];
delete saveData1.data._content;

末尾の delete saveData1.data._content; を付けたり外したりするなどして、
*solファイルの有り無し検索してみよう。
自分で実験するヒマを惜しんではいけない。

213:Now_loading...774KB
07/09/05 02:50:53 Lv8sVb/D
申し訳ない、>212の1行目var root = new Object(); は不要です。
・・・ダメだ、頭が働かないのでもう寝る。

214:200
07/09/05 03:30:38 l+jAGjWi
>>212-213
てんきゅう

215:202
07/09/05 04:11:35 oq2Wn5BF
>>200
「ローカル記憶領域を0」は無視でいいよ
話が良くわかってなかった。
フラッシュからASでやれることじゃないし。

216:Now_loading...774KB
07/09/05 14:11:01 ps3RHVx4
外部テキストを読み込むクラスなんですけどテキストが返ってこないんです。
どうすればテキストの内容を返すことができるのでしょうか。

public class Textload extends Array {
var loader:URLLoader;
var datB:Array = new Array();
public function Textload() {
}
public function textloading():Array {
loader = new URLLoader();
loader.addEventListener(Event.COMPLETE, completeHandler);
loader.load(new URLRequest("test.txt"));
}
public function completeHandler(evt:Event):Array {
var datA:Array = loader.data.split("\r");
for(var i:Number=0; i<datA.length; i++){
datB[i] = new Array();
datB[i] = datA[i].split(",");
}
return datB;
}

var playerdata:Array = new Textload();
trace(playerdata.textloading());

217:Now_loading...774KB
07/09/05 14:18:34 8MQmnQEW
待ってないから

218:Now_loading...774KB
07/09/05 15:33:36 be+ocy7a
>>216
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler);

219:203
07/09/05 22:41:07 v6ZxKUeG
ご回答ありがとうございました

>>207
Math.int() にしたらエラーが出ましたが、

onClipEvent ( enterFrame ) {
_x -= (_x - _root._xmouse) / 10;
_y -= (_y - _root._ymouse) / 10;
}

の方法で解決しました。
なぜ、うまくいくのか
じっくり考えたいと思います。


220:Now_loading...774KB
07/09/05 23:06:49 bqmYmjyS
paraflaでFLASHを作っています。
左クリックでのボタン処理ができるように、
右クリックを押すことでアクションをしたいのですが、
どうすれば出来るでしょう?

221:Now_loading...774KB
07/09/05 23:13:09 Oadww5zB
コントロールパネルで左利き用マウスに設定すればいいよ

222:Now_loading...774KB
07/09/06 01:00:17 M+Pv+M6l
>219
自分自身の座標と、目標の座標の10分の1づつ接近していく。
近づけば近づくほど、「10分の1」の値は小さくなる=近づき方が遅くなる
ただし近づいてはいるので、いずれある時点でその差は1を下回る=目標値点で止まる

ただ、止まっているときでも常にカーソルへの移動を試みているので
無駄を省きたいので有れば「マウスカーソル移動でMC移動開始」と
「移動距離が1を切ったらonEnterFrameをやめる」を
実装してもいい(必要ないと思うならしなくてもいいが)。

>220
Macのことを考えてみよう。
(じつは、右クリックはコンテクストメニューなら割り付けられる。方法は勉強してちょうだい)

223:Now_loading...774KB
07/09/06 02:08:02 9lIbtxB2
>>220,222
AS3.0限定かもしれないけど右クリックのアクションも可能だと思うよ。
前に見た解説サイト見つけられないけど・・・

paraflaでもできないわけじゃないかも。

224:Now_loading...774KB
07/09/06 05:53:23 ARIbZD1C
>>216
きちんとヘルプを読めばサンプル載ってるし、そんな書き方しないと思う。
適当に書いて動きませんなんとかして、はひどすぎ。

225:Now_loading...774KB
07/09/06 10:56:05 IA+i6VgC
>>224
いや、適当というつもりはなかったです。
return datB;のところでtrace(datB)するとテキスト取得の確認ができたので、
関数に型名つけてreturnで返そうと思いました。
public function completeHandler(evt:Event):Array {...}
だけだとundefinedとでたので、public function textloading() {...}のほうにも
型名つけないとまずいのかと思ったのですが、そうするとエラーが出てしまい、
どうすればよいのか解らなくなり質問しました。

226:Now_loading...774KB
07/09/06 11:03:19 ARIbZD1C
>>225
ん、まず、なんでArrayから派生させてるのかがわからん
ハンドラのreturnって何が受け取るの?

227:Now_loading...774KB
07/09/06 12:57:09 IA+i6VgC
>>226
swfのタイムラインに以下を記述してtrace結果でテキストの内容を出そうとしました。
var playerdata:Array = new Textload();
trace(playerdata.textloading());



228:Now_loading...774KB
07/09/06 13:09:51 ARIbZD1C
>>227
答えがそれかよw。Classを使ってどうこなら
まず、Javaなりの入門書を一冊やって、OOPを勉強してからだな。

229:Now_loading...774KB
07/09/06 16:14:27 DwFYQP3i
バイナリデータを埋め込んで動的に読み込みたいんですが、
↓のように定義して
[Embed(source='data/stage1.dat', mimeType="application/octet-stream")]
private var GameData1:Class;

↓のようにクラスへの参照を取得しようとすると
var classRef: Class = getDefinitionByName("GameData1") as Class;

↓のようなエラーが表示されてしまいます。
ReferenceError: Error #1065: 変数 GameData1 は定義されていません。


Embedで埋め込んだクラスにはgetDefinitionByName()できないのでしょうか?
どうにかクラス名を動的に指定して読み込む方法はないでしょうか。
環境はWinXP/Flex2 SDK/Flash9 r28です。

230:Now_loading...774KB
07/09/06 16:18:27 eVJwwHFF
そんなもんクラスじゃねーだろ
好きに読み込め

231:Now_loading...774KB
07/09/06 16:20:16 eVJwwHFF
なんだか頭の不自由な奴が自分ルールでクラスだのなんだのを勝手に
定義してわけわからん質問してるのが多いな。同じ奴か?
基本的な本1冊読めよ。馬鹿すぎる。

232:229
07/09/06 16:47:32 DwFYQP3i
すみません。
普通のアセットクラスだと思うのですが、どの辺りが間違っているのでしょうか。

233:Now_loading...774KB
07/09/06 16:59:08 ARIbZD1C
>>232
Flexでの書き方はしらんが、知ってる人でもその質問では答えられんと思う。
何をやりたいのかを書いて、具体的なソースを提示しないとわからんよ。

234:Now_loading...774KB
07/09/06 17:04:44 ARIbZD1C
だいたい
>バイナリデータを埋め込んで動的に読み込みたいんですが、
埋め込んで動的にって。。。どういうことだよw

235:229
07/09/06 17:36:43 DwFYQP3i
質問が下手ですみません。
ゲームのステージデータを埋め込んで、各ステージの初期化時に
読み込みたいのです。

public class Sample01 extends Sprite {

[Embed(source='data/stage1.dat', mimeType="application/octet-stream")]
private var GameData1:Class;
[Embed(source='data/stage2.dat', mimeType="application/octet-stream")]
private var GameData2:Class;
...

}

といったようにSWFファイル内にバイナリデータのアセットとして埋め込んでおいて、
以下のようなステージデータのロードメソッドを呼ぶつもりでした。
動的にというのは、ステージ番号を指定してgetDefinitionByName()に渡す文字列を
変えたいという意味で使いました。

private function loadStageData(stage: int) {
    var classRef: Class = getDefinitionByName("GameData"+ stage) as Class;
    var GameData: ByteArray = new (classRef());
}

埋め込んだデータがJPEG画像などでも同様でした。
別の方法でも構わないのですが、同様のことを実現するにはどういったやり方が
あるでしょうか。宜しくお願いします。

236:Now_loading...774KB
07/09/06 17:44:14 ZRyepadd
だからそれのどこがクラスだよ
今のあんたに何説明しても無駄

237:229
07/09/06 18:08:28 DwFYQP3i

>>236
クラスについては認識が間違っているということで、再度勉強させていただきます。
ステージデータについては、当初以下のような記述で動作していたのですが、
クラス名の指定をgetDefinitionByName()に置き換えられないかと試行錯誤して
いるところでした。この違いについて、まだよく理解できていません。

private function loadStageData(stage: int): ByteArray {
    var data: ByteArray;
   
    switch (stage) {
        case 1:
            data = new ByteArray( new GameData1() );
            break;
       
        case 2:
            data = new ByteArray( new GameData2() );
            break;
        ...
    }
   
    return data;
}

ステージデータは100面分用意する予定なので列挙するのはできれば避けたいと
思っています。>>235にも書きましたが、私の書いたやり方がよりも良いやり方が
あれば、お教えいただけると幸いです。

238:229
07/09/06 18:12:32 DwFYQP3i
バイナリデータを読み込む部分ですが、popforgeというサウンドライブラリの
SoundFactory.classを参考にしました。Classと指定することについては、そう
いうものだと思って、あまり深く考えていませんでした。

239:Now_loading...774KB
07/09/06 18:17:06 ZRyepadd
埋め込む必要があるなら文句いわねーで列挙しろ
めんどくさかったらコードを書くマクロを作れ
実行時に読み込むだけで事が足りるならクラス化しねーでファイル読み込め

240:229
07/09/06 18:45:02 DwFYQP3i
列挙するのを避けたいというのは面倒だという理由ではなく(それこそマクロ等で
処理すれば良いので)、保守性や可読性の観点から現実的ではないと判断しました。
そこで調べた結果行き着いたのがgetDefinitionByName()でしたが、意図した通りに
動作させることはできませんでした。

そもそもgetDefinitionByName()はこのような用途には使えないのか、使い方が悪いのか。
他のやり方があるのか、あるいは列挙以外に方法はないのか…というのが、私の知りたい
ことです。宜しくお願いします。

# 外部ファイルから読み込む案もご提示いただきましたが、今回はデータを埋め込む場合で
# お願いいたします。


241:Now_loading...774KB
07/09/06 18:50:49 ZRyepadd
使い方というより頭が悪いな

242:229
07/09/06 18:59:27 DwFYQP3i
正直、頭は悪いほうなので、独力では解決できずに助言を求めている次第です…。
内容の無い、悪意の回答はご遠慮いただけると幸いです。

243:Now_loading...774KB
07/09/06 19:38:29 wXAs/28X
var classRef:* = new getDefinitionByName("GameData"+ stage)()

var GameData: *= new (classRef)()
じゃね?知らんけど

244:229
07/09/06 20:02:42 DwFYQP3i
>>243
ありがとうございます。
早速試してみましたが、「getDefinitionByName()をコンストラクタとして
呼び出すことはできません」とのエラーが出てしまいました。
型宣言を「*」にする部分を参考にさせていただいて以下のようなコードも
試してみましたが、>>229同様の定義されていないエラーとなってしまいました。

var classRef:* = getDefinitionByName("Sound1");
var GameData:* = new (classRef)();

245:Now_loading...774KB
07/09/06 20:18:08 wXAs/28X
間違えた
var classRef:* = new (getDefinitionByName("GameData"+ stage))()



246:229
07/09/06 20:26:33 DwFYQP3i
>>245
ありがとうございます。
やはり、定義されていないエラーになってしまいます。
getDefinitionByName()に渡している文字列が悪いのかもしれませんが、
traceを見ても「GameData1」になっているので、間違ってはいないと
思うのです。。。

すみません。
>>244では「Sound1」になっていますが、効果音読むところをコピーして
しまいました。正しくは「"GameData"+ stage」と書いてあります。

247:Now_loading...774KB
07/09/06 22:05:25 Ggf2GCKz
>>246
var classRef: Class = getDefinitionByName("GameData1") as Class;
var gameData: GameData1 = new classRef();
これでどう?
GameData1がパッケージ内にあるなら、パッケージ名も書かなきゃだめだよ。

248:229
07/09/06 22:24:58 DwFYQP3i
>>247
ありがとうございます。
コンパイル時に以下のようなエラーとなってしまいました。

型が見つからないか、コンパイル時定数ではありません : GameData1。
var GameData:GameData1 = new classRef();
             ^

GameData1は現在Sample01というクラスの内部でEmbedしている箇所で宣言しています。
パッケージ名は親(?)のSample01には特に指定していないので、GameData1にも付かない
のだと思っています。こういう場合のパッケージ名がどうなるのかは、よく分かって
いません。ソースは以下のような感じです。
---
package {
    import flash.display.*;
    ...
   
    public class Sample01 extends Sprite {
        [Embed(source='data/stage1.dat', mimeType="application/octet-stream")]
        private var GameData1:Class;
        [Embed(source='data/stage2.dat', mimeType="application/octet-stream")]
        private var GameData2:Class;
        ...
       
    }
}
---

249:Now_loading...774KB
07/09/06 22:57:16 IvtJX8zy

っ getDefinitionByName("Sample01_GameData1") as Class;

250:Now_loading...774KB
07/09/06 23:20:52 IvtJX8zy

っ var GameData:* = new (getDefinitionByName("Sample01_GameData1") as Class);

251:229
07/09/06 23:31:26 DwFYQP3i
>>249
うああ、できました!ありがとうございますっ…!
クラスの中のクラス(どう呼ぶのか分かりません)名は、そのように
記述するのですね。勉強になりました。

>>249さん、答えていただいた皆様、本当にありがとうございました。

252:216
07/09/07 10:21:44 /y5tc2Xf
>>228
public class Tashizan {
public function Tashizan() {
}
public function sum(numA:Number,numB:Number):Number {
return numA+numB;
}
}

var goukei:Object = new Tashizan();
trace(goukei.sum(15,3));
//18

のようにreturnで返したかったんですがなにが問題なのでしょうか?
問題点だけでも教えていただけませんか。

253:Now_loading...774KB
07/09/07 14:46:11 QESz89NL
>>216
関数の外にreturn置いてるのとか継承と型指定を取り違えてる風な書き方
3個以上間違いがあると誰も答えてくれないだろうから質問するときは問題点を
絞り込むように単純化した方がいいよ。




254:Now_loading...774KB
07/09/07 17:27:19 G6/Ml+Up
>>252
Arrayから派生してるのは何故?
returnは何が受け取るの?
レスしても、ちゃんと答えない質問者にはレスする気にならん。

255:Now_loading...774KB
07/09/08 22:27:58 rf8QzVNl
WinXP-ProでFlash8-Pro(Ver8.0)を使っています。

lineStyle()で線を点線(あるいは破線)にすることは可能でしょうか?
一応ヘルプを見ましたが、分かりませんでした。

256:Now_loading...774KB
07/09/08 23:10:39 gH/pK9oI
破線はなかったはず。てか、Google。
URLリンク(www.gac.jp)


257:Now_loading...774KB
07/09/09 01:52:20 46xyRfSe
環境はWin, CS3, AS3です。

これまでは_urlでswfの置かれているパスを取得できたと思うんですが、
AS3の場合はどうすればいいでしょうか。

よろしくお願いしますm(_ _)m

258:Now_loading...774KB
07/09/09 02:38:29 lVJTecGh
>>257
_url → flash.display.Loader.contentLoaderInfo
AS2と比べると使い方はちょっと面倒かもな。

AS3ではどうするの?という質問はまず↓を見てみよう。
URLリンク(livedocs.adobe.com)

259:Now_loading...774KB
07/09/09 04:21:40 oX5rL85l
>>257
trace(loaderInfo.loaderURL);

260:255
07/09/09 04:54:02 DAvWqwjE
>>256
有り難うございます。
なるほど、細かい点(線分)の集合ですね。


あー、お腹の調子がおかしい・・・ ←独り言

261:Now_loading...774KB
07/09/09 14:28:39 AciRr+jo
Javaをちょこっとかじってて、ActioScript初めてなんですけど、

flaファイル上のMovieClipにASファイルのクラスを適用することって出来るんでしょうか?出来れば軽くサンプルを書いてもらえるとありがたいんですが…

ASで定義したクラスのメソッドでMovieClipの操作を行ってみたいんですが・・・

262:Now_loading...774KB
07/09/09 14:35:15 oX5rL85l
>>261
できる

263:Now_loading...774KB
07/09/09 19:15:13 QumQM+cK
初歩的な質問ですみません。
LoadVariables()で読み込んだファイル名のMP3を再生させようとするのですが、
loadSound()でエラーが出てしまいMP3が読み込めません。

loadVariables("soundplay.txt", _root);
my_snd01 = new Sound(this);
my_snd02 = new Sound(this);
my_snd01.loadSound(_root.sound01, false);
my_snd02.loadSound(_root.sound02, false);

soundplay.txtの中身:
sound01=sound01.mp3&sound02=sound02.mp3

何故かloadSound()をコメントアウトすると変数がちゃんと拾えているようですが、
loadSound()があるとundefinedが出て読み込みエラーが出るようです。
これは何故でしょうか…詳しい方お願いします。

264:257
07/09/09 20:12:11 46xyRfSe
>>258-259

ディモールトグラッツェ!!!!
ありがとうございました、助かりました。

265:Now_loading...774KB
07/09/09 20:55:39 itq/IsYb
>261
俺も最初は苦労したくちなので、丁寧におしえちゃうぜ。
でもな、バージョン名くらいは書いて下さい。頼むから。

ライブラリウィンドウで、ムービークリップの
リンケージ名称設定をしてから・・・

MXの場合:
function クラス名(){プロパティを列挙}
クラス名.prototype=new MovieClip();
クラス名.prototype.メソッド名=function{処理}
クラス名.prototype.メソッド名=function{処理}
          :
Object.registerClass(リンケージ名,クラス名);

MX2004の場合:
ムービークリップのリンケージ名の下に
AS2クラスの項目があるので
そこにクラス名を記入。
※ちゃんとクラスはMovieClipをextendsしてるよね?

266:Now_loading...774KB
07/09/09 23:46:14 AciRr+jo
>>265
すいません、遅くなりました
Flash8 (AS2.0?)です

------
class Hoge extends Movieclip {
private var mc:MovieClip;

function hoge(target_mc:Movieclip){
mc = target_mc;
}


てかんじにして、flaファイル側に
hoge = new Hoge(リンケージ名);
hoge.hghg();
という感じでやってたんですが、反応が無いみたいです;

265の方法を試してみます。

267:Now_loading...774KB
07/09/09 23:54:50 BVXAhwVo
>266
var hoge:Hoge=new Hoge(引数(インスタンス名とかな));
インスタンス名.onPress=function(){
hoge.ghgh();
}
既述通り、リンケージが楽

つーか、基本はggrば?

268:Now_loading...774KB
07/09/09 23:58:35 itq/IsYb
>266
俺は>265だが、8かー。MX2004使いだから的はずれかもしれんが
一応>266で気になったことは、

「MovieClipはattachで生成するのであって、newで生成しない」
(ただしFlexはnewで生成するが……)

という、基本ルールを知っているかどうか。

269:Now_loading...774KB
07/09/10 00:04:53 IlxYGmqe
>268だけだと意地悪なので、いちおうコードも載せておくよ。

_root.attachMovieClip("リンケージ名", "MC名",深度, {プロパティ名:値});

この「リンケージ名」に、さっき定義したリンケージ名をいれればOK。
ちなみに俺が良くやる方法は、

for (i=0; i<個数; i++){
MC[i]=_root.attachMovieClip("リンケージ名", "MC名"+i,i);
}

と、イコールつなぐことで、「参照」を取得できる。こうすると、いちいちパスを書かなくても
MC[2]._alpha=50; なんてことができて、スゲーらくちんw

270:Now_loading...774KB
07/09/11 12:54:39 Ln/IIDsc
デザイナー初心者です。
フラッシュ制作で、キューブが回転して奥から転がってくるものを依頼されました。
回転するものはあっても転がってくる様なものは探しても見つかりませんでした。
その様なサイトかスクリプトがあれば教えて下さい。
よろしくお願いします。

271:Now_loading...774KB
07/09/11 13:01:55 UA9VZCW1
>270
誘導
スレリンク(swf板)

272:Now_loading...774KB
07/09/11 13:35:00 Ln/IIDsc
>>271
有難うございます
そちらに行ってみます(`・ω・´)

273:Now_loading...774KB
07/09/11 16:27:25 ZKuw48zy
質問です。環境はWinn2000・Mx2004です。

式の書かれた外部テキストファイルを読み込ませ、
それを解釈させて、結果をtrueかfalseで得ようとしています。
例えば、他の処理系風に書けば:

res=eval("(a==1)&&((b<250)||(name=\"Dave\"))");
trace("resu;t: "+ res);

で、trueまたはfalseを返したいのですが、ActionScriptのevalでは
そう言うことができません。
次善の策として、JSONを使い:

[
{ "left" : "a", fugou : "==", "right":1}, {……}, {……}
]

などと言うことも考えたのですが、どのように処理していいのかが
まるで思いつきません。
どのようにするのがよいでしょうか?

274:Now_loading...774KB
07/09/11 20:31:38 yONnbTi8
>>273
javascriptでできるならASから呼んでやればいいんじゃない?

275:Now_loading...774KB
07/09/11 21:44:44 4GLdl+a5
>>273
言ってることがいまいちよくわからんが、
>式の書かれた外部テキストファイルを読み込ませ
の部分はASで実装できてるの?


276:273
07/09/11 21:57:50 ZKuw48zy
>274
できればswf内で完結させたいと思っています。

>275
はい。文字列を読み込ませ、それをtraceでそのまま表示させることは
できています。
>273のスクリプトを正確に書き直すと、

condition.txtの内容:
(a==1)&&((b<250)||(name==\"Dave\"))

flaファイルのスクリプト:
lv=new LoadVars()
lv.onData=function(string){
res=eval(string); //この行はあくまでも例示です
trace("result: "+ res);
};
lv.load("condition.txt");

です。

277:Now_loading...774KB
07/09/11 22:51:35 b9HnqLsx
javascriptに投げてevalで計算した結果をexternalinterfaceで貰えばいいんじゃ?

278:Now_loading...774KB
07/09/11 23:28:26 x8I9fL8z
>>273
逆ポーランド記法にできれば結構楽よ

// 変数は自分で管理
var MyVariables = {a: 1, b: 100, name: "foo"};
// 変数と数値と文字列の区別は適当に目印つける
var MyCondition = ["V:a", "N:1", "==", "V:b", "N:250", "<", "V:name", "S:Dave", "==", "||", "&&"];

var _stack = new Array();
for(i=0;i<MyCondition.length;i++){
  var t = MyCondition[i];
  switch(t){
  case "==": var wk = _stack.pop() == _stack.pop(); _stack.push(wk); break;
  case "&&": var wk = _stack.pop() && _stack.pop(); _stack.push(wk); break;
  case "||": var wk = _stack.pop() || _stack.pop(); _stack.push(wk); break;
  case "<": var wk = _stack.pop() > _stack.pop(); _stack.push(wk); break;
  default: // 演算子以外は項である
    var type = substring(t, 1, 2);
    var term = substring(t, 3, t.length-2);
    switch(type){
    case "S:": _stack.push(term); break;
    case "N:":_stack.push(parseInt(term)); break;
    case "V:":_stack.push(MyVariables[term]); break;
    }
    break;
  }
  trace("「"+t+"」を処理した後のスタックの状態");
  for(n=0; n<_stack.length;n++) trace("["+n+"] "+_stack[n]);
}
trace("result:" + _stack[0]); // 演算結果が[0]に残る


279:Now_loading...774KB
07/09/12 01:24:39 t0Nd0J4u
>>273
なんかそれ最近、どこぞの誰かのBlogで読んだような気が・・・。
これかな?
URLリンク(d.hatena.ne.jp)


280:273
07/09/12 12:14:04 g8zl/LOd
皆様、ありがとうございます。

>>277
調べたところ、それはFlash8の機能のようです。またいずれにしても
WEBブラウザの力は借りたくないと考えています。

>>278
逆ポーランド記法は初めて知りました。
ただ運用面を考えると、あまり馴染みがない記述方法になるので
カッコなどをつかう記述を、その処理に落とし込めればベストです。

>>279
試しにソースをコピーしてみると、エラーが出たのですが、
オブジェクト定義で、要素の部分に'*"といった文字列を与えているためと
思われます(Flash8ではこの書き方は許されているのでしょうか?)
ただ考え方はソースからなんとなく見いだせましたので、
これでカッコに対応していれば、MX2004風味に書き直せるかも知れません。

281:Now_loading...774KB
07/09/12 12:55:34 HtdHDwog
>>280
やりたいことを明確に言わないとよくわからん
ASでの数式パースのロジックを知りたいって事か?

282:273
07/09/12 23:48:17 g8zl/LOd
>>281
やりたいことは、
「FlashMX2004を使って、
 テキストファイルに記載された論理式を解釈して結果を得る。
 ただし、WEBブラウザなどは使わず、swf単体で行う」
です。
正直、そのために何をどうすればいいのかが全く分からなかったので
こういう書き方をしました。
(正直、ここまで大がかりなものとは思っていませんでした……)

皆様の解答を見ていて、数式(論理式)のパース(構文解析と言う意味で
いいでしょうか?)ができれば、上記の目的は達成できると分かりましたので、
その方法を教えていただけると有り難いです。
(別の方法がある!というのであれば、そちらでもけっこうです)

目下のところは、>>278で紹介されている方法が逆ポーランド記法でなく、
通常の論理式対応のものであればベストです。

283:Now_loading...774KB
07/09/13 01:59:06 beX3qIXs
なんで逆ポーランドなのか考えた方がいいんじゃまいか?

284:Now_loading...774KB
07/09/13 02:50:33 wqdou11I
>>282 WEBブラウザなどは使わず、swf単体で行う

スタンドアローンなら、Exeでパブリッシュという方法もある。
但し、1.5MB以上になる。
ちなみに、俺も同じような文章解析(出力データ解析)をやっているが、
対象の文章の内容と解析目標によってStirigクラスのメソッド&プロパティを
ひたすら使い分けることでしか解決は無いと思う。

まずは、簡単な特徴的な文章(1行程度)を試しにパースしてみよう。

285:Now_loading...774KB
07/09/13 02:52:46 wqdou11I
284だ。
Stirigクラス → Stringクラス

286:Now_loading...774KB
07/09/13 13:13:43 ZpQ1BVYO
下記のアクションをムービークリップで動かしました
テンキー1・3で(座標変化で)速度をリアルタイムで変化させたかったのですが、fpsが低い設定の場合キー入力しても再描画時にムービーの速度に変化がないことが
多々でした。(試しにfps1で試したところ再描画までに入力したキー分の加速が反映されていませんでした)

onClipEvent (load) {
x_move = -1;
kasoku =10;
function movetxt() {
if (Key.isDown(97) == true) {
x_move -= kasoku;
}
else if (Key.isDown(99) == true) {
x_move += kasoku;
}
else {

}
_x += x_move;
}
}
onClipEvent (enterFrame) {
movetxt();

}
試しにキー押しの回数を調べるASを配置してみたところ、そちらは再描画までに押した回数が反映されていました。
この時も速度のほうは再描画までに反応を受け付けない時間(偶然や読み込みラグなどではなく)もあり結果は反映されませんでした。
読みづらい文・説明で申し訳ありません。
速度のキー入力リアルタイム変化について良い方法などありましたらお願いします。

環境はMacromedia Flash Pro8
AS2・WindowsXP・IE6です

287:Now_loading...774KB
07/09/13 15:38:55 BG4RnXCc
>>286
要は左右方向の加速度を変化させたいということか?
movetxt();内で結果位置を指定するのではなくて、(外に出して)
onClipEvent (enterFrame)内で指定したら?


288:Now_loading...774KB
07/09/13 15:43:32 hmnUxqDU
人間の色んな動作のアニメーションを作成しているんですが転ぶアニメーション
の参考になるサイトとかないでしょうか?
例えば歩くアニメーションだったらこんな感じで
URLリンク(www.training.co.jp)

転ぶ以外にも人間の基本動作のアニメーションで参考になるものがあったら教えてください


289:Now_loading...774KB
07/09/13 15:46:24 HEunF0E/
>>288
マルチは氏んでください

290:Now_loading...774KB
07/09/13 16:18:07 BG4RnXCc
>>286
setInterval() を使い、fpsに関係なく描画させる場合には updateAfterEvent() もある。

291:Now_loading...774KB
07/09/13 16:39:47 cYxdeUwj
>286
単純に変数操作はon()でやればいいんじゃないの?

292:Now_loading...774KB
07/09/13 16:52:43 JtxDSMb2
環境)OS:WinXP-Pro,Mem=1GB,ソフト:Flash8-Pro(Player7,AS2.0)

キーコードの認識で質問です。

2つのキー:BackSpaceとShiftを同時に押した時のアクションをキーリスナーで指定
したいのですが、上手く出来ません。
下は第一目標として、traceで "Back/Shift" を出力させるものですが何も出ません。

myKey = new Object();
myKey.onKeyDown = function() {
if (Key.getCode() == 8 && Key.getCode() == 16) {
trace("Back/Shift");
}
};
Key.addListener(myKey);

どうしたら良いでしょうか?

動作はプレビュー上で行い、『キーボードショートカットを無効』にチェックを入れて
います。なお、BackSpace,Shift各単独のキー動作はOKです。

293:286
07/09/13 17:02:05 ZpQ1BVYO
とても早い書き込みありがとうございます。
>>287さん
>加速度の変化
そうです。ただ、何故かわかりませんが1fpsで動作させ、1s内にテンキーで加速を2回押しても一回分しか受け付けていない。
という状況に困っていました。
実際のところ1fpsという低速で動かすことはないのですが、より正確な方が良いと思いまして。

enterFrameにて指定してみましたが低速だと同じ結果になってしまいました。
OnClipEvent(enterFrame)では難しいのですかね。
説明不足な点が多くてすいません。

>>290さん
描画のタイミングを上げ判定の隙間を減らすことが出来るんですね。
これなら限りなく処理が自然になりそうです。早速試してみようと思います。

お二方レス大変感謝です。

OnClipEvent(enterFrame)の判定の落とし穴の方も解決したら書き込みさせて頂きます。

294:Now_loading...774KB
07/09/13 17:47:45 X66+axMg
>>282
数式解析のプログラムは結構出回ってる。
swfだけで完結させたいというなら、そのコードをActionScriptにパースすりゃよい。

ただし、ものすごく面倒
ちなみにそういう処理は、昔の死に言語が活躍してる時代の処理。
斜め上な開発をしていることに気づき、設計を考え直した方がよい。

295:286
07/09/13 17:54:29 ZpQ1BVYO
>>290さん
すいません更新忘れて見落としていました。

クリップイベントにしなければ上記のようなことにならないんでしょうか。
ご指摘ありがとうございます。

296:Now_loading...774KB
07/09/13 18:09:50 tNNYUyG0
>>292
getCode() の値が8かつ16ってあんまりだろw

if (Key.isDown(8) && Key.isDown(16)) {
trace("Back/Shift");
}

297:292
07/09/13 18:23:52 JtxDSMb2
>>296
有り難うございます。
getCode()の値は1つなんですね。

298:Now_loading...774KB
07/09/13 18:45:14 3nDCCNF9
>>297
trace()すればわかることだし、ヘルプにも書いてあるよ。
戻り値は数値; 最後に押したキーのキーコードを表す整数。

299:273
07/09/14 02:28:42 IuUz1TI2
お返事が遅くなってしまいすみません。

>283
やはり「難しいから」なんですね。取り組んでみて実感しました。

>284-285
>まずは、簡単な特徴的な文章(1行程度)を試しにパースしてみよう。

こちら、>278のソースを参考に作ってみようと思います。
方針としては、文字列を先頭から1文字づつバッファーに貯めて行き:

・数字が出現したら、演算子か英文字(プロパティ)が出るまで連続して読み込み、
 そのバッファーを「項」の配列にスタック
・演算子が出たら、数字か英文字が出るまで連続して読み込み、そのバッファーを
 「演算子」の配列にスタック
・それ以外はプロパティ。演算子が出るまで連続して読み込み、そのバッファーを
 「項」の配列にスタック
・演算子の文字列に優先順位をつけ、その優先順位の高い演算子を
 挟んでいる項を演算し、後ろの項をスプライス(削除)し、この項とその次の項を……
 を繰り返して行全体を処理
・優先順位が0になるまで、着目優先順位を1づつ下げながら繰り返す
・項が1つになったとき、それが解

カッコの処理は、開きカッコがでたら、その後の開きカッコの個数を数え、同数の閉じカッコが出たら
バッファーの内容を引数にして再帰呼び出しするようにしてみます。

>294
最悪、上記のことで実現できなければ、JSONで
[ { "left" : "a", "fugou" : "==", "right" : "1", "renketsu" : "||"}, {式}, {式} …… ]
等の記述をするように、仕様を考えてみます。

300:Now_loading...774KB
07/09/14 10:01:05 j38Gt5NV
>>299
XMLでやった方が早いんじゃねーの?

301:286
07/09/14 15:42:25 RvW1gVaf
setInterval()で無事それらしく出来ました。ご指導感謝します。
ありがとうございました!

302:Now_loading...774KB
07/09/14 20:39:48 LYhDOI8p
回転させるには_rotationを使えばいいんですよね?
でも、回転するにあたって中心位置指定をするASはあるのでしょうか?
rootを回転させたいので・・・

303:Now_loading...774KB
07/09/14 21:13:33 y9xVRtWv
>302
無い。それと、_rootは回転しないじゃろ?
全体を回転させたいなら、1つのMC(中心が回転軸)に全部ぶっこむ
中心を左上等にする必要があるなら、mcの中心を回転軸とした円運動の式を組む

304:Now_loading...774KB
07/09/14 21:28:34 Vf34kzq9
>>303
_rootもMCなので、回転します。

305:Now_loading...774KB
07/09/15 02:40:22 u0PubEBn
質問です。Flashをメールクライアントとして使いたいと思っています。
受信したデータなどをローカルに保存したいんですが、ファイル入出力
ができません。
ここで質問なんですがFlashとCなどを組み合わせてFlashにない機能を
Cなどで補うことは可能でしょうか?
たぶんアプリケーションにFlashをのせたらなんかできそうな気がするんですが
調べてもなにもでてこないのでご教授願えれば幸いです。

306:Now_loading...774KB
07/09/15 03:34:56 B3bx7q3w
>>305
Cのことはわからないんだけど、vb2005やC#2005ではフォーム上にFlash貼って
fscommandでやり取りできる。

C#だけど。
URLリンク(web.sfc.keio.ac.jp)

でもそういう使い方すると
>Flashにない機能を Cなどで補う
っていうよりもCで作ったアプリにFlashで色づけするって感じになると思う。

307:Now_loading...774KB
07/09/15 03:55:10 ngWHqH2K
ローカルファイルの読み書き程度ならAIRとかZincで十分できるけどな

308:Now_loading...774KB
07/09/15 05:00:27 U1a+GSCe
FLASHってXML出力ならできたよな確か

309:Now_loading...774KB
07/09/15 07:14:13 0mhcD0mY
>>305
ヘルプでExternal APIあたりを参照する
>>308
出力というのが、ファイルとしてという意味なら不可能

310:273
07/09/15 09:35:24 bmSbVgmK
お返事が遅れて、申し訳有りません
(仕事が忙しかったもので……)

>300
最初はXMLも考えたのですが、それよりはJSONのほうが
記述もデバッグもしやすいだろうと考え、フリーのJSON for ActionScript2を
使用しています。

なお、>>284の「1行のパース」は成功し、きちんと演算ができました。
ただし、カッコの部分で手間取っているので、らちが明かないようなら
設計を見直し、>>278の逆ポーランド記法を参考にさせていただこうと思います。

目処がつきましたので、これにて>>273の質問は終了とさせていただきます。
皆様、ありがとうございました。

311:Now_loading...774KB
07/09/15 09:40:06 bmSbVgmK
>309
余談だが、FlashCommunicationServerは、「flv形式なら生成できる」
という仕様を利用して、ログファイルを生成していたりする。

ファイル書き込みができないのはセキュリティ面では意義のあることだが、
アプリ作成側にとっては、けっこう頭が痛い。

312:Now_loading...774KB
07/09/15 15:34:15 U1a+GSCe
力を貸して欲しい。どうしても出来なくて困ってるorz

環境:FlashCS3 ActionScript3.0
目的:niconicoやYoutubeのFLVを、ローカル環境でストリーム再生する

現在、niconicoでテスト中。
手動でCookieを取得し、FLVのURLを渡しているが、開けないとのエラーが出る。

ルートタイムライン(StageにFLVPlaybackを配置)
import fl.video.*
//var FLVPlayer:FLVPlayback
FLVPlayer.source = "URLリンク(smile-com32.nicovideo.jp)

また、FLV再生コンポーネントのFLVPlaybackが「?」を含むURLや「.flv」を含まないURLを
弾く仕様になっていたので、NCManagerの下記個所を修正

NCManagerクラスの変更箇所(614行:条件分岐をコメントアウト)
//if ( parseResults.streamName.indexOf("?") < 0 && parseResults.streamName.slice(-4).toLowerCase() == ".flv" ) {
 canReuse = canReuseOldConnection(parseResults);
 _isRTMP = false;
 _streamName = parseResults.streamName;
 return (canReuse || connectHTTP());
//}

313:Now_loading...774KB
07/09/15 16:05:53 jSpkWWWt
>>312
ニコニコは外部アクセス遮断してるかと思われ

314:Now_loading...774KB
07/09/15 16:20:25 0Z2nAOxw
Flash CS3 (ActionScript 2.0)

外部ファイルで、下のような、回転を制御する簡単なサンプルを作っているんですが、
class Rect {

private var mc:MovieClip;
private var mc1:MovieClip;

function Rect(base:MovieClip) {
mc = base;

mc1 = mc.attachMovie("rect", "rect", mc.getNextHighestDepth());

mc1.onEnterFrame = function() {

this.rotationMovie();
};
}
function rotationMovie():Void {

mc1._rotation++;
}
}
をつくり、flaファイルのフレームアクションで
var rect:Rect = new Rect(_root);

という感じで記述しているんですが、何も起きませぬ;
どこかマズいんですかね・・・

ステージ上のMCのMC名・リンケージ名は共にrectです。


315:Now_loading...774KB
07/09/15 16:24:59 U1a+GSCe
SWFがクライアント側で動くから、サーバーが遮断してるわけじゃないと考えてたんだけど違うのかな?
再生ページのタグをそのままコピってローカルで動かしても正常に動くから、
自作のFLASHからFLVへアクセスできないのは、自分のソースが間違ってるか、
デフォルトのプレイヤーにASからIDか何かを送るような処理いれてるかだと思うのだけれど。。。

316:Now_loading...774KB
07/09/15 16:32:10 0mhcD0mY
>>314
>this.rotationMovie();
この前にtrace(this);してみる

317:314
07/09/15 17:52:33 0Z2nAOxw
>>316
手直ししたら、動きました。リンケージ名の登録忘れと、
var scopeという変数を利用して、

function Rect(base:MovieClip) {
mc = base;
var scope = this;

mc1 = mc.attachMovie("rect", "rect", mc.getNextHighestDepth());
mc1._x = 200;
mc1._y = 200;

mc1.onEnterFrame = function() {
//trace(this);
scope.rotationMovie();}
}
のようにしたら、動きました。

でも、scope.rotationMovie()の部分は、this.rotationMovie()にすると動かないんですが、thisはダメなんですかね・・・

318:Now_loading...774KB
07/09/16 00:40:31 Yqhe3f+A
305です。回答ありがとうございます。

>306
それはヘルプにのってたんでしってるんですが、fscommandの引数として巨大なデータを。
渡せるんですかね?バイナリとかも。
データ取得とかはFlashでして、それをCに渡して保存とかはやっぱり
無理だと考えたほうがいいですかね。
どうもありがとうございます。

Airはつくったのをインストールしてもらわないと使えないので
今回は使おうと思っていません。

319:Now_loading...774KB
07/09/16 01:02:43 NgBRFJ+T
>317
クラスファイルでのスクリプトと、FLAファイルでのスクリプトでは
入れ子にした場合のthisの指すものが変わるんだよねぇ……。

FLAファイルでは、thisをつけると入れ子、つけないと「スクリプトを
記述している部分」を指すので、スマートな記述ができたんだが
クラスだとそうならない。
なんで、こんな仕様にしたんだろう。
マクロメディア(アドビ)は、おそらく意味があってやってるんだろうけど。

320:Now_loading...774KB
07/09/16 01:51:38 /j12KesV
>>319
mc1のonEnterFrameの中じゃ this が指すのは mc1 になる
それだけの話じゃね? と思ったんだけど

何かよく分からんないので
もう少し詳しく説明してほすぃ

321:Now_loading...774KB
07/09/16 10:21:25 NgBRFJ+T
>320
ああ、言われてみれば>317の挙動はたしかに正しかった。
俺が言おうとしていたのは、thisをつけるかつけないかの
挙動の変わり方が、タイムラインとクラスファイルで
異なってしまうってこと。
>317の例で言うと、

var scope=this;
mc1.onEnterFrame = function() {
scope.rotationMovie();
};
}
の部分は、タイムラインでの記述のようにこう書かせて欲しい。

mc1.onEnterFrame = function() {
rotationMovie()
};
}
クラスファイルでは、thisが無くてもthisを記述したようにふるまってしまうが
タイムラインでは、thisが無ければ(非公式テクニカルガイドで言う)デフォルト参照をする。
で、おれはこっちの書き方のほうが、thisの有り無しで処理を分けられるので
スマートに思えるわけ。いちいち外側から参照を渡すってのは気持ち悪いんだな。

322:317
07/09/16 10:39:57 saZ5CG3k
>>318 >>319

ああ、分かってきました。
scope.rotationMovie();はRect自身のメソッドだけど、
スコープの範囲でthisだと(function内なので)ダメってことですかね。

mc1.onEnterFrame = function() {
rotationMovie()
};
}
と書くほうが分かりやすいですな



323:317
07/09/16 10:40:55 saZ5CG3k
スコープの範囲で > スコープで

324:Now_loading...774KB
07/09/16 12:15:10 /j12KesV
>>321
なるほど ややこしいんだな thx

325:Now_loading...774KB
07/09/16 13:29:42 DCj6dDCu
AS2は付け足しだからレガシー仕様引っ張ってるからな。
そういう意味では初心者にこそむしろAS3をおすすめしたい。

326:Now_loading...774KB
07/09/16 15:58:04 s1MthOZf
>>325
それはない

327:Now_loading...774KB
07/09/16 23:19:16 ESTiE0oe
MovieClipのインスタンスを複製したいんだけどどうやるの?

328:Now_loading...774KB
07/09/16 23:41:52 pMx+rz+m
>>327
duplicateMovieClipを使う

329:Now_loading...774KB
07/09/16 23:43:32 5aMPC9TN
>>321 >>322 >>324
なんかおまいら言ってることおかしくないかー?
この場合、onEnterFrameをmc1のメンバにしてるのが変
this.onEnterFrame = function()にすりゃ良い
「rotationで影響を及ぼしたい場所=Rectインスタンス自身」なのに何故、mc1の中に入れ込んじまうんだw

あとthisの有り無しで処理を分けるなんてことやめた方がいいぜ?
読みにくいスクリプトの見本みたいなもんだよ。

thisは省略しない方がいいとか色んな本に書いてるけど、
あれは「参照をちゃんと記述しないとスパゲッティコードになる」って意味だよ

330:Now_loading...774KB
07/09/16 23:43:37 ESTiE0oe
すいません。>>328
ActionScript3.0と書くのわすれました。

331:329
07/09/16 23:59:15 5aMPC9TN
ごめw ミス

>>thisは省略しない方がいいとか色んな本に書いてるけど、
>>あれは「参照をちゃんと記述しないとスパゲッティコードになる」って意味だよ

シンタックスを使ったオブジェクトのメンバメソッド内でのthis省略、ね
書籍などには「thisは省略しない方がいい」などとは書いてないので注意
まぁ普通にドットシンタックスを把握してる人にとっては、デフォルト参照は分かりにくいのではって話です。

332:Now_loading...774KB
07/09/17 00:17:23 Y5dZ1OyR
>>330
this.addChild(new MCのクラス名()) クラスは自動生成されるから別に作らなくてもおk

333:Now_loading...774KB
07/09/17 00:18:36 2hvSJKkL
>>326
プログラム言語として言えばAS3.0の方がスマートだしわかりやすいよ。
まあ、AS2.0しか知らない人には、今まで苦労して理解したのに。。
っていういうことはあるかもしれんけど。

334:Now_loading...774KB
07/09/17 00:26:43 2jshZNy/
AS2->AS3の移行で戸惑う人はほとんどいないだろ。
AS1しか書いてなかったからAS3が理解できないってんなら分かるが。

335:Now_loading...774KB
07/09/17 00:29:23 Y5dZ1OyR
そうだな。
ていうかJavaや.NETから入った俺からすれば、AS2.0を覚えれたのはすごいと思うけどな。
ワケ分からん仕様多いしさ。2.0理解したんなら3.0理解するのなんてすぐだろう
ていうか2.0にどっぷりはまっちゃうと正直危ないと思う

>>322
あんた危ない方向に進んでるよw

336:Now_loading...774KB
07/09/17 00:30:25 2hvSJKkL
>>334
AS1.0-->AS2.0は普通に拡張な感じだけど、3.0へはちと、、、
移行するにしても、相当コーディングし直さなきゃならないとおも

337:Now_loading...774KB
07/09/17 00:41:40 2jshZNy/
AS2からAS3への書き換えは何度かやったがそんなに大変じゃなかったな。
むしろonClipEventとか使ってるAS1をAS2でOOP化するほうが手間だよ。

338:324
07/09/17 00:50:23 lLsXrzzj
>>331
>「rotationで影響を及ぼしたい場所=Rectインスタンス自身」なのに

これは質問主にしか分からない事だと思うよ。
掲示されたのがonEnterFrameをmc1のメンバにしているソースなのだから
それをベースに答えるしかないよ。効率や正しい書き方を聞かれたのなら
まったくおっしゃる通りだと思うけど。

僕は デフォルト参照なんてものを初めて知ったので
「ややこしいんだな」と思ったんだ。

339:Now_loading...774KB
07/09/17 01:14:20 iNf8t6Bu
OOPなんて言葉まだあったんか。

別にAS3自体を否定する訳じゃないけど、初学者が学ぶには
言語だけでなく概念を理解しなければならないから途中で
投げてしまう人口を増加させてしまうと思う。

エスペラント語ってすっきりしていて便利だよね、みたいな話だと思う。

340:Now_loading...774KB
07/09/17 01:17:35 6k7bATPM
>>338
ん? 横から入って悪いけれど、それは違うんじゃない?
もいっかいソースやレス見直してみたらどーかな

俺にも、onEnterFrameをmc1のメンバにしてる意味がわからないよ。
そしてソースが動かない原因も、onEnterFrameをmc1のメンバにしてるせいだしね。
提示されたソースが間違ってたから動かないんだよ。見当違いな解決策だすより、そこを指摘するのが妥当でしょ。

341:322
07/09/17 02:13:05 6fW/4BX0
んーんと、ちょい混乱してるわけですが。

まず、Javaちょこっとかじって来ました。AS始めたばっかりです。
で、指摘されてる部分は、mc1.onEnterFrame...でいいんですよね?

この場合
MovieClip(flaファイルに慣れてないので)をあんまり弄らなくても、いい手法かなと思ったんで、こう書いてみたわけですが、異端な書き方なんですかね?
あくまで、MovieClip側に何かアクションを起こしたいわけです。

サンプルでMovieClipにextendsさせる方法も見ましたが、そっちのほうが主流なんでしょうか?

342:Now_loading...774KB
07/09/17 03:43:08 lLsXrzzj
>>340
ソースとレスを見直した結果
僕は間違っていました。申し訳ない。


MovieClip を extends するなら

/// 外部ファイル
class Rect extends MovieClip{
function Rect() {
this.onEnterFrame = rotationMovie;
}

function rotationMovie():Void {
this._rotation++;
}
}

//fla メインタイムライン
var rect = _root.attachMovie("rect", "rect", mc.getNextHighestDepth());
rect._x = 200;
rect._y = 200;

みたいな感じかな。


343:Now_loading...774KB
07/09/17 06:02:05 Y5dZ1OyR
てかなんでみんなクラス内でENTERFRAME使うの?
俺はIntervalの方が、関数名指定するだけで出来るから好きなんだけどなー
ENTERFRAMEと違ってスレッド削除にも殆ど制約ないし

344:Now_loading...774KB
07/09/17 09:32:00 N8Y+FRzQ
>343
俺もsetInterval派。
onEnterFrameで行う部分は、setIntervalにしたほうが色々と便利だし。
(ただ俺は、そこに匿名関数を記述するんではなく、関数名をこしらえて
 その関数に処理を渡していくのが好き)

でも、onハンドラから匿名関数をつないでいくって言うイベント記法は
ActionScriptに馴染みのない人でも分かりやすいんだよ。
「対象MCが.どうなったら=処理する{その内容は……です}」
と、一つの塊を見れば一目瞭然だし、
enterFrameだけでなく、loadやpressなどでも同じ書き方ができるので
応用範囲も広い。

イベントを直接管理する記法が主流になれば、いずれ廃れる
書き方かもしれないが、現時点では悪くないと思ってる。

345:Now_loading...774KB
07/09/17 13:26:00 1rQVYVzg
>>342
この場合はthisだからいいけどAS2の場合は関数に処理渡すのもDelegate使う
のが基本と覚えといた方がいい。そうすりゃsetIntervalもonハンドラも使用感は大して変わらん。
>>339
初心者が途中で投げてしまうのは難解さじゃなくてレガシー対策のイレギュラーな処理やバグで
思い通りに動かないからだろ。

346:Now_loading...774KB
07/09/17 18:56:51 rqoIZ334
毎フレーム処理したい のと 一定時間ごとに処理したい の違いじゃないの?

347:Now_loading...774KB
07/09/17 19:14:22 1rQVYVzg
>>346
そうだよ。setInterval派とかいう派閥はない。処理に応じて使い分ければいいだけ。

348:Now_loading...774KB
07/09/17 20:13:22 6k7bATPM
どちらの状況でもないときに使う方の話をしてるんだと思うが。”連続して実行させたい”とか。実際コレが一番多い罠

349:Now_loading...774KB
07/09/17 21:21:42 yNgKhKTu
こういう話になるとがぜんはりきる俺様を見てくれって奴が多いんだよ。ほっとけ。

350:Now_loading...774KB
07/09/17 21:22:08 N8Y+FRzQ
>347
>348の言うとおり、大半の人は「MCを動かす」目的で使う。
そのアプローチが「clipEvent(enterFrame)派」、「onEnterFrame派」
あるいは「setInterval派」などに分かれているのが現状。

他の処理系の人から見れば噴飯ものの分類だろうけど、
これらは「MCを動かす」という目的のもと、同じ分類になっている。
それぞれの意味の違いが分かって、最適のスクリプティングができれば
AS使いとしては上級の部類になるだろう。

個人的には、”デザイナー上がり”の人たちも、これらの奥深さに
触れてもらえればと思っている。プログラマと話が通じると楽しいし、
「絵筆」が増えることで、よりアーティスティックな表現もできるはずだから。

・forループで100個のMCをいちどきにattachMovieするのでなく
 10分の1秒ごとにわらわらとattachMovieしたい……setIntervalでattachMovieし
 100個になったらclearIntervalする
・ボタンクリックを、ムービーの状態によって違う動きにしたい
 ……同じイベントトリガを、別のイベントリスナに登録しなおし、各処理は
 そのリスナのメソッドとして定義しておく

”プログラマ”には簡単すぎるこうした処理も、”デザイナー”には高難易度。
このスレッドは、彼らの架け橋になってくれたら嬉しい。

351:Now_loading...774KB
07/09/17 21:24:23 Mfkvi56+
OOPってもう古い概念なの?

352:Now_loading...774KB
07/09/17 21:25:38 yNgKhKTu
勝手に奥深いとか難しくて高度な事と位置付けたい馬鹿に踊らされてるだけ。可愛そうに。

353:Now_loading...774KB
07/09/17 21:27:11 yNgKhKTu
>>351
全然古くない
ただ「OOPとはこれ」「OOPやらなきゃ馬鹿」とか大上段に構えてる奴らが笑い物になってるだけ
普通に使う考え方

354:Now_loading...774KB
07/09/17 21:31:39 Mfkvi56+
>353
それは良かった。今更ながらFLASH OOPを読んで歓心してた所だ

355:Now_loading...774KB
07/09/17 21:38:20 yNgKhKTu
>>354
あの本は悪くないけど気を付けた方がいい。
よく日本人の英語学習の笑い話で「外資系の会社に、英語は完璧ですという入社希望者が来た
、で、その希望者に『なるほど、じゃああなたはウチの業務がどういうものがご存じですか』と聞い
たら黙ってしまった」というものがあるけれども、あの本はまさにその典型。

FlashOOPが~とか言う奴は実際にやらせてみるとコードひっかきますだけで、成果だすまでに
以上に時間かかるという事が結構あった。そうならないように、あれはあくまで文法の本だってことを
キモに銘じておいた方がいい。

356:Now_loading...774KB
07/09/17 22:14:51 N8Y+FRzQ
>352
さっきから気になってるんだが、きみはまさか
「AS=簡単、気軽な言語」とかおもってないかい?
キミが相当の知識があることは>355を見てもわかるし、きみにとっては
ピクニック気分の言語なんだろう。そこは尊敬する。

でも違う。大半の開発者にとっては、イベントとかクラスとかスコープとかは
いまだ「大上段ニ構える」概念だよ。
なぜって、開発者の大半はきみのようなプログラマじゃない。
アーティストだのデザイナーだのと呼ばれる、絵描きさんだからだ。
専門的な訓練をろくに受けていない頃なら、概念を理解するのは
一大事だってことは分かるだろ。
だから、このスレが有るんじゃないのかい?(ちょい脱線気味だけど)

357:Now_loading...774KB
07/09/18 00:55:05 2sKulJ4Y
Flashみたいなちょこっとスクリプト書く程度の物に
わざわざオブジェクト指向を持ち出してくる輩は哀れ。

358:Now_loading...774KB
07/09/18 01:27:36 cAw2l+pm
それは規模によるでしょ。

フルFLASHのサイトで5000行を超えるASを書いたりしていると
開発技法とデザイナとのやり取りについてあれこれ考えないと
いけないなと思うよ。

でも、気にせずクラスなんて使わずにコーディングするけどな!
それがActionScriptのお気軽お手軽なところなんだし。

359:Now_loading...774KB
07/09/18 01:48:13 pAUTaWBv
>>357
ちょこっとしか書けないんだろw

360:Now_loading...774KB
07/09/18 02:34:22 fRxYsA1E
>>358
ゲームならまだわかるけど、フルFlashサイトで5000行もいくものなの?
ていうかオブジェクト指向にするかどうかは行数で決めるの?

361:Now_loading...774KB
07/09/18 02:46:56 qkhusDJy
プログラムは最終的に思った通りに動けばいい。
過程や…方法なぞ…!どうでもよいのだァーッ!

362:Now_loading...774KB
07/09/18 11:08:56 MvRIbmuP
ウボァ。すごい勢いで挫折しそうなんでエロい人教えて。

1.外部テキストを読み込む
2.読み込んだ文字列をMCに入れる
3.MCのアルファを変化させる

って事がやりたいんですが、MCのアルファは変化してもMC内テキストのアルファが変わってくれません。
flash内で事前にテキストを分解(アウトライン化?)しておけばアルファを弄れるのですが、
なるべく、"テキストデータのまま"で処理したいのです。

現在は応急処置として、マスクレイヤーを追加してMCを無理やり透過させていますが、
他の良い方法でなんとかならんでしょうか。

363:Now_loading...774KB
07/09/18 12:15:23 CPBdjEuF
>>362
基本的には、デバイスフォントではアルファ変化とかはできない。
その場合は、テキストを分解じゃなくて、テキストフィールドに必要な文字を埋め込む。
必要な文字数が膨大だと、ファイルサイズも膨大になる。

364:Now_loading...774KB
07/09/18 12:16:32 d/VnrghS
>>362
アルファベットくらいなら全部埋め込みフォントにすれば透過できたと思う。日本語あるときっついね。
Fla8以降なら一旦bitmapdataにdrawして、それを透過表示するとかでできるんじゃないかな?

365:Now_loading...774KB
07/09/18 12:18:35 bWu2MPRH
システムフォントはアルファ変更できない。
上レイヤに背景色をかぶせてアルファを変えるか
フォントを埋め込みにすれ。

366:Now_loading...774KB
07/09/18 12:49:59 pAUTaWBv
>>360
ステップ数は規模の大きさの判断の指針として使える
100行のプログラムと5000行のプログラムが同じコストがかかるとは思えないよね

367:Now_loading...774KB
07/09/18 13:52:30 AAm22yJ7
>>360
俺は仕様追加や更新するかどうかでOOPにするか決めるな。
最初多少手間でも後から相当楽できるから結局楽をしたいことには変わらん。

368:Now_loading...774KB
07/09/18 20:51:57 MvRIbmuP
>>363-365
ありがとごじます。なんと。埋め込みフォント。知らなかったです。
日本語を使わないので英数字のフォントを埋め込んで解決しました。

BitmapData.draw()でフォントを画像データにする方法でも無事透過出来ました。
日本語をダイナミックテキストで扱う場合はこちらの方法が良さそうですね。

ASスレのはずなのにスレチで失礼。

369:Now_loading...774KB
07/09/20 20:18:26 Rm1sHKpH
環境)OS:WinXP-Pro,Mem=1GB,ソフト:Flash8-Pro(Player7,AS2.0)

セキュリティについて質問です。

現在swf内部の記述(AS)が読めるソフトが出回っていますが、今のところ
『最も中身が見れない(バレない)方法』にはどのようなものがあるのでしょ
うか?

つまりは、プロテクトを掛けたいと思っています。
この辺りの技術はイタチごっこでいずれ破られるとは思いますが、一時的に
せよ保護したく思っています。

一応、「Flash便利帖」(インフォメディア著 毎日コミュニケーションズ)のp202で
パブリッシュ設定 → 読み込みプロテクト は勉強しました。

370:Now_loading...774KB
07/09/20 20:26:49 YnUhWzLm
URLリンク(www.amayeta.com)

371:369
07/09/20 23:30:37 Rm1sHKpH
>>370
有り難うございます。

372:Now_loading...774KB
07/09/21 13:19:47 RC2nJwul
for文でカウントにiを慣例で使うと思いますが
複数入れ子にする場合も、何か文字があるのでしょうか?
for(var i=0~
 for(var ii=0~
  for(var iii=0~

ii,iiiやi,j,kだとjが見難かったりしますよね?

373:Now_loading...774KB
07/09/21 15:37:21 iyDIO6ly
教科書なら慣例でi,j,kだと思うが、実際には用途に合わせて名前つけたほうがいいんじゃね?
page,line,wordとか

374:Now_loading...774KB
07/09/21 19:10:51 RC2nJwul
>373
なるほど。名前試して見ます。ありがと。

375:Now_loading...774KB
07/09/22 10:36:04 KZSU70kv
>374
あくまでも俺のやり方だが、>373だと、すでにそのクラスの
プロパティとして使う名前とかぶってしまう場合があるので、
ループに使う変数名は自分の中で決めてしまうのも手だ。

たとえば、i、j、k……ときたら間違いなくループカウントだと
ルール付けしてしまえば、あとからソースを見たときに
視線がまごつかなくてすむ。
反面、その変数が何を表しているのかは、ソースを読まないと
分からなくなるわけだが。

376:Now_loading...774KB
07/09/22 14:55:45 M/Y5Y738
昔は>>373みたいな意見も多かったけどねー
今はループ用一時変数は統一されてるのが殆どじゃない? 下手につけると衝突するでしょ

377:Now_loading...774KB
07/09/22 17:12:11 BHL4zl0l
ループカウンタはカウンタとしてわかる無意味な短い変数名ならば良いと思う。
一般的に使われているi,j,kとかx,y,zとか。3次元以上のループはわかりにくいので
設計をデータクラス(レコード)にしたりして次元を落として見やすくする方が良いと思う。
ソースを読んでいてfor文の中にrow,colとか書いてあるとカウンタではなく、
なにか意味のある、スコープが大きい変数かなと思って思考が一時停止しちゃう。

378:Now_loading...774KB
07/09/23 10:19:37 wCi0nQ10
LoadVarsのonLoadで困っているのだが、知恵をお貸しいただきたい。

LoadVarsのsendAndLoadで読み込んだ結果を、関数の結果として返したいのですが
onLoadが完了する前に関数の結果がnullとして返ってしまう。

function hoge(str)
{
 var re = new LoadVars();
 var se = new LoadVars();
 se["msg"] = str;
 se.sendAndLoad(URL, re);
 
 re.onLoad = function(success)
 {
  if(success)
  {
   //ここがreturnされてほしい
   return re["result"];
  }
 }
}

test = hoge("aaa");
trace(test); //null

うまく関数の結果を返す方法が分かる方、ご教授ください。

379:Now_loading...774KB
07/09/23 10:38:01 V2WFfrq8
メインの方でsetIntervalを使って処理待ちすればいいのではないかな

380:Now_loading...774KB
07/09/23 11:27:40 VB6Lvfzs
読み込み待ちできない奴多すぎるな
>onLoadが完了する前に関数の結果がnullとして返ってしまう。
これ自分で書いてて当たり前だと思わないんだろうか?

381:Now_loading...774KB
07/09/23 11:48:04 QIjd3skm
>378
詳しくソースは追い掛けてないけど、ひとつ気になったことは、
なんでイベントハンドラの処理を定義する前に
sendAndLoadを実行しちゃってるのかな、ってこと。
定義前に結果が帰ってきたら、結果の行き場がない。
それじゃー空振りするでしょ。

382:Now_loading...774KB
07/09/23 13:00:25 wCi0nQ10
>>379
その方法でうまくいきました。
setIntervalとか、意外と使いやすいですね。

>>380
いやぁ、薄々は感じていたのですが、じゃあどうすれば、というところで
躓いていたわけです。

>>381
確かに。順序を入れ替えました。

383:Now_loading...774KB
07/09/23 15:37:27 2FSlMhjA
え、ちょっと待て。
setInterval使わないとロード待ちできないなんてことないだろ?
なんのためのLoadVarsだよ。

384:Now_loading...774KB
07/09/23 17:06:04 b4lv3C7V
>>378
非同期読み込みなんだからコールバックにしたほうがいい

385:Now_loading...774KB
07/09/23 19:00:28 QIjd3skm
>378の問題点は、関数の中にコールバックを作った上で、
その処理結果を戻り値としたことだな。
test = hoge("aaa");
trace(test);
で、イベントを待ってtraceしてくれるわけではないから
戻ってきたときにはすでにtraceは終了してるわけだし。

でも正直、俺も「関数の戻り値」として、こういう結果を取得したいと
よく思う。いちいちルートにコールバックを書くのはなんかダサく見えるし、
かといってコールバック内に処理(この場合はtrace)を入れるのも
見づらいし。

みんなは>378みたいなことをしたいとき、どうやって書いてる?

386:Now_loading...774KB
07/09/23 19:14:59 +wLcGl6I
function hoge(str){
 var se:LoadVars = new LoadVars()
 var re:LoadVars = new LoadVars()
 se["msg"] = str
 
 re.onLoad = function(success){
  (success) ? re["LoadFin"]() : false
 }
 se.sendAndLoad(URL, re)
 return re
}

var test:LoadVars = hoge("aaa")
test.onLoadFin = function(){
 trace( test["result"] )
}

普通にコールバックしかねぇだろw

387:Now_loading...774KB
07/09/23 19:18:00 +wLcGl6I
re["LoadFin"] → re["onLoadFin"] のミスス(´・ω・`)

ASにスレッド同期処理があればいいんだけどね。

388:Now_loading...774KB
07/09/23 20:16:13 r6NmunPI
AS2.0まではデコンパイラもそれを防ぐソフトもあるようですが、
AS3.0では同様のツールはまだ出ていないんでしょうか?
もしくは根本的に必要がなかったりするのでしょうか。

389:Now_loading...774KB
07/09/23 23:12:39 ZV3VxgoD
remoteProxy系は2も3もDispatcher使うのが普通だろ。ツールなんかいらんはずだぞ。

390:Now_loading...774KB
07/09/24 00:01:05 ZV3VxgoD
ゴメン酔っ払ってたから読み間違えた

391:Now_loading...774KB
07/09/24 15:04:25 GtWrn8iA
>>388
すでにAS3仕様書が公開されてるから何をやっても無駄。

392:Now_loading...774KB
07/09/24 16:03:31 aQ9jWDUm
>>392
つーことは、AS2.0は仕様書が公開されていないから、デコンパイラを防ぐソフト
が出来たということ?

393:392
07/09/24 16:04:24 aQ9jWDUm
いかん、自問してもうた。

392は391への質問です。

394:Now_loading...774KB
07/09/24 23:28:55 GtWrn8iA
>>392
バイトコードをアセンブラのごとく読めば
何やってるのか普通にわかるって事。
ASも8以前のswf仕様書も全部公開されてる

395:Now_loading...774KB
07/09/24 23:47:05 tWcvQwzk
>>394
レス有り難うございます。
デコンパイルに対するプロテクトといっても、結局は一時的なものなんですね。

396:Now_loading...774KB
07/09/25 03:05:53 TBCw7Ifp
質問です。
波の動きをさせようと以下のスクリプトを組み込んだが、
1回再生したっきり何も起こりません。

コードを記載してあったURLリンク(hakuhin.hp.infoseek.co.jp)のサンプルは連続再生出来ています。
何がおかしいのでしょうか?

onClipEvent (load) {

length = 30; // 波の幅
rot = 0; // 角度(位相)

dx = 5 // x方向移動量
posy = 150; // 元となるy座標
height = 100
}
onClipEvent (enterFrame) {

_x = _x + dx; // x方向移動
rot = rot + 10; // 0~360まで一定の速度で増やし続ける
if(rot > 360) rot -= 360; // 360を過ぎると0に戻す
rad = rot * Math.PI/180; // 角度からラジアンに変換
_y = posy + Math.sin(rad) * height; // y方向移動

}

397:Now_loading...774KB
07/09/25 03:41:41 TBCw7Ifp
永遠にx軸+方向に波打ってる。ステージから消えたときにでも_xをリセット

398:Now_loading...774KB
07/09/25 03:43:01 TBCw7Ifp
うお、ID同じだ。初体験w 自演じゃないからねw

399:Now_loading...774KB
07/09/25 03:52:03 /JBjbjXA
可能性は否定しないけど
これは自演ですね

400:Now_loading...774KB
07/09/25 03:52:07 TjOZ2AMF
はいはい自演自演

401:Now_loading...774KB
07/09/25 03:57:38 yRCc23vB
>>398
俺も経験あるから、
じぇんじぇん気にすることないよ。

402:Now_loading...774KB
07/09/25 04:38:33 mp9864L/
>401
この勇者にActionScriptの女神の加護があらん事を

403:397
07/09/25 05:26:45 TBCw7Ifp
じぇんじぇん気にしてないよ。
取り合えず今日1日は初心者を装って色々デキル訳だな。
ちょうどいい機会なんで悩んでたこと質問してみる。XMLを拾って解析するコードです。

var XmlLoad = function(e:MouseEvent):void{
 var myLoader:URLLoader = new URLLoader( new URLRequest(XMLのURL) );
 function XmlLoadFin(e:Event):void{

  /*var root_MC:MovieClip = this.root as MovieClip;
  root_MC.addChild(myXML)*/  ←質問2を試してみた残骸

  LoadXmlNode( XML(myLoader.data) );
  ↑質問1の箇所。ターゲットパス(thisやMC化したroot)を付けると動かなくなる。何故・・・
 }
 myLoader.addEventListener(Event.COMPLETE, xmlLoadFin);
}
XmlRead_btn.addEventListener(MouseEvent.CLICK, XmlLoad)

var LoadXmlNode = function(myXML:XML){
 for each (var Node:XML in myXML.Person.(@id==2).*){
  Node_txt.text += Node.name() + ":" + Node + "\n"
 }
}

AS3.0です。ごちゃごちゃ書いてますが、したいことは
1.もしLoadXmlNodeの呼び出しにターゲットパスを付けるとしたら…、一体何を?(root_MCやthisでは動かず)
2.もしもmyXMLを引数でなく、どちらの関数からも直接参照できる、フィールド変数(?)として、
「関数XmlLoadFinの中から」宣言するにはどうすれば?(2.0ではverを省略すれば出来た。見辛いソースになるし廃棄された?)
3.myLoaderのListenerは、ステートメントから出て、myLoaderが消えた時に一緒にデリートされてるのかな?

動くには動くので特に困っているわけではないのだけれど、分からないので何となくスッキリしなくて。。
良ければ誰か教えてほしい、長文スマン

404:Now_loading...774KB
07/09/25 08:19:01 w7qxoptu
何で無名関数なのか、また2.0のxmlNodeなのかよくわからんな
MC化したrootとは↓みたいなことかな。できないかな。
var rootas:MovieClip = this.root as MovieClip;
リスナーは明示的にremoveするか、弱い参照にしておくと良いと思う。

いずれにせよclassと3.0のxml,xmllistを使った方がスマートにできるよ。

405:Now_loading...774KB
07/09/25 08:26:48 w7qxoptu
ああ、XmlNodeって名前のxmlか、、、

406:Now_loading...774KB
07/09/25 08:30:00 w7qxoptu
関数名とか変数名は大文字で始めないでほしいなあクラスかと、、、あ、もう書きませんすみません。

407:Now_loading...774KB
07/09/25 13:59:08 gqhvmMp6
どどんまい

408:Now_loading...774KB
07/09/25 20:36:12 HFb2puJu
なんでIDが同じだと
>今日1日は初心者を装って色々デキル訳だな。
になるんだ?

409:Now_loading...774KB
07/09/25 21:53:50 TBCw7Ifp
ノリで言ってみただけだよ。マジにとらえないでくれ

410:Now_loading...774KB
07/09/25 22:13:51 HFb2puJu
あぁ、そうなの。
IDが同じじゃなくても初心者を装えるだろって思ったから
どういう意図で言ったのか知りたかったの。

411:Now_loading...774KB
07/09/26 10:54:39 Rr04CYhD
CS3は持ってるんですがしばらく使えない環境に行くことになりました
その間にもAS3の勉強をしたいのですが、どうにも本を読んでいるだけでは頭に入ってきません
実際いじりながら覚えていこうと思うんですが
AS3対応のフリーのFlashソフトなどありますか?

412:Now_loading...774KB
07/09/26 11:15:42 sqrU35UX
マウスを動かすと、ball(mc)が動くASでaddListenerで質問です

myObject=new Object();
myObject.onMouseMove = function() {
ball._x +=1;
};
Mouse.addListener(myObject);

or

ball.onMouseMove = function() {
this._x +=1;
};

どちらでも動きますよね
なんでmcだとaddListenerは不要なんでしょうか?

413:Now_loading...774KB
07/09/26 13:26:09 KXUCHuTQ
>>

414:Now_loading...774KB
07/09/26 13:26:13 zl06CDKy
>412
そんな理屈は考えたことがないなあ。動けばOKなんだし。
しいていえば、Mouse.addListener()はMouseオブジェクトで、
MovieClip.onMouseMove()はMovieClipオブジェクトだからだろうな。
アーキテクチャの違いってやつだろ。好きな方を使えば良いんじゃね?

415:Now_loading...774KB
07/09/26 13:49:14 KXUCHuTQ
>>411
Flex 2 SDK

416:Now_loading...774KB
07/09/26 14:16:16 KXUCHuTQ
>>403
コード書いて動かしてみたがワカランカッタ(´・ω・`)
なんでターゲットパスつけると動かなくなるんだコレ。何か3.0の階層構造にまだ慣れないわ
取りあえず3つ目の質問だけになるが、ハンドルしてるObjectが消えたらハンドラも消えたはず。by.NET

>>404
無名関数にするとブロック内でカプセル化されるんじゃなかったっけ
3.0じゃどうかしらんけど、2.0のときは衝突避けるときに使ってた希ガス
てかローダー部分は置いといて、XML読み込みの部分はE4X使ってるみたいだし十分スマートだと俺はオモ

417:Now_loading...774KB
07/09/26 14:56:56 VGxwHg04
質問です。

AS3で、SharedObjectを使ってFlash Communication Serverとデータの送受信
をするときの挙動なんですが、AS1のときは

共有オブジェクト.data.xxx = 1

のような書き方でサーバーの共有オブジェクトにデータが送信されたんですが
AS3で同じ書き方をしてもデータがいかないようなんです。

サーバーサイドASで共有オブジェクトを更新するときに使う、
setPropertyメソッドを使えばいけたんですが、ヘルプを見ても、それは
サーバーサイドで使うメソッドだと書いてあります。

AS3ではsetPropertyを使わないと送信できない仕様になったんでしょうか。
どうかご教授ください。



418:Now_loading...774KB
07/09/26 15:30:00 f57mUZHx
winXP・flash8使用です。

actionscriptをある程度使える人になりたいと思って
早1年が過ぎましたが
未だに、ボタンにgotoAndPlayつけたりとか
そんなのしか出来ません。
力技でアニメーションを作るのは得意ですが
AS使わないと出来ない事も出来るようになりたいです。

何をどう勉強すりゃいいの?状態なんですが
おすすめの参考書籍教えてください。

419:Now_loading...774KB
07/09/26 15:38:13 /udwhN6y
本なんて頼りに出来ない
知らないものは自分で触って感覚的に覚えるのが一番

420:Now_loading...774KB
07/09/26 15:41:43 V0/aBcXj
>>418
URLリンク(www.amazon.co.jp)

421:Now_loading...774KB
07/09/26 15:45:53 V0/aBcXj
>>403
その書き方だとfunctionのスコープがたぶんglobalになる。よってrootは無意味。
ターゲットを書かないその方法が一番楽なはず。つーっか汚なすぎ。
通信専用のクラス作ってそこに処理まとめればいいじゃん。

422:Now_loading...774KB
07/09/26 15:48:04 V0/aBcXj
>>412
MovieClipクラスにはonMouseMoveという名前のイベントハンドラがあるから。それだけ。

2.0では、addEventlistenerはイベントハンドラ無いオブジェクトでもイベントをハンドリングできるために用意されているもの。
あとは、違う名前の関数を使ってハンドリングしたい時に使うもの。

423:Now_loading...774KB
07/09/26 15:49:00 Ayy9C01V
>>415
ありがとうございます

424:412
07/09/26 16:03:50 sqrU35UX
>422>412
MovieClipクラスに用意されてんのね
何かのクラスでextendsした場合は楽なんかな
処理がaddListenerより早いし
納得した。thx

425:418
07/09/26 19:12:04 f57mUZHx
>>419
勉強する取っ掛かり?みたいなのが欲しいんですよね。
でも言い得てるレスだと思います。

>>420
とりあえず、その本買ってみて
全部理解できるように頑張ってから、次考えてみます。
URLリンク(www.amazon.co.jp)
こっちもいいのかな?

426:Now_loading...774KB
07/09/26 21:56:16 zl06CDKy
>417
クライアントサイドで、
SO.data.foo=1;
SO.setDirty('foo');
をためしてみて。

427:Now_loading...774KB
07/09/26 22:40:33 wY4KIGeW
質問しにきました。
Flashの背景色をASで変えたいのですが、描画メソッドしか方法ないですか?
直接弄れたら楽だろうなと思って・・もしそういうASあるなら教えてもらえますか?

428:Now_loading...774KB
07/09/26 23:21:06 d/6D0Tgc
>>427
回答するために書き込みます。
AS2.0ならColor クラスや flash.geom.ColorTransform クラスがあります。
ただしFlashの背景色ではなくムービークリップの色を変えるものです。

429:Now_loading...774KB
07/09/27 20:22:24 84OqS0wk
actionscriptで日付フォーマットができる関数って無いですかね?

trace(dateFormat(new Date(),"yyyy/mm/dd"); //2007/09/27
とか。

430:Now_loading...774KB
07/09/27 21:03:07 z4JJWENT
>>429
エクセルのセル書式設定のようなのは無いよ。自作汁。

431:Now_loading...774KB
07/09/27 21:13:35 1lNoZk5Y
createEmptyMovieClipもattachMovieも
for文内で複数作ると最後の奴しか表示されないんですが、
これはなぜですか?


432:Now_loading...774KB
07/09/27 21:16:05 AktNaF/L
>>431
関数引数の深度が全部同じだからだろう。
同じ深度に存在できるMCは1つだけ。

433:Now_loading...774KB
07/09/27 21:44:50 1lNoZk5Y
>>432
解決しました。ありがとうございました。


434:Now_loading...774KB
07/09/28 00:44:31 Wb48mEx6
再び質問お願いします。

矩形ツールでムービークリップをつくり、
その1フレーム目にイベント(onRollOut,onRollOver)を記述してるんですが、
思うように動いてくれません。

画像をロードする前ならちゃんと記述したとおりに動いてる事はわかったんですが、
ロード後になるとイベントの関数も呼ばれてないようです。

マウスが上に行ったら画像を表示(_alpha = 100)し、マウスが離れたら非表示(_alpha=0)
としたいです。

よろしくお願いします。


435:Now_loading...774KB
07/09/28 00:52:05 Ndx6R9i0
>>434
矩形ツールによるMCと画像とのパスの関係は?
とりあえず、trace(This)などであちこちチェックしよう。

436:Now_loading...774KB
07/09/28 00:53:19 Ndx6R9i0
435です。訂正。
trace(this)です

437:Now_loading...774KB
07/09/28 00:55:16 /cBcPpAg
環境)OS:WinXP-Pro,Mem=1GB,ソフト:Flash8-Pro(Player7,AS2.0)

hitTest()のヒット先MC枠ついて質問です。

root上に2つの円形MC(en1, en2)があり、en1をドラッグさせ、en2の座標を使って
en2へのhitTest()をさせています。ASは、

on (rollOver) {
if (this.hitTest(_root.en2._x, _root.en2._y, true) == true) {
trace("en2塗り内の点にHit中");
}
}
※ on (press) と on (release) で、en2をstartDrag()とstopDrag()をする。

これは目的の通り動作したのですが、次に
if (this.hitTest(_root.en2._x, _root.en2._y, false) == true) として、en2の枠を対象に
hitTest()判定を試みましたが何の反応もありませんでした。変更部分のASは下の
通りです。
on (rollOver) {
if (this.hitTest(_root.en2._x, _root.en2._y, true) == true) {
trace("枠にHit中");
}
}

目的通りなら、「枠にHit中」と出る筈ですが何も出ません。
アドバイス願います。

438:437
07/09/28 00:59:10 /cBcPpAg
上記、訂正します。

下段の変更部分は、正しくは
on (rollOver) {
if (this.hitTest(_root.en2._x, _root.en2._y, false) == true) { //hitTestの第3引数は、true じゃなく false
trace("枠にHit中");
}
}

439:437再
07/09/28 01:10:05 /cBcPpAg
すみません。質問文中に他に細かい間違いがあるので、改めて質問します。
((以下の質問文でお願いします))

----------------------------------------------------
環境)OS:WinXP-Pro,Mem=1GB,ソフト:Flash8-Pro(Player7,AS2.0)

hitTest()のヒット先MC枠ついて質問です。

root上に2つの円形MC(en1, en2)があり、en1をドラッグさせ、en2の座標を使って
en2へのhitTest()をさせています。ASは、

on (rollOver) {
if (this.hitTest(_root.en2._x, _root.en2._y, true) == true) {
trace("en2塗り内の点にHit中");
}
}
※ on (press) と on (release) で、en1をstartDrag()とstopDrag()をする。

これは目的の通り動作したのですが、次に
if (this.hitTest(_root.en2._x, _root.en2._y, false) == true) として、en2の枠を対象に
hitTest()判定を試みましたが何の反応もありませんでした。変更部分のASは下の
通りです。
on (rollOver) {
if (this.hitTest(_root.en2._x, _root.en2._y, false) == true) {
trace("枠にHit中");
}
}

目的通りなら、「枠にHit中」と出る筈ですが何も出ません。
アドバイス願います。

440:Now_loading...774KB
07/09/28 07:08:28 lHJbwdHV
>439
枠って矩形?
this.hitTest(_root.en2);

円の重なりなら
URLリンク(hakuhin.hp.infoseek.co.jp)

441:434
07/09/28 14:36:18 Wb48mEx6
だめでした。
onPressイベントで画像のロードとtraceをやったんですが
画像ロード後にはonPressイベントが呼ばれません。


flash professional 8です。

442:Now_loading...774KB
07/09/28 15:21:26 xlWELBUc
>>441
画像読み込んだら基本的にフレームに書いてたスクリプトは無効になるよ。
読み込み完了後にあらためてイベントハンドラ設定しなおすか、
その矩形上でさらに画像読み込み用のMCか、createemptymovieclipで作ったMC用意して
そこに画像読み込めばいいんじゃないかな。

443:437再&439
07/09/28 15:48:06 UTLPObPc
>>440
そうです。矩形(境界ボックス)です。Flash8のヘルプを読み直すと

 shapeFlag: Boolean は、指定したインスタンスのシェイプ全体を評価するか (true)、
 境界ボックスだけを評価するか (false) を指定するブール値です。このパラメータは、
 x 座標と y 座標のパラメータでヒット領域を指定する場合にのみ指定できます。

ということなので、
if (this.hitTest(_root.en2._x, _root.en2._y, false) == true)
という判定には意味が無いようです。

つまり、このif文の記述は、en2の境界ボックスを判定基準に使っているので、実質
this.hitTest(_root.en2) と同じと考えてよろしいでしょうか?

444:Now_loading...774KB
07/09/28 17:46:13 lHJbwdHV
引用に座標でしか機能しないって書いてアンジャン

445:Now_loading...774KB
07/09/28 20:16:01 x25CWzzO
acl=2.5;
brk=1.5;

n=1;
rmt=100;

function copy(){
ball.duplicateMovieClip("ball"+n,n+10);

for(i=1;i<=n;i++){
this["xRnd"+i]=Math.random()*rmt-rmt/2;
this["yRnd"+i]=Math.random()*rmt-rmt/2;

this["xm"+i]=_xmouse+this["xRnd"+i];
this["ym"+i]=_ymouse+this["yRnd"+i];
}

this["ball"+n].onEnterFrame=function(){
this._x+=((this["xm"+n]-this._x)*acl)/brk;
this._y+=((this["ym"+n]-this._y)*acl)/brk;
}
n++;
}

st.onRelease=function(){
copy();
}

のonEnterFrame内のthis["xm"+n]とthis["ym"+n]にfor内のthis["xm"+i]とthis["ym"+i]を渡したいのですが、
onEnterFrame内でthis["xm"+n]をtraceするとundefinedが出ます。どうしたらいいでしょうか?

446:Now_loading...774KB
07/09/28 20:22:52 ybBbtSQv
酷いなこりゃ

447:Now_loading...774KB
07/09/28 20:24:27 x25CWzzO
>>446
どういった具合にひどいんでしょか?

448:Now_loading...774KB
07/09/28 20:53:35 1PbB8mYe
>>447
パスが違うんだろ。とりあえずtrace(this);

449:Now_loading...774KB
07/09/28 21:29:08 x25CWzzO
>>448
ball+iの変数にアクセスするのにはどう指定したらいいんでしょうか?

↓こんなんありえないですし…。
this["ball"+n]["xm"+n]

450:Now_loading...774KB
07/09/28 21:39:42 1PbB8mYe
>>449
おまえ、なんでレス無視して自分思考してるんだよ
レスする意味無いじゃん
traceしたのならその結果どう思うかとか書けよ

451:Now_loading...774KB
07/09/28 21:46:23 x25CWzzO
>>450
すみません。

onEnterFrame内のtrace(this)は_level0.ball1、
for内のtrace(this)は_level0、
ということでonEnterFrame内のthis["xm"+n]を_root["xm"+n]に変えてみたのですが
undefinedです。

もう少しヒントを…

452:Now_loading...774KB
07/09/28 22:07:17 SXV0X6Oy
>>445
ballをduplicateMovieClipして、それぞれにメソッドを割り当てたいの?なら、
ball.duplicateMovieClip("ball"+n,n+10);
を1回しかやってない以上、ムリだ。
同時に、thisの理解に不十分なところがある。むしろこっちがマズイ。
いま手元にflashがないので検証はできないが、次のを参考にしてみて。

var acl=2.5;
var brk=1.5;
var n=1; //何を表現したいのかを良く考えて、妥当な値にすること
var rmt=100;
function copy(){
for(i=1;i<=n;i++){
//thisにballというMCがあると仮定
this.ball.duplicateMovieClip("ball"+i,i+10);//「ball1」等の名称でデュプリケートする
var xRnd=Math.random()*rmt-rmt/2;
var yRnd=Math.random()*rmt-rmt/2;
this["ball"+i].xm=_xmouse+xRnd;
this["ball"+i].ym=_ymouse+yRnd;
this["ball"+i].onEnterFrame=function(){
this._x+=((this.xm-this._x)*acl)/brk;
this._y+=((this.ym-this._y)*acl)/brk;
}
}

このスクリプトでやりたいことが良く分らなかったから、n回のデュプリケートおよび
おのおののプロパティ、メソッドを定義する例を示したが、君のやりたいこととは
異なる可能性もあるので、そこは自力でやってほしい。
まずはthisの意味、とくにonEnterFrame内のthisとその外側のthisとの違いを、
もういちど勉強しなおしてみよう。

453:Now_loading...774KB
07/09/28 22:44:16 x25CWzzO
>>452
解決しました。
ありがとうございました。

454:Now_loading...774KB
07/09/28 23:00:48 SXV0X6Oy
>453
それはよかった。でも、なぜさっきのがダメで今のがいいのかという
理屈を理解しないと、また同じことをしようとしたときに行き詰まるから、
面倒がらずに勉強して欲しい。
あと、こういうことをやるので有れば、クラスというものを勉強して
そこで各MCの挙動を一気に定義した方が、のちに繋がると思う。

455:Now_loading...774KB
07/09/29 03:00:34 1NUzXdGg
URLリンク(www.s-grant.co.jp)ここのサイトの下部のように
DirectLink : を押すとtextフィールドのURLが選択されてコピーも自動でされている方法を
ご存知な方はおられませんか?

456:437再&439
07/09/29 04:23:29 VQczcND3
>>444
あっ、そうだった・・・・

457:Now_loading...774KB
07/09/29 04:37:05 hT9x5Zjr
>>455
System.setClipboard()
Selectionクラス

で可能。

458:Now_loading...774KB
07/09/29 11:54:01 BikqFSV8
onMouseDown()でクリックを感知するMCの上にボタンを配置する、という状況で、
そのボタンを押した時に onMouseDown() の処理をさせないようにするには
どうしたら良いでしょうか?

459:Now_loading...774KB
07/09/29 12:15:36 ck3NS+A7
>458
Button._enabled=false;

460:Now_loading...774KB
07/09/29 13:09:26 BikqFSV8
>>459
ありがとうございます。
ボタンを無効化ではなくて、ボタン領域内で、
下のMCのonMouseDown()を無効化させたいのですが、これは無理でしょうか?

461:Now_loading...774KB
07/09/29 13:40:37 BikqFSV8
460ですが自己解決しました。
ボタンのマウスオーバーを監視してフラグを立て、
onMouseDownでそのフラグを参照して分岐処理するようにしました。

462:Now_loading...774KB
07/09/29 18:22:42 teUbErkq
FLASH5です
loadMovieで外部ファイル(png)を読み込みたいのだけども読んでくれない。
試しに同階層のjpgで試した所問題無く読めたのですが、PNGってサポートしてない?
ちなみにプレビューでも特にエラーは吐き出されていない。

463:Now_loading...774KB
07/09/29 18:26:00 mmaP319h
>>462
Flash5では無理。確か8以降対応ではなかったかな

464:Now_loading...774KB
07/09/29 18:30:29 teUbErkq
>>463
そうかありがとう。
でも8以降って随分後回しな扱いなんだな。。

465:Now_loading...774KB
07/09/29 19:00:55 mmaP319h
>>464
そうだね。
PNGを読み込んだswfを作ってそれを読み込むことで代用できなくもないけど、どうかな。

466:Now_loading...774KB
07/09/29 19:24:58 teUbErkq
>>465
いいアイデアだけど
定期的に自鯖から自動生成されるpngを読込みたいので固定じゃないんだ。
convertコマンドで同時変換して読込む事にしたよ


467:Now_loading...774KB
07/09/29 19:32:07 Rixkm1ET
FLASH5って、、何年前のソフトだよwww
Flash5-->FlashMX-->FlashMX2004-->Flash8-->FlashCS3

468:Now_loading...774KB
07/09/29 19:46:18 teUbErkq
>>467
1. 古くて対応してない、困った
2. どうせ買うなら最新
3. 値段的に手が届かない or 踏ん切りがつかない
4. あ、少し工夫すればなんとかなるじゃん

以下1から繰り返し
でも流石に新しいのほしいお

469:Now_loading...774KB
07/09/29 21:12:55 x75dQQB8
MXでいいと思うよ

470:Now_loading...774KB
07/09/29 22:54:25 1NUzXdGg
>>457
遅くなりましたがどうもありがとうございました。

471:Now_loading...774KB
07/09/30 11:38:10 Uzv0anZG
質問です。環境はWIN2000, FlashMX2004Professionalです。

マルチウィンドウのRPGゲームを作ろうとしています。
その際、マウスではなくキーボードによる操作で行わせたいのですが:

・通常のフィールド移動なら、主人公を動かす(正確にはマップをスクロールさせる)
・コマンドウィンドウを開いたら、カーソルを動かし、ボタンで決定
・メッセージパネル表示中は、ボタンで次の文に進む
・戦闘中は、戦闘用のウィンドウからコマンド決定。メッセージ用パネルに実況文を表示。ボタンで次の文章を読む

などと言ったように、キーボード操作を受け付ける対象が頻繁に変わります。
またウィンドウやフィールド、メッセージパネルは、それぞれ「dialogue_mc」「fileldMap_mc」「message_mc」の中に
attachMovieClip()することで、管理しやすくしようとしています。

この切り替えを、Key.addListner(ウィンドウ、マップもしくはメッセージパネルのMC)で行なおうと思っていますが、
オブジェクト指向を考えて、ウィンドウ自体の操作とリスナーの切り替えは、分離しようと考えています。
しかし、それをどのように実現して良いのか、思いつきません。例えば、

1.各ウィンドウ等に、「決定ボタンを押したとき()」「カーソルキーを押したとき()」のメソッドと、「どのウィンドウ等
  から操作を受け渡されたのか」のプロパティを用意
2.初期設定では、「fieldMap_mc.マップ」がリスナーである
3.コマンド表示ボタンが押されると、「開くウィンドウ」「自分自身」を、_rootのリスナー管理用メソッドに渡す
4.リスナー管理用メソッドは、「開くウィンドウ」に示されたMCをattachMovieClip()しそれをあらたなリスナーとし、
  今までのリスナーを削除

とした場合、ウィンドウなどは別々の階層構造を持っているので、階層情報ごと「_root.リスナー管理用メソッド」に
渡さねばなりません。そうなるとウィンドウごとに対象ウィンドウの階層構造を既に持たなくてはいけなくなり、
ウィンドウとリスナー管理の分離が難しくなってしまいます。

こうした場合は、どのように管理するのが妥当でしょうか?

472:Now_loading...774KB
07/09/30 16:21:43 zkpY0an3
そんなもん普通にウィンドウごとにイベントハンドラメソッド作っとけよw
考えすぎのOOP中毒患者だな。お大事に。

473:Now_loading...774KB
07/09/30 20:03:10 fQQ1lFrp
>>471
もう一歩先の考え方を取り入れないとだめ。
状態遷移とか、タスクシステムとか。

474:Now_loading...774KB
07/09/30 20:04:01 Uzv0anZG
>472
実は最初はそう考えていたんですが、
その時に操作を受け付けたくないウィンドウ等(=操作対象)も
複数存在します(たとえば、マップにウィンドウを1枚重ねたとき等)
この場合でも、「カレントではない操作対象のイベントを無視する」
ようにしなくてはなりません。

そうなると、例えば「fieldMap_mc.マップ」から「dialogue_mc.コマンドウィンドウ」を
表示させる際、fieldMap_mc.マップ.イベントハンドラ=null」としたうえで
dialogue_mcに内にattachMovieClip()することになりますが、
このコマンドウィンドウは必ずしもマップから開かれるとは限らないため、
ここにイベントハンドラを記述すると、消したときの制御の戻し先が
1つに限定されてしまいます。
「開きもとによって、イベントハンドラ内でswitch等を使い処理を分岐させる」
ということも、のちのデバッグや仕様変更の妨げになるので避けたいところです。

以上のように煮詰まってしまい、Selectionクラスのようなフォーカスを管理する
クラスを使う方を考えたのです。なので逆に、ウィンドウごとに管理できれば
それで他の操作対象との分離は果たせると思いますので、うまい方法をご存じの
肩がいれば、教えていただきたいと思います。

475:471
07/09/30 20:16:01 Uzv0anZG
(>474も>471です)

>473
わかりました、取り急ぎそのキーワードで検索してみます。
ありがとうございました。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch