トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     キーボードアクションと連動してオブジェクトを変化させたい
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Sasakichi
Åê¹ÆNo.48375
投稿日時: 2011-12-6 21:10
新米
居住地: 岡山県岡山市南区
投稿: 9
使用環境:
Windows XP,Vista

Flash 4J
Flash MX
Flash Professional 8
Flash CS4
Flash CS5.5
Flash CS6
Re: キーボードアクションと連動してオブジェクトを変化させたい
まず,スクリプトからですが,
function A1 の閉じ括弧 (または if の閉じ括弧)が1つ抜けています。
最後は } } } になる必要があります。


if (U_cnt <= 4) {
			this["U_mc" + U_cnt] = new U_mc();
			this["U_mc" + U_cnt].x = 50 + U_cnt * 100;
			this["U_mc" + U_cnt].y = 200;
			this.addChild(this["U_mc" + U_cnt]);
			U_cnt++;
		}
	}
}




それと「Enterキー」は「ムービープレビュー」時などでは
それ自体が「意味を持つキー」です。

もし 「ムービープレビュー」などで検証されているのでしたら
「制御」→「ムービープレビュー」の後,
その「ムービープレビュー」の画面で
「制御」→「キーボードショートカットを無効」にチェックを入れる必要があります。



※最初の閉じ括弧の件はパブリッシュに失敗してエラーが出るので,すぐに気付きませんでしょうか?

※2つ目の件に関しても,もしパブリッシュしたFlashをブラウザ閲覧などで検証していれば問題がクリアされることがわかると思いますが。

つまり「自分で色々してみる」=「自己体験」=「自己実験」が足りなすぎます。
論理だけで考えるのではなく自分でやってみなければ身に付きません。
実践することこそがスキルと結び付くのです。
(「先を案じているばかりで,実践もせずに,質問している暇があるのなら,自分でやってみれば良いじゃん。」 的なことが多すぎるように思います。)
ina_k
Åê¹ÆNo.48376
投稿日時: 2011-12-6 21:42
新米
居住地:
投稿: 8
使用環境:
Re: キーボードアクションと連動してオブジェクトを変化させたい
あまりに親切に教えてくださるため,
完全に甘えきってしまっていました。
度々申し訳ありません。

エラーが出てきていたことには気づいていましたが,
どういう意味か深く考えずに質問していました。
また,パブリッシュしたFlashを閲覧する方法も
存在を知りませんでした。

次回,投稿させていただく際は
しっかりと自分で検証するなど気をつけます。

重ね重ね申し訳ありません。
ina_k
Åê¹ÆNo.48377
投稿日時: 2011-12-6 21:54
新米
居住地:
投稿: 8
使用環境:
Re: キーボードアクションと連動してオブジェクトを変化させたい
重ねての投稿失礼いたします。
ご指摘頂いた“}”の抜けを修正したところ,
無事に動作いたしました。

また,Enterキーではなく,
UPキーにすることで,こちらも無事に動作いたしました。
ありがとうございます。
ina_k
Åê¹ÆNo.48479
投稿日時: 2011-12-26 22:32
新米
居住地:
投稿: 8
使用環境:
Re: キーボードアクションと連動してオブジェクトを変化させたい
改めて失礼致します。

前回,ご教授頂いたものからさらに命令を加えたいと思い,
書き込ませていただきました。

今回はオブジェクトが一定数を越したとき,
オブジェクト数を0にリセットしたいと考えています。

下記のものが現在の状況です。
http://firestorage.jp/download/6f22cc4a591997d4851173212bd7757ff44c0109

よろしくお願いいたします。
Sasakichi
Åê¹ÆNo.48480
投稿日時: 2011-12-27 9:31
新米
居住地: 岡山県岡山市南区
投稿: 9
使用環境:
Windows XP,Vista

Flash 4J
Flash MX
Flash Professional 8
Flash CS4
Flash CS5.5
Flash CS6
Re: キーボードアクションと連動してオブジェクトを変化させたい
こんな感じになると思います↓。


//カウンタを用意
var R_cnt:int = 0;
var L_cnt:int = 0;
var U_cnt:int = 0;
var D_cnt:int = 0; //←この例では不要
var S_cnt:int = 0; //←この例では不要

//最大個数の設定(仮に5つまで)
var Max_cnt:int = 5;

//キーを押したときに関数「A1」を実行
stage.addEventListener(KeyboardEvent.KEY_DOWN,A1);

//関数「A1」の定義
function A1(event:KeyboardEvent):void {
	if (event.keyCode == Keyboard.RIGHT) {
		if (R_cnt < Max_cnt) {
			this["R_mc" + R_cnt] = new R_mc();
			this["R_mc" + R_cnt].x = 50 + R_cnt * 300;
			this["R_mc" + R_cnt].y = 200;
			this.addChild(this["R_mc" + R_cnt]);
			R_cnt++;
		} else {
			//並べたものを消す
			for (var i:int = 0; i < Max_cnt; i++) {
				this.removeChild(this["R_mc" + i]);
				this["R_mc" + i] = null;
			}
			//カウンタを0に戻す
			R_cnt = 0;
		}
	} else if (event.keyCode == Keyboard.LEFT) {
		if (L_cnt < Max_cnt) {
			this["L_mc" + L_cnt] = new L_mc();
			this["L_mc" + L_cnt].x = 50 + L_cnt * 300;
			this["L_mc" + L_cnt].y = 500;
			this.addChild(this["L_mc" + L_cnt]);
			L_cnt++;
		} else {
			//並べたものを消す
			for (i = 0; i < Max_cnt; i++) {
				this.removeChild(this["L_mc" + i]);
				this["L_mc" + i] = null;
			}
			//カウンタを0に戻す
			L_cnt = 0;
		}
	} else if (event.keyCode == Keyboard.UP) {
		if (U_cnt < Max_cnt) {
			this["U_mc" + U_cnt] = new U_mc();
			this["U_mc" + U_cnt].x = 50 + U_cnt * 300;
			this["U_mc" + U_cnt].y = 800;
			this.addChild(this["U_mc" + U_cnt]);
			U_cnt++;
		} else {
			//並べたものを消す
			for (i = 0; i < Max_cnt; i++) {
				this.removeChild(this["U_mc" + i]);
				this["U_mc" + i] = null;
			}
			//カウンタを0に戻す
			U_cnt = 0;
		}
	}
}
Sasakichi
Åê¹ÆNo.48483
投稿日時: 2011-12-27 10:36
新米
居住地: 岡山県岡山市南区
投稿: 9
使用環境:
Windows XP,Vista

Flash 4J
Flash MX
Flash Professional 8
Flash CS4
Flash CS5.5
Flash CS6
Re: キーボードアクションと連動してオブジェクトを変化させたい
先ほどの No.48480 Sasakichiですが。
No.48480 のスクリプトは長くて同じ記述の繰り返しになっていますね。
無駄が多い感じがします。

No.48480 の動作自体はそれで良しとした場合
スクリプトは次のように書き替えても良いかもしれません。
(動作は No.48480 と同じです。書き方の問題です。)


//カウンタを用意
var R_cnt:int = 0;
var L_cnt:int = 0;
var U_cnt:int = 0;
var D_cnt:int = 0;//←この例では不要
var S_cnt:int = 0;//←この例では不要

//最大個数の設定(仮に5つまで)
var Max_cnt:int = 5;

//キーを押したときに関数「A1」を実行
stage.addEventListener(KeyboardEvent.KEY_DOWN,A1);

//関数「A1」の定義
function A1(event:KeyboardEvent):void {
	if (event.keyCode == Keyboard.RIGHT) {
		//関数「makeRectangle」を実行(MC名,カウンタ名,y座標)
		makeRectangle("R_mc","R_cnt",200);
	} else if (event.keyCode == Keyboard.LEFT) {
		makeRectangle("L_mc","L_cnt",500);
	} else if (event.keyCode == Keyboard.UP) {
		makeRectangle("U_mc","U_cnt",800);
	}
}

//関数「makeRectangle」の定義
function makeRectangle(name_str:String,cnt_str:String,mc_y:Number):void {
	if (this[cnt_str] < Max_cnt) {
		var tmpClass:Class = Class(getDefinitionByName(name_str));
		this[name_str + this[cnt_str]] = new tmpClass();
		this[name_str + this[cnt_str]].x = 50 + this[cnt_str] * 300;
		this[name_str + this[cnt_str]].y = mc_y;
		this.addChild(this[name_str + this[cnt_str]]);
		this[cnt_str]++;
	} else {
		//並べたものを消す
		for (var i:int = 0; i < Max_cnt; i++) {
			this.removeChild(this[name_str + i]);
			this[name_str + i] = null;
		}
		//カウンタを0に戻す
		this[cnt_str] = 0;
	}
}
« 1 (2)
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops