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

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   コーダーズルーム【スクリプト系】
     性格判断コンテンツ
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
Itchy
Åê¹ÆNo.25117
投稿日時: 2006-4-24 22:05
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash 8
性格判断コンテンツ
環境は、winXP、Flash8です。
コンテンツの内容としては、4択(A?D)の質問が10問あり、1?5問までの結果と、6?10問までの結果の組み合わせでそれぞれ診断結果がでるという内容のものです。例えば4択の内、A4点B3点C2点D1点とし、1?5問まの合計が、○○点?○○点は結果A、6?10問までの合計が結果Bとし、診断結果ボタンを押すとそのAとBの組み合わせで診断されるといった仕組みです。

結果A、結果Bはそれぞれ4種類あり、最終的な診断は16通りあるといった感じです。

こういったことは、Flashだけで可能なのでしょうか?


どなたか、親切な方レクチャーしてください。
よろしくお願いいたします。
ひろゆき
Åê¹ÆNo.25120
投稿日時: 2006-4-24 22:56
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 性格判断コンテンツ
マルチポストは感心しませんが。
http://www.gac.jp/article/index.php?stats=question&id=17716&command=msg
http://www.gac.jp/article/index.php?stats=info&book=about_post

hitTest後の処理

引用:
Itchyさんは書きました:
こういったことは、Flashだけで可能なのでしょうか?

可能だと思いますが、
診断結果のデータなどをどこに持たせるのかにも依るのではないでしょうか?


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

Itchy
Åê¹ÆNo.25121
投稿日時: 2006-4-24 23:17
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash 8
Re: 性格判断コンテンツ
すみません。切羽詰ってるもので、複数書き込んでしまいました。気をつけます。

結果表示の場所としては、質問のムービークリップとは別のムービークリップをつくり、そのタイムラインに並べようかと思ってるのですが・・・。最終的に診断ボタンを押すと、結果を参照して、結果MCの○フレームに飛ぶようなつくりになるのかなと想像してます。
ひろゆき
Åê¹ÆNo.25122
投稿日時: 2006-4-24 23:37
ちょんまげら
居住地: 東京砂漠
投稿: 4403
使用環境:
10.8.5

Flash Professional CS4/CS6/CC

Safari 6.1
Re: 性格判断コンテンツ
引用:
すみません。切羽詰ってるもので、複数書き込んでしまいました。気をつけます。

真・コンピュータ用語辞典 : マルチポストは申し訳なかったと思いますが、それほど急ぎで解決したいことなのです。

http://www.gac.jp/article/index.php?stats=info&book=about_post
にもあるように、誠実な対応をお願いいたします。

引用:
どなたか、親切な方レクチャーしてください。

ご質問の主旨がコンテンツ制作の丸投げでないのであれば、
段階を踏んで進めていく必要があるように思います。

まず、最初の関門となるのは4択の処理だと思いますが、
これはラジオボタンを使用するのでしょうか?

であれば「ラジオボタン」でフォーラム内を検索してみましょう
#「すべて表示」で、たくさん表示されます。
#コンポーネントを使用するか、
#自作のラジオボタンを作ることになると思いますが。

引用:
診断結果のデータなどをどこに持たせるのかにも依るのではないでしょうか?
引用:
結果表示の場所としては、質問のムービークリップとは別のムービークリップをつくり、そのタイムラインに並べようかと思ってるのですが・・・。最終的に診断ボタンを押すと、結果を参照して、結果MCの○フレームに飛ぶようなつくりになるのかなと想像してます。

結果をどこに表示するのかの前に、
診断結果のデータをどこに持たせるのかをお訊きしたのですが...。

尋ね方を変えます。
診断結果のデータは外部テキストなどにはされないわけですね?


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

野中文雄
Åê¹ÆNo.25123
投稿日時: 2006-4-24 23:49
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 性格判断コンテンツ
「感じ」とか「想像」でなく、できるところまでご自分で実際につくってご覧になるべきでしょう。「切羽詰ってる」ならなおさらです。

ただし、完全なものを作成する必要はありません。A2点、B1点の2択で計2問、合計(最低2点から最高4点まで)が3点以上か3点未満かでふたつの診断結果のうちひとつを表示するムービーをつくってみてください。問題など要りませんし、診断結果はどちらが表示されているか区別できれば、○や□を描いただけで結構です。

どこまでおできになり、何がおわかりになりませんか?
引用:
Itchyさんは書きました:
結果A、結果Bはそれぞれ4種類あり、最終的な診断は16通りあるといった感じです。

引用:
Itchyさんは書きました:
結果表示の場所としては、質問のムービークリップとは別のムービークリップをつくり、そのタイムラインに並べようかと思ってるのですが・・・。最終的に診断ボタンを押すと、結果を参照して、結果MCの○フレームに飛ぶようなつくりになるのかなと想像してます。


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

Itchy
Åê¹ÆNo.25124
投稿日時: 2006-4-24 23:51
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash 8
Re: 性格判断コンテンツ
色々ご指導ありがとうございます。
もう一方の掲示板にも誠実に対応したいと思います。

こんな状況で、質問も恐縮ですが・・・
自作のラジオボタンで行こうと思っています。
質問MCの中に、A?Dまでの項目MCを作り
そこに、

this.onRollOver=function(){
this.gotoAndStop(2);
}

this.onRollOut=this.onReleaseOutside=function(){
this.gotoAndStop(1);
}

this.onRelease=function(){
pointA += 4;
this.gotoAndStop(3);

}

のように作っております。
ポイントを追加するのは、こちら側でいいのでしょうか?

条件分岐する、スクリプト内にまとめるのがよいのでしょうか?

Itchy
Åê¹ÆNo.25128
投稿日時: 2006-4-25 8:55
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash 8
Re: 性格判断コンテンツ
何とか自分で下記のように、制作してみましたが、うまく実装しません。(ポイントがうまく加算されてないようです・・・)

診断コンテンツをmainContentsというMCにまとめ、その中のタイムラインに、
_global.ans_A1 == "";
_global.ans_B1 == "";
_global.ans_C1 == "";
_global.ans_D1 == "";
_global.ans_A2 == "";
_global.ans_B2 == "";
_global.ans_C2 == "";
_global.ans_D2 == "";
_global.diaA == ""; //1?5問目までの結果
_global.diaB == ""; //6?10問目までの結果
_global.m01==""; //1?5問目までの結果1
_global.m02==""; //1?5問目までの結果2
_global.m03==""; //1?5問目までの結果3
_global.m04==""; //1?5問目までの結果4
_global.s01==""; //6?10問目までの結果1
_global.s02==""; //6?10問目までの結果2
_global.s03==""; //6?10問目までの結果3
_global.s04==""; //6?10問目までの結果4

とグローバル変数をたてました。

次に、result_controller01、result_controller02、result_controller03を配置し、そのMCに順に

1?5問目までのポイント
onClipEvent (load) {

this.hPoint01 = function() {
var pointA = 0;
trace(_global.ans_A1);
trace(_global.ans_B1);
trace(_global.ans_C1);
trace(_global.ans_D1);

if (_global.ans_A1 == "yes") {
pointA += 4;
}
if (_global.ans_B1 == "yes") {
pointA += 3;
}
if (_global.ans_C1 == "yes") {
pointA += 2;
}
if (_global.ans_D1 == "yes") {
pointA += 1;
}

if(17<=pointA && pointA<=20){
_global.diaA = _global.m01;

}
if(13<=pointA && pointA<=16){
_global.diaA = _global.m02;

}
if(9<=pointA && pointA<=12){
_global.diaA = _global.m03;

}
if(5<=pointA && pointA<=8){
_global.diaA = _global.m04;

}

trace(pointA);
};

}
-----------------------------
6?10問目までのポイント
onClipEvent (load) {

this.hPoint02 = function() {
var pointB = 0;
trace(_global.ans_A2);
trace(_global.ans_B2);
trace(_global.ans_C2);
trace(_global.ans_D2);

if (_global.ans_A2 == "yes") {
pointB += 4;
}
if (_global.ans_B2 == "yes") {
pointB += 3;
}
if (_global.ans_C2 == "yes") {
pointB += 2;
}
if (_global.ans_D2 == "yes") {
pointB += 1;
}

if(17<=pointB && pointB<=20){
_global.diaB = _global.s01;

}
if(13<=pointB && pointB<=16){
_global.diaB = _global.s02;

}
if(9<=pointB && pointB<=12){
_global.diaB = _global.s03;

}
if(5<=pointB && pointB<=8){
_global.diaB = _global.s04;

}

trace(pointB);
};

}

-------------------------------
上記2つの結果組み合わせ
this.hPoint03 = function() {

if(_global.diaA==_global.m01 && _global.diaB==_global.s01){
_root.mainContents.mcResult.gotoAndPlay("resA;");
}
if(_global.diaA==_global.m01 && _global.diaB==_global.s02){
_root.mainContents.mcResult.gotoAndPlay("resB;");
}
if(_global.diaA==_global.m02 && _global.diaB==_global.s01){
_root.mainContents.mcResult.gotoAndPlay("resB;");
}
if(_global.diaA==_global.m02 && _global.diaB==_global.s02){
_root.mainContents.mcResult.gotoAndPlay("resB;");
}
if(_global.diaA==_global.m01 && _global.diaB==_global.s03){
_root.mainContents.mcResult.gotoAndPlay("resC;");
}
if(_global.diaA==_global.m02 && _global.diaB==_global.s03){
_root.mainContents.mcResult.gotoAndPlay("resC");
}
if(_global.diaA==_global.m01 && _global.diaB==_global.s04){
_root.mainContents.mcResult.gotoAndPlay("resD;");
}
if(_global.diaA==_global.m02 && _global.diaB==_global.s04){
_root.mainContents.mcResult.gotoAndPlay("resD;");
}
if(_global.diaA==_global.m03 && _global.diaB==_global.s01){
_root.mainContents.mcResult.gotoAndPlay("resE;");
}
if(_global.diaA==_global.m03 && _global.diaB==_global.s02){
_root.mainContents.mcResult.gotoAndPlay("resE;");
}
if(_global.diaA==_global.m03 && _global.diaB==_global.s03){
_root.mainContents.mcResult.gotoAndPlay("resF;");
}
if(_global.diaA==_global.m03 && _global.diaB==_global.s04){
_root.mainContents.mcResult.gotoAndPlay("resG;");
}
if(_global.diaA==_global.m04 && _global.diaB==_global.s01){
_root.mainContents.mcResult.gotoAndPlay("resH;");
}
if(_global.diaA==_global.m04 && _global.diaB==_global.s02){
_root.mainContents.mcResult.gotoAndPlay("resH;");
}
if(_global.diaA==_global.m04 && _global.diaB==_global.s03){
_root.mainContents.mcResult.gotoAndPlay("resI;");
}
if(_global.diaA==_global.m04 && _global.diaB==_global.s04){
_root.mainContents.mcResult.gotoAndPlay("resJ");
} else {
_root.mainContents.mcResult.gotoAndPlay("resT");
}

};

}
--------------------------------------
さらに、質問MC1?10のなかの選択肢A?DボタンMCに

1?5問目
this.stop();
this.onRollOver=function(){
this.gotoAndStop(2);
}

this.onRollOut=this.onReleaseOutside=function(){
this.gotoAndStop(1);
}

this.onRelease=function(){
_global.ans_A1 = "yes";
this.gotoAndStop(3);

}

6?10問目
this.stop();
this.onRollOver=function(){
this.gotoAndStop(2);
}

this.onRollOut=this.onReleaseOutside=function(){
this.gotoAndStop(1);
}

this.onRelease=function(){
_global.ans_B2 = "yes";
this.gotoAndStop(3);

}

のように、A?Dまで、記述。

最後に、診断結果表示ボタンに

on (release) {
_root.mainContents.result_controller03.hPoint03();
}

と記述しました。これをクリックすると、結果MCの
は表示されるのですが、同じフレームにしか、飛びませんでした。ポイント加算か、最後の条件分岐に問題があると思うのですが・・・。いまいち分かりません。

長々となり分かりづらいと思いますが、よろしくお願いいたします。
野中文雄
Åê¹ÆNo.25132
投稿日時: 2006-4-25 12:42
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 性格判断コンテンツ
回答者やスレッドを読む方にとって「長々となり分かりづらい」だけでなく、ご自分自身でどこから手をつけてよいかわからないのではありませんか?まず何より先に、問題の切分けと絞込みをすべきだと思われます。

また、スクリプトをただ掲示するだけでなく、必ずその説明も添えてください。それを考えた場合も、スクリプトを丸ごと示したのでは、説明すること自体苦労になってしまうでしょう。→【スクリプトを見てください
引用:
ひろゆきさんは書きました:
ご質問の主旨がコンテンツ制作の丸投げでないのであれば、
段階を踏んで進めていく必要があるように思います。

引用:
野中文雄は書きました:
ただし、完全なものを作成する必要はありません。A2点、B1点の2択で計2問、合計(最低2点から最高4点まで)が3点以上か3点未満かでふたつの診断結果のうちひとつを表示するムービーをつくってみてください。問題など要りませんし、診断結果はどちらが表示されているか区別できれば、○や□を描いただけで結構です。

どこまでおできになり、何がおわかりになりませんか?

引用:
Itchyさんは書きました:
...[前略]...
と記述しました。これをクリックすると、結果MCの
は表示されるのですが、同じフレームにしか、飛びませんでした。ポイント加算か、最後の条件分岐に問題があると思うのですが・・・。いまいち分かりません。

長々となり分かりづらいと思いますが、よろしくお願いいたします。

問題を解決して正しい処理を理解するには、4択10問必要はないでしょうし、16とおりもの診断結果はかえって理解を妨げます。ボタンについても(これがButtonインスタンスなのかMovieClipインスタンスなのかはわかりませんが)、ロールオーバーやロールアウト時の動作は、やはり問題のポイントに関わりがないものと推測します。

理科の実験と同じく、余分な要素はできるかぎり省いて、最小限のムービーで検討されることをお勧めします。


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

Itchy
Åê¹ÆNo.25135
投稿日時: 2006-4-25 14:58
新米
居住地:
投稿: 14
使用環境:
WinXP,Flash 8
Re: 性格判断コンテンツ
おっしゃるとおりですね。申し訳ございません。
野中さんが言うように、2択の質問を計4問で考えてみました。度々恐縮ですが、よろしくお願いいたします。

1問、2問 ---resultA
3問、4問 ---resultB

2択のボタンAは2点
2択のボタンBは1点とし、
点数が3点以上の時、resultA及びBは、それぞれm01、s01
点数が3点未満の時、resultA及びBは、それぞれm02、s02とします。この結果、mとsの組み合わせで最終結果を表示するようにしました。(計4通り)
概要としては、このようになります。

制作方法としましては、まず、メインのタイムラインに
_global.ans_A1 == ""; //2択のボタンを押したかどうかの判定
_global.ans_B1 == ""; //2択のボタンを押したかどうかの判定
_global.ans_A2 == ""; //2択のボタンを押したかどうかの判定
_global.ans_B2 == ""; //2択のボタンを押したかどうかの判定
_global.resultA == ""; //1、2問目の結果
_global.resultB == ""; //3、4問目の結果
_global.m01== ""; //1、2問目の結果01
_global.m02== ""; //3、4問目の結果02
_global.s01== ""; //3、4問目の結果01
_global.s02== ""; //3、4問目の結果02

このようなグローバル変数を立てました。

次に、インスタンス名 result_controller01のMCに
resultAの条件を下記のように
onClipEvent (load) {

this.getPoint01 = function() {
var pointA = 0;
trace(_global.ans_A1);
trace(_global.ans_B1);

if (_global.ans_A1 == "yes") {
pointA += 2;
}
if (_global.ans_B1 == "yes") {
pointA += 1;
}

if(3<=pointA){
_global.resultA = _global.m01;

}
if(pointA<=2){
_global.resultA = _global.m02;

}

};

}


次に、インスタンス名 result_controller02のMCに
resultBの条件を上記と同様に記述してます。

最終的な組み合わせをresult_controller03のMCに
下記のように

onClipEvent (load) {

this.getPoint03 = function() {
if(_global.resultA == _global.m01 && _global.resultB == _global.s01){
_root.resMC.gotoAndPlay("A");
}
if(_global.resultA == _global.m01 && _global.resultB == _global.s02){
_root.resMC.gotoAndPlay("B");
}
if( _global.resultA == _global.m02 && _global.resultB == _global.s01){
_root.resMC.gotoAndPlay("C");
}
if( _global.resultA == _global.m02 && _global.resultB == _global.s02){
_root.resMC.gotoAndPlay("D");
}
};

}

最終的に診断結果を表示するボタンインスタンスには
on (release) {
_root.result_controller03.getPoint03();
}

と書き、組み合わせの結果を参照してます。

現在の状況としては、結果表示のMCは出るのですが
指定のフレームに飛ばない状況です。

やはり、ポイントが加算されてないのではと思うのですが、条件式を3つに分けてる過程で引き継がれていないのでしょうか?

ご教授お願いいたします。









野中文雄
Åê¹ÆNo.25138
投稿日時: 2006-4-25 15:39
ちょんまげら
居住地: 東京
投稿: 4531
使用環境:
CS5.5 .6.8 Vista Home Premium (SP1)
Re: 性格判断コンテンツ
気づいた点から、順につぶしていきます。

まず、以下のスクリプトで「グローバル変数」は設定されていません。新規のムービーにこのフレームアクションだけを記述して、[ムービープレビュー]で[デバッグ] > [変数のリストアップ]を行っても、グローバル変数はひとつも表示されないと思います。

等価演算子==は、両辺の比較を行うだけです。値を設定する場合には、代入演算子=を用います。もっとも、この処理は意味がないものの、必ずしも不具合の原因ではないかもしれません。
引用:
Itchyさんは書きました:
制作方法としましては、まず、メインのタイムラインに
_global.ans_A1 == ""; //2択のボタンを押したかどうかの判定
_global.ans_B1 == ""; //2択のボタンを押したかどうかの判定
_global.ans_A2 == ""; //2択のボタンを押したかどうかの判定
_global.ans_B2 == ""; //2択のボタンを押したかどうかの判定
_global.resultA == ""; //1、2問目の結果
_global.resultB == ""; //3、4問目の結果
_global.m01== ""; //1、2問目の結果01
_global.m02== ""; //3、4問目の結果02
_global.s01== ""; //3、4問目の結果01
_global.s02== ""; //3、4問目の結果02

このようなグローバル変数を立てました。

「指定のフレームに飛ばない」というのは、インスタンスresult_controller03のMovieClipアクションに定義した関数(function)getPoint03()の動作が意図どおりでないという意味だと推測します。
引用:
現在の状況としては、結果表示のMCは出るのですが
指定のフレームに飛ばない状況です。

「条件式を3つに分けてる」といわれるのが、どの処理を指すのかわかりかねます。いずれにしても、if条件で判定対象となっている値を確認することから始めるのがよいでしょう。
引用:
やはり、ポイントが加算されてないのではと思うのですが、条件式を3つに分けてる過程で引き継がれていないのでしょうか?

onClipEvent (load) {
	this.getPoint03 = function() {
		trace(_global.resultA);
		trace(_global.resultB);
		trace(_global.m01);
		trace(_global.m02);
		trace(_global.s01);
		trace(_global.s02);
		if (_global.resultA == _global.m01 && _global.resultB == _global.s01) {
			trace("A");
			_root.resMC.gotoAndPlay("A");
		}
		if (_global.resultA == _global.m01 && _global.resultB == _global.s02) {
			trace("B");
			_root.resMC.gotoAndPlay("B");
		}
		if (_global.resultA == _global.m02 && _global.resultB == _global.s01) {
			trace("C");
			_root.resMC.gotoAndPlay("C");
		}
		if (_global.resultA == _global.m02 && _global.resultB == _global.s02) {
			trace("D");
			_root.resMC.gotoAndPlay("D");
		}
	};
}


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

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

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