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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   ActionScript 3.0 特設会議室
     構造体の初期化パラメータ
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
flamming
Åê¹ÆNo.46445
投稿日時: 2010-11-27 12:55
新米
居住地:
投稿: 27
使用環境:
Win7
Flash CS5.5
Flash Develop

<p6370jp> Core i5モデル(AX692AA-AAAA)
オペレーティングシステム Windows® 7 Home Premium 正規版 (32bit) ※1
プロセッサー 名称(機能 ※ 2) インテル® Core™ i5 -650 プロセッサー
(3.2GHz、TB時...
構造体の初期化パラメータ
下記のように、ID名および各パラメータにてインスタンスを生成するfunctionを作りました。
ですが、colについて引数の初期パラメータの設定ができませんでした。(コンパイルが通りません)

if(col == null)col = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);の1行を書かなくても済むよう、
col:ColorTransform = null
の部分に初期化パラメータをつける方法はありますでしょうか?

public function AttMC(id:String, _x:Number, _y:Number, _xscl:Number = 1, _yscl:Number = 1, col:ColorTransform = null) :MovieClip {
if(col == null)col = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);
var cls:Class = getDefinitionByName(id) as Class;
var mc = new cls();
mc.x = _x;
mc.y = _y;
mc.scaleX = _xscl;
mc.scaleY = _yscl;
mc.transform.colorTransform = col;
return mc;
}
野中文雄
Åê¹ÆNo.46446
投稿日時: 2010-11-27 13:45
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 構造体の初期化パラメータ
まず、スクリプトには、必ず処理内容のご説明をお書添えください。もしかすると、他の部分は疑問とは関係ないから、説明は不要と思われたのかもしれません。でしたら無精をせず、関係ない部分は除いたスクリプトをお示しください。→【スクリプトを見てください

ご質問の意味はよくわかりませんが、つぎのような関数定義をしたいということでしたら、できません。
AttMC();
function AttMC(col:ColorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0)):void {
	trace(col);
}

引用:
flammingさんは書きました:
if(col == null)col = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);の1行を書かなくても済むよう、
col:ColorTransform = null
の部分に初期化パラメータをつける方法はありますでしょうか?
public function AttMC(id:String, _x:Number, _y:Number, _xscl:Number = 1, _yscl:Number = 1, 
	col:ColorTransform = null) :MovieClip {
	if(col == null)col = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);
	// ...[後略]...


----------------
 

flamming
Åê¹ÆNo.46447
投稿日時: 2010-11-27 15:05
新米
居住地:
投稿: 27
使用環境:
Win7
Flash CS5.5
Flash Develop

<p6370jp> Core i5モデル(AX692AA-AAAA)
オペレーティングシステム Windows® 7 Home Premium 正規版 (32bit) ※1
プロセッサー 名称(機能 ※ 2) インテル® Core™ i5 -650 プロセッサー
(3.2GHz、TB時...
Re: 構造体の初期化パラメータ
構造体を初期化パラメータに設定することは出来ないんですね。
思っていた通りの回答をいただくことができました。

newを用いず、[]や{}だけでも無理ということでよろしいでしょうか?


無精をしてしまい、申し訳ありませんでした。
今後は要点を絞ったスクリプト、説明を意識します。

番外編もすごくためになりました。
ご勧告、ご回答、ありがとうございました。
ひろゆき
Åê¹ÆNo.46448
投稿日時: 2010-11-27 15:08
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 構造体の初期化パラメータ
引用:
flammingさんは書きました:
if(col == null)col = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);の1行を書かなくても済むよう、

なぜ、この1行を回避したいのか、その目的などを記された方が良いように思いますが。

if文を嫌ってのことであれば、こんな方法もありますね。
package {

	import flash.display.Sprite;
	import flash.geom.ColorTransform;

	public class Main extends Sprite {
		private var default_trans:ColorTransform = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);

		public function Main() {
			init();
		}

		private function init():void {
			trace(colorize());
			trace(colorize(new ColorTransform(2, 2, 2, 2, 0, 0, 0, 0)));
		}
		public function colorize(trans:ColorTransform = null):ColorTransform {
			var colorTrans:ColorTransform = trans || default_trans;
			return colorTrans;
		}

	}

}
論理和演算子


----------------
質問する際は、回答者に具体的な情報を与えてください。

ひろゆき
Åê¹ÆNo.46449
投稿日時: 2010-11-27 15:15
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 構造体の初期化パラメータ
引用:
flammingさんは書きました:

newを用いず、[]や{}だけでも無理ということでよろしいでしょうか?

試してみれば、済むことでは?
package {

	import flash.display.Sprite;

	public class Main extends Sprite {

		public function Main() {
			init();
		}

		private function init():void {
			trace(getList());
			trace(getList([1, 2]));
		}
		public function getList(list:Array = [0, 0]):Array {
			return list;
		}

	}

}


package {

	import flash.display.Sprite;

	public class Main extends Sprite {
		private var defalut_list:Array = [0, 0];

		public function Main() {
			init();
		}

		private function init():void {
			trace(getList());
			trace(getList([1, 2]));
		}
		public function getList(_list:Array = null):Array {
			var list:Array = _list || defalut_list;
			return list.concat();
		}

	}

}


----------------
質問する際は、回答者に具体的な情報を与えてください。

野中文雄
Åê¹ÆNo.46451
投稿日時: 2010-11-27 18:15
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 構造体の初期化パラメータ
スクリプトを書くときも、妙な手抜きを考えるより、理屈で理解されるよう努めた方がよさそうに思います。

[1]「[]や{}」を記述してつくられるインスタンスのデータ型は何ですか。それが、ColorTransform型の引数に設定できるとしたら、文法として正しい結果といえますか。

[2]あるいは、Array([])やObject({})のように、ColorTransformクラスにもインスタンスを生成する特別な演算子(括弧)がないかということでしょうか。

だとすると、すべてのクラスがそれぞれに特別な演算子(括弧)をもっていると想像されたのですか。ラテン文字に、それほどまで括弧の種類が豊富とは思えませんが。

[3]もしかすると、つぎのような感じでColorTransformインスタンスの生成ができるのではないかと想像されたのでしょうか。
var col:ColorTransform = [1, 1, 1, 1, 0, 0, 0, 0];

個人的には、あまり好ましいとは感じられません。
var col:ColorTransform;
// ...[数十行後]...
col = [1, 1, 1, 1, 0, 0, 0, 0];  // colのデータ型はArray?

[4]現在の仕様の方が、より確実な処理もできます。
AttMC();
AttMC(null);
AttMC(new ColorTransform());
function AttMC(col:ColorTransform = null):void {
	if (!(col is ColorTransform)) {
		col = new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0);
	}
	trace(col);
}

引用:
flammingさんは書きました:
newを用いず、[]や{}だけでも無理ということでよろしいでしょうか?


----------------
 

flamming
Åê¹ÆNo.46459
投稿日時: 2010-11-28 10:56
新米
居住地:
投稿: 27
使用環境:
Win7
Flash CS5.5
Flash Develop

<p6370jp> Core i5モデル(AX692AA-AAAA)
オペレーティングシステム Windows® 7 Home Premium 正規版 (32bit) ※1
プロセッサー 名称(機能 ※ 2) インテル® Core™ i5 -650 プロセッサー
(3.2GHz、TB時...
Re: 構造体の初期化パラメータ
ひろゆき様
他の要素は初期化パラメータによって初期化されているのに、構造体だけは出来ないのかという疑問からくるものでした。
もちろん、[]や{}、特に{}に対してはそれぞれ「{redMultiplier:0…(略)}」というように記述して試してみました。
できませんでしが…。
||論理和などがあるんですね。三項演算子をよく使用するのでこちらも活用すればよりスマートに書くことができそうですね。
ぜひ使わせていただきます。

野中様
上記のとおりでございます。
加えて、AttMCというfunctionを高頻度で使用しており、
引数に毎度new ColorTransform(1, 1, 1, 1, 0, 0, 0, 0)を記述することで
ソースが長くなってしまうことを避けられればと思っていました。
ひろゆきさんの仰るようにデフォルトプロパティを設定しておけば済む話だったのですが、
引数の初期値に入れることばかりに固執して頭が回りませんでした。

>スクリプトを書くときも、妙な手抜きを考えるより、理屈で理解されるよう努めた方がよさそうに思います。
仰るとおりです。偶発で乗り切れたとしても後で困るだけです。
可読性およびステップ数削減のどちらを重視するかに悩まされていますが、プログラムにも個人の性格が現れると肝に銘じ、理解の下に丁寧なスクリプティングを心がけたいと思います。

お二人ともありがとうございました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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