もう22時か、
2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50 [PR]女性必見!ネットで高収入バイト[PR]  
レス数が950を超えています。1000を超えると表示できなくなるよ。

ActionScript 3.0 とか絶対ムリwww

1 :Now_loading...774KB:2006/07/02(日) 20:40:24 ID:8PWGvCYq
俺は「多少のプログラム知識があるデザイナー」だ。

以後AS3も使えるようにしといて、ってお前・・・


俺はプログラマーじゃねぇよヽ(`Д´)ノウワーン
PGの専門学校とか出てねぇよヽ(`Д´)ノウワーン
デスマーチなんて嫌だヽ(`Д´)ノウワーン

389 :Now_loading...774KB:2008/02/04(月) 12:55:44 ID:kOvlkYmb
カーソルキーの↑と→とかのキーの同時押し検出がわからねえ

↓KEY_DOWNでキーコードを判定する方法だと無理?
stage.addEventListener ( KeyboardEvent.KEY_DOWN, メソッド );

↓キーを個別にリスナー登録できないのか?
stage.addEventListener ( KeyboardEvent.Keyboard.RIGHT, メソッド );

390 :Now_loading...774KB:2008/02/04(月) 13:47:09 ID:7CXsj2JR
>>389
それなー。
俺は、isDown使えなくなったから、別に4方向のフラグ用意して、その値で判断するようにした。

stage.addEventListener(KeyboardEvent.KEY_DOWN, moveMe);
stage.addEventListener(KeyboardEvent.KEY_UP, moveMe);
//押してる方向用のフラグ
var moveFlg:uint=0;
//方向に対応したフラグ用の値を用意してる(1:0001 2:0010 3:0100 4:1000)
var keyList:Array = [];
keyList[Keyboard.LEFT]=1;
keyList[Keyboard.RIGHT]=2;
keyList[Keyboard.UP]=4;
keyList[Keyboard.DOWN]=8;

//長いので次に続く

391 :Now_loading...774KB:2008/02/04(月) 13:48:50 ID:7CXsj2JR
function moveMe(e){
//用意してた値だったらフラグ変更。イベントのtype調べて、keyDowならOR演算、keyUpだったらXOR演算
if(keyList[e.keyCode]){
moveFlg = (e.type==KeyboardEvent.KEY_DOWN) ? moveFlg |= keyList[e.keyCode] :moveFlg ^= keyList[e.keyCode];
}
//値を判定
switch(moveFlg){
case 1 + 0 + 0 + 0:trace("左");break;case 1 + 0 + 4 + 0:trace("左上");break;
case 1 + 0 + 0 + 8:trace("左下");break;case 0 + 2 + 0 + 0:trace("右");break;
case 0 + 2 + 4 + 0:trace("右上");break;case 0 + 2 + 0 + 8:trace("右下");break;
case 0 + 0 + 4 + 0:trace("上");break;case 0 + 0 + 0 + 8:trace("下");break;
}
}

行数対策で汚くなってるがすまん。自動フォーマットとかして見てくれ。

392 :Now_loading...774KB:2008/02/04(月) 13:56:04 ID:7CXsj2JR
でもあまり綺麗ではないんだよなー。
みんなどうしてんだろなこれ。

393 :389:2008/02/04(月) 15:32:32 ID:N0X6ZIMk
>>390
先生どうもっす! フラグ使ってなんとかできました

フレームアニメについても教えて下さい!
AS1,2では問題無く動いたのにAS3では動かないっす
症状: 毎フレームgotoAndStopをさせたら 指定先のMC内のフレームが動かない(歩行アニメしない)

//tg というMCの中に 各方向を向いた人間キャラがいて ラベルによって分けている
//例:"1a"上を向いて静止  "3b"右を向いて歩行(歩行アニメ)
if ( キー入力取得 ){//入力あったら
var lv :String =Ho+"b";//ラベル名(歩行アニメ)
tg.gotoAndStop( lv );//各ラベルへ(キーを押し続けると毎フレーム処理される)
}

1      5      10      15     20     25      30
-------------------------------------------------------
○1a    ○1b    ○2a    ○2b    ○3a    ○3b //ラベル名
●静止mc ●歩行mc ●静止mc ●歩行mc ●静止mc ●歩行mc

この説明でわかるかな…orz

394 :389:2008/02/04(月) 15:43:45 ID:N0X6ZIMk
あー AS3の仕様だと割り切るしかないのか
変数で1回受けて毎フレーム処理させない方法でトライしてみるす

395 :Now_loading...774KB:2008/02/04(月) 15:45:16 ID:7noFYcEi
>>390
それが普通にベターなやり方だと思う。

個人的にちょっと気になった点は、keyUpは素直にANDとNOTを使って
moveFlg &= ~keyList[e.keyCode]; にした方がいいかも。
例えば、リスナ登録処理時にキー押しっぱ状態のままだったりするとその後、
キーを離してフラグセット、キーを押すとフラグクリアになってしまう可能性アリ。

あと判定もswitchじゃなくてif-elseの方がいい気がする。
const RU:uint = keyList[Keyboard.RIGHT] & keyList[Keyboard.UP];//変数名は適当
if((moveFlg & RU) == RU){trace("右上");}else… みたいな感じで。
>>391だと、キーが3つ以上同時に押されている状態になると反応しなくなってしまう。

何か間違ってたらスマソ。

396 :Now_loading...774KB:2008/02/04(月) 17:16:49 ID:7CXsj2JR
>>395
>リスナ登録処理時にキー押しっぱ
あー、それあるね。治した方がいいなこれは

>キーが3つ以上同時に押されている状態
ありえるかどうか、許可するかどうかは別として、if-elseのメリットがちょっとわからない。
これは分岐増やせばどっちでもいいんじゃね?
4キーに4ビットだからどうにでもできるし。
判定用の定数使った方が読みやすいってのはわかった。

397 :Now_loading...774KB:2008/02/04(月) 18:57:23 ID:ORqtseW9
Flex2を今勉強中なんだけど、あまりクラス使わないで、関数をばっかり書く感じでいいの?

398 :Now_loading...774KB:2008/02/04(月) 20:16:46 ID:NPROsH6g
AS3って、removeEventListener()でリスナー解除したイベントは
ガベージコレクションから解放されてるの?



399 :Now_loading...774KB:2008/02/04(月) 21:36:50 ID:bfNp6xG4
>>390
AS2のようなisDownがほしいなら次のようにすればいい。

private var keyArray:Array = new Array(256);

private function keyDown(e:KeyboardEvent):void{ keyArray[e.keyCode] = true; }
private function keyUp(e:KeyboardEvent):void{ keyArray[e.keyCode] = false; }
public function isDown(keyCode:uint):Boolean { return keyArray[keyCode]; }

stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown);
stage.addEventListener(KeyboardEvent.KEY_UP, keyUp);

こうしておけば、カーソルキーだけじゃなく他のキーコードすべてにも対応できる。

400 :Now_loading...774KB:2008/02/04(月) 23:18:34 ID:Is9rN0nL
>>396
さっき始めて知ったんだけど、ASのcaseのラベルって定数式に限らず任意の式が書けるんだね。
switchはある程度単純な条件判定に制限されてしまうから〜とか言いたかったんだけど、
ASではif-elseでもswitchでもそれぞれの好み次第でどっちも使えるね。

でも、組み合わせが少ないとはいえ、余計な分岐を増やしたりするくらいなら
if-elseで普通に書いた方がいい気もするけど…。

401 :Now_loading...774KB:2008/02/05(火) 02:17:56 ID:qOWuHBO+
>>399
フォーカスが無いときのアップ/ダウンイベントの取得が出来ないので、
isDownのエミュレートとしては不完全程遠い。

402 :399:2008/02/05(火) 22:12:26 ID:SZWMV0lb
>>401
なるほど。そこまでは考えてなかったです。
改善策を考えてみました。

private function keysClear(e:Event):void { keyArray = new Array(256); }
stage.addEventListener(Event.DEACTIVATE, keysClear);

でもこの方法だと、
HTMLでwmodeをopaqueかtransparentにしてブラウザで読み込むと、deactivateイベントが発生しない……。

403 :s:2008/02/07(木) 07:48:25 ID:dDgLt1l9
どうーーーしても addChildしたMCをremoveChildする時点で
指定した DisplayObject は呼び出し元の子でなければなりません。
のエラーが消えません。

hitTestPoint内での条件分岐
if(btnA.hitTestPoint(mouseX,mouseY,true)){addChild(btnB);}else {removeChild(btnB);}

は、根本的に使い方が間違ってるのでしょうか?
ここのスレ>147とか、AS3でのStageについての仕様の変更についてのサイトとか探しまくってるんですけど、根本的にこういう使い方する事自体が間違ってるのでしょうか?

404 :Now_loading...774KB:2008/02/07(木) 08:45:56 ID:I2q9+WvJ
>>403

addChildしそこねてる状態でremoveChildしたか、
addChildしてないMCでremoveChildしてるんじゃない?

removeChildの直線で、 btnB.parent をトレースして親を確認してみるといいと思う

405 :Now_loading...774KB:2008/02/07(木) 09:09:33 ID:kDq4+Zan
if(contains(btnB))
removeChild(btnB);

406 :s:2008/02/07(木) 14:28:47 ID:dDgLt1l9
できた。。。。。
if(contains(btnB))
removeChild(btnB);

で、できた。。。。。感動。。。。
ありがとうございました!!!

329 KB [ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]

取りに行ったけどなかった。次は一時間後に取りに行くです。
新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.0.7.8 2008/11/13 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)