先日はこちらの掲示板でお世話になりました。
現在、フルーツをタッチして消していくパズルゲームを考えております。
過去にタッチ(なぞるでもOK)した3種類のパネルを記憶し
同じフルーツだったら消えるといった処理を書こうとしております。
しかし現在のソースでは同じフルーツでなくても消えてしまいます。
又、Fruit[0][0].ptnと同じものをタッチすると消えてしまいます。
どうにか修正したいのですが上手くいきません。
宜しければソースを見ては頂けないでしょうか?
static int TouchTbl[3][2];に過去のタッチしたもの3つずつのセル座標が入っております。
環境:ObjectiveC、C++、OpenGL ES2.0
パズルゲームの消える処理
Re:パズルゲームの消える処理
実行環境が無いのでソース読んだだけですが、
>同じフルーツでなくても消えてしまいます。
これはよく分からないですが、if( !System.touch.Flag ){ とやっている部分、これが false の間は常に InitTouchTbl() が呼ばれることになると思うのですけれども、それは関係していたりしないでしょうか。
あと、ループ中で if( System.touch.Flag && !Fruit[j].TouchFlag ){ とやって PushTouchTbl をしていますが、これだと1回のループ中で PushTouchTbl(x,y) が何度も呼ばれてしまうことになります。これはループの外で処理するべきですね。
>Fruit[0][0].ptnと同じものをタッチすると消えてしまいます。
これは TouchTbl に現在いくつ座標が設定されているかの情報を持っていないからではないでしょうか。
TouchTbl の各データが 0 に初期化されている状態で、PushTouchTbl(0,0) と呼び出しても TouchTbl の中身は全く変化せず、全部のデータが同じかどうか判断する行で true になってしまいます。
int TouchTblSize とか適当に作っておいて、PushTouchTbl されるたびに TouchTblSize をインクリメントして、TouchTblSize が 3 になっていて全部のデータが同じだった場合だけ処理するようにすればいいのではないでしょうか。
イメージとしてはこんな感じですかね。当然動かしてないので間違ってる可能性もあります。
ただこれだと1回目と2回目で異なるのを選択しても、3つ目を選択するまでは選択が解除されないと思うので、その辺は適当に工夫してください。
>同じフルーツでなくても消えてしまいます。
これはよく分からないですが、if( !System.touch.Flag ){ とやっている部分、これが false の間は常に InitTouchTbl() が呼ばれることになると思うのですけれども、それは関係していたりしないでしょうか。
あと、ループ中で if( System.touch.Flag && !Fruit[j].TouchFlag ){ とやって PushTouchTbl をしていますが、これだと1回のループ中で PushTouchTbl(x,y) が何度も呼ばれてしまうことになります。これはループの外で処理するべきですね。
>Fruit[0][0].ptnと同じものをタッチすると消えてしまいます。
これは TouchTbl に現在いくつ座標が設定されているかの情報を持っていないからではないでしょうか。
TouchTbl の各データが 0 に初期化されている状態で、PushTouchTbl(0,0) と呼び出しても TouchTbl の中身は全く変化せず、全部のデータが同じかどうか判断する行で true になってしまいます。
int TouchTblSize とか適当に作っておいて、PushTouchTbl されるたびに TouchTblSize をインクリメントして、TouchTblSize が 3 になっていて全部のデータが同じだった場合だけ処理するようにすればいいのではないでしょうか。
イメージとしてはこんな感じですかね。当然動かしてないので間違ってる可能性もあります。
void InitTouchTbl(void){ ... TouchTblSize = 0; } int PushTouchTbl( int cx, int cy ){ ... TouchTblSize++; } ... // この処理はループの外に出すこと if (System.touch.Flag) { int x = ...; int y = ...; if (!Fruit[y][x].TouchFlag){ PushTouchTbl(x, y); if (TouchTblSize >= 3) { if (Fruit[TouchTbl[0][1]][TouchTbl[0][0]].Ptn == Fruit[TouchTbl[1][1]][TouchTbl[1][0]].Ptn && Fruit[TouchTbl[1][1]][TouchTbl[1][0]].Ptn == Fruit[TouchTbl[2][1]][TouchTbl[2][0]].Ptn) { ... } Fruit[TouchTbl[0][1]][TouchTbl[0][0]].TouchFlag = false; Fruit[TouchTbl[0][1]][TouchTbl[0][0]].Rot = 0; // ... TouchTbl[1,2] も同様な処理を行う InitTouchTbl(); } } }
ただこれだと1回目と2回目で異なるのを選択しても、3つ目を選択するまでは選択が解除されないと思うので、その辺は適当に工夫してください。
Re:パズルゲームの消える処理
> readyさん
トピックを立てるごとに新しいお名前を使わず同じ名前で統一して頂けると幸いです。
また、回答して下さった方に一言添えてトピックを閉じてから新しいトピックを立てて頂きますようお願いします。
トピックを立てるごとに新しいお名前を使わず同じ名前で統一して頂けると幸いです。
また、回答して下さった方に一言添えてトピックを閉じてから新しいトピックを立てて頂きますようお願いします。