アプリ版:「スタンプのみでお礼する」機能のリリースについて

以前、http://oshiete1.goo.ne.jp/qa4121602.htmlで質問した者です

回答で教えて頂き、
ゲットした4つの玉(アイテム)を壁の穴に当てはめる
という動作が見事出来ました
同じ色の玉がいくつも表示されるエラーも無い状態です

しかし、『壁にはめた玉の順番が、正解なら脱出。。!』というアクションスプリクト

on(release){} もしくは,
○○.onRelease = function(){}; もしくは,
onClipEvent(mouseUp){} もしくは,
○○.onMouseUp = function() {}.

を使って、具体的にどのように書けばよいのか分かりません

何か、解釈を間違ったまま動作が出来ているような気もします
ややこしい質問ですいません。
分かる方いらっしゃいましたらお願いいたします(_)


現在、玉のMCを4つずつ(aka1~4、ao1~4、kiiro1~4、midori1~4)、壁の穴MCを4つ作り
「玉レイヤー」と「壁の穴レイヤー」を階層に分け、下記のアクションスプリクトを個々に入れています

・玉のムービークリップ

on (release) {
_root.aka1._visible=false;
_root.item1._alpha = 100;
_root.komento = "赤い玉をはずした";
itemNum = false;}

・壁の穴ムービークリップ

on (release) {
//変数itemで選択されているアイコンを判定
if (_root.item == "about1") {
//アイコンの選択枠をはずす
_root.item.gotoAndStop("nomal");
//アイコンにアルファをかけて使用済みに
_root.item1._alpha = 20;
//赤い玉1が表示されているとき、その他の赤玉は非表示にする
aka1._visible=true;
aka2._visible=false;
aka3._visible=false;
aka4._visible=false;
//コメントの表示
_root.komento = "赤い玉をはめた";
//アイテムの番号をクリア
_root.itemNum = false;}

else if (_root.item == "about2") {
//アイコンの選択枠をはずす
_root.item.gotoAndStop("nomal");
//アイコンにアルファをかけて使用済みに
_root.item2._alpha = 20;
//青い玉1が表示されているとき、その他の青玉は非表示にする
ao1._visible=true;
ao2._visible=false;
ao3._visible=false;
ao4._visible=false;
//コメントの表示
_root.komento = "青い玉をはめた";
//アイテムの番号をクリア
_root.itemNum = false;}

else if (_root.item == "about3") {
//アイコンの選択枠をはずす
_root.item.gotoAndStop("nomal");
//アイコンにアルファをかけて使用済みに
_root.item3._alpha = 20;
//黄色の玉1が表示されているとき、その他の黄色玉は非表示にする
kiiro1._visible=true;
kiiro2._visible=false;
kiiro3._visible=false;
kiiro4._visible=false;
//コメントの表示
_root.komento = "黄色の玉をはめた";
//アイテムの番号をクリア
_root.itemNum = false;}

else if (_root.item == "about4") {
//アイコンの選択枠をはずす
_root.item.gotoAndStop("nomal");
//アイコンにアルファをかけて使用済みに
_root.item4._alpha = 20;
//緑の玉1が表示されているとき、その他の緑玉は非表示にする
midori1._visible=true;
midori2._visible=false;
midori3._visible=false;
midori4._visible=false;
//コメントの表示
_root.komento = "緑の玉をはめた";
//アイテムの番号をクリア
_root.itemNum = false;}
else {_root.komento = "丸い穴があいている\nなにかはめるのかな?";}
}

A 回答 (1件)

3時間くらい唸って考えましたし,


わかる範囲内で同様のようなものを作成したみましたが,
結局何を書かれていらっしゃるのかさっぱり理解できませんでした。
ムービーの構造どころかルールさえわかりません。


>ゲットした4つの玉(アイテム)を壁の穴に当てはめる
>という動作が見事出来ました

スクリプトを見る上では,「穴にあてはめる」=「その穴に順に置いた玉が順次移動する」という部分は全くみつかりません。移動はぜんぜんしていないように見えますよ。


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

玉のムービークリップのスクリプトの最後の行,
> itemNum = false;}
これは
_root.itemNum = false;}
の間違いではないでしょうか?

また
書かれていらっしゃる玉のスクリプトはおそらく,
「aka1」に書かれたものだと思いますが,
1つしか例がないので,
「aka2」ではどこをどのように変えるのか,
また
「ao1」ではどこをどのように変えるのか,
という規則性がいまひとつわかりません。

一応 「aka2」 は次のようになるのではないかとは推測しました。

on (release) {
_root.aka2._visible = false;
_root.item2._alpha = 100;
_root.komento = "赤い玉をはずした";
_root.itemNum = false;
}

「ao1」 は次のようになるのではないかとは推測しました。

on (release) {
_root.ao1._visible = false;
_root.item1._alpha = 100;
_root.komento = "青い玉をはずした";
_root.itemNum = false;
}

一応推測はしましたが,
実際はどう変えるべきなのかわかりません。



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

最難関が ,

if (_root.item == "about1")

など _root.item です。
_root.item にどこで about1 という値を代入しているのでしょうか?
わかりません。

また,アイコン(item?) などというものも突如出没していて,
玉 と 穴 と アイコン(item?) の関係がぜんぜんつかめません。



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

根本的に,もっとわからないのは,
4個の穴に玉を当てはめるのに,なぜ玉が16個もあるかです。
16個あるにしても,
「赤」「青」「黄」「緑」「紫」「茶」「橙」…のように全く違う玉があるのなら理解ができます。
しかし4個で済むところを同じ色の玉を4つずつ用意している意味がわかりません。

たとえば
「赤」「青」「黄」「緑」 という順が正解であるとする場合,
「aka1」「ao4」「kiiro4」「midori3」 でも
「aka2」「ao1」「kiiro2」「midori2」 でも,
「aka4」「ao4」「kiiro1」「midori1」 でも,
  …   …   略  …  …
これら全てが正解なのでしょうか?

もしそうだとするなら,
それらすべてが正解であるという判定をしなければなりませんよ。
だからそこを工夫する必要があると思います。



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

あと気になった点を少し。

例えば 「ao1」「ao2」「ao3」「ao4」と連続でクリックした場合,
現状では「青」が全部消えてしまいますよ。
これでいいのでしょうか?


>「玉レイヤー」と「壁の穴レイヤー」を階層に分け

スクリプトを見る限り階層に分けているようには見えませんよ。
階層とはオブジェクトの階層構造のことを指します。
Flashの場合はムービークリップが1つの階層です。
ムービークリップの中にムービークリップを入れたりした場合に,
親階層とか子階層とか言います。
_root がそもそも1つの階層です。

「玉レイヤー」と「壁の穴レイヤー」の階層分けを本当にすると次のようにするということです(例)。

 _root
  ├玉用ムービークリップ
  │  ├aka1
  │  ├aka2
  │  ├aka3
  │   …略…
  │  └midori4
  └穴用ムービークリップ
     ├穴1ムービークリップ
     ├穴2ムービークリップ
     ├穴3ムービークリップ
     └穴4ムービークリップ



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

★結局★

自分の中で日本語で明白にルールがあればそれをコーディングすれば良いだけです。
この日本語↑とは純粋日本語ではなくインスタンス名などの固有名称は含む意味での日本語です。

ご質問の文やスクリプトからは,
「何がどうなれば良いのか(何がどうなればゲームクリアなのか)」 がさっぱりわからないので,
こちらも根掘り葉掘りと細部を聞いているだけです。

補足してくださっても,
結局わからない可能性が多いので,その場合補足説明する労力は無駄になりますが,
それでもかまわない場合は,補足説明してください。

一番良いのは,
上で私が書いた様々な疑問に1つずつ答えてくださってもかまいませんが,
それより 「何がどうなったときゲームクリアなのか」 を補足説明していただく方が良いです。

「何がどうなったときゲームクリアなのか」 をご自分の中で明白にすると,
補足説明するまでもなく,ひょっとしたら自己解決するかもしれませんよ。



☆ちなみに☆

私が http://oshiete1.goo.ne.jp/qa4121602.html で書いたのは,
_root の上レイヤーに玉ムービークリップ「aka」「ao」「kiiro」「midori」 があったとして,
_root の下レイヤーに穴ムービークリップ「ana1」「ana2」「ana3」「ana4」があったとして,
 「ana1 に aka が入る」
  「ana2 に ao が入る」
   「ana3 に kiiro が入る」
    「ana4 に midori が入る」
これが正解の順序であるとした場合,
次のようにすればいいのではないかというような意味です。

------------------------------------
// このムービークリップ(またはボタン)を放したとき
on (release) {
// 赤が穴1と接触 なおかつ 青が穴2と接触 なおかつ
// 黄が穴3と接触 なおかつ 緑が穴4と接触 していたら
if (_root.aka.hitTest(_root.ana1)
&& _root.ao.hitTest(_root.ana2)
&& _root.kiiro.hitTest(_root.ana3)
&& _root.midori.hitTest(_root.ana4)) {
// 完了!を出力(実際は何か他の動作を書く)
trace("完了!");
}
}
------------------------------------

 // このムービークリップ(またはボタン)を放したとき

の 「このムービークリップ」 とは,
「ana1」「ana2」「ana3」「ana4」でも良いですし,
「aka」「ao」「kiiro」「midori」 でも良いです。
何でも良いのです。

穴をクリックして玉を持ってくる形式でしたら,各穴に書くことになると思います。

各玉に
-------------------------
// このムービークリップを押したとき
on (press) {
// ドラッグ開始
this.startDrag();
}
// このムービークリップを放したとき
on (release, releaseOutside) {
// ドラッグ終了
this.stopDrag();
}
-------------------------
のように書いて,
穴に玉をドラック移動させる形式でしたら,
 // ドラッグ終了
 this.stopDrag();
のあとくらいに if文 を書くことになると思います。

また,穴でも玉でもない別の「判定!」ボタンなどを作成して,
そこに hitTest 判定文を書いても良いでしょう。

そういう単純な意味です。

この回答への補足

先ほど自己解決しました!!

else ifを使うのではなく、on(release)を新たに書いてHitTest文を追記することで、無事エンディング画面に飛びました
4つの玉をXYを使って移動させる動作も出来ています

丁寧に教えていただいたおかげです(・∀・)
ありがとうございました!

補足日時:2008/07/02 21:30
    • good
    • 0
この回答へのお礼

BlurFiltanさま

回答ありがとうございます

回答を頂いてからいじってみましたが、HitTestを入れてのスプリクトでも同じ玉が何個も表示されるエラーもなくなりました
(質問のアクションスプリクトはHitTestなしで作ったものです)

ゲームクリアは
たとえば左から順に赤・青・黄・緑と玉を入れると正解(正解の並び順番はひとつ)で
「エンディング画面へ飛ぶ」gotoAndPlay("ending")にしたいのですが、教えていただいた、


------------------------------------
// このムービークリップ(またはボタン)を放したとき
on (release) {
// 赤が穴1と接触 なおかつ 青が穴2と接触 なおかつ
// 黄が穴3と接触 なおかつ 緑が穴4と接触 していたら
if (_root.aka.hitTest(_root.ana1)
&& _root.ao.hitTest(_root.ana2)
&& _root.kiiro.hitTest(_root.ana3)
&& _root.midori.hitTest(_root.ana4)) {
// 完了!を出力(実際は何か他の動作を書く)
trace("完了!");
}
}
------------------------------------


を少し変更して、else ifとgotoAndPlay("ending")を使い、ana(1~4)に書き加えてみたのですが
エンディングに飛びませんでした。。

根本的に、玉が16個あるのもおかしいと思いつつ作っていましたが
玉のムービークリップを4つ複製すると、4つ同時に表示されたり、
ana1をクリック後ana2をクリックするとどちらにも表示されるなど、エラーになってしまいます

一つの玉ムービークリップを


●○○○
 
 ↓
○●○○

このように移動させる簡単な方法があるのでしょうか?
X・Yを使うのはなんとなく分かるのですが、
どのように書けばよいでしょうか?


また、itemは画面右の小さいアイコンで
aboutは、itemの詳細画面のことです

お時間とらせてしまいすいません(;;)

お礼日時:2008/06/26 09:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!