質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

2613閲覧

カードをシャッフルして表示した時、描画順がおかしい

Kuronekoya

総合スコア26

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2016/03/18 04:58

初めまして。
現在unity、C#で7並べを作っています。
動的にカードを生成し、シャッフルして配り、そしてそれを手札として並べた時、並べることはできるのですが、描画順が数字の大きいカードが一番上にきてしまいます。そこで、プレイヤー毎に配ったカードを大きい順に並び替えてから並べようとしたのですがどうも上手くいきません。

カードを配るメソッドを抜き出してソースを書かせていただきます。

//カードの枚数
private const int CardNumber_X = 13;
private const int CardNumber_Y = 4;
//プレイヤー
private List<Player> mGamePlayer = new List<Player>();
//手札を保持させる
Cards[,] mPlayerCard = new Cards[CardNumber_X, CardNumber_Y];
//

//カードを配る
private void PhaseDeal()
{
//プレイヤーを初期化
int playerIndex = 0;
//カードを配る
for (int i = 0; i < CardNumber_X; ++i)
{
for (int j = 0; j < CardNumber_Y; ++j)
{
mGamePlayer [playerIndex].SetCard (mPlayerCard[i, j]);
playerIndex++;
playerIndex %= PlayerNum;
}
}

//プレイヤー毎に手札を、数字の大きい順に並び変える。
for (int l = 0; l < mGamePlayer.Count; ++l) {
switch (l) {
case 0:
for (int y = 0; y < CardNumber_Y; ++y) {
for (int x = 0; x < CardNumber_X; ++x) {
for (int j = x - 1; j > x; --j) {
if (mPlayerCard [x - 1, y].GetNumber () < mPlayerCard [x, y].GetNumber ()) {
Cards d = mPlayerCard [x - 1, y];
mPlayerCard [x - 1, y] = mPlayerCard [x, y];
mPlayerCard [x, y] = d;
}
}
}
}
break;
case 1:
for (int y = 0; y < CardNumber_Y; ++y) {
for (int x = 0; x < CardNumber_X; ++x) {
for (int j = x - 1; j > x; --j) {
if (mPlayerCard [x - 1, y].GetNumber () < mPlayerCard [x, y].GetNumber ()) {
Cards d = mPlayerCard [x - 1, y];
mPlayerCard [x - 1, y] = mPlayerCard [x, y];
mPlayerCard [x, y] = d;
}
}
}
}
break;

//プレイヤー毎に手札を並べる

public void LineUpCard()
{
switch (mPlayerIndex)
{
case 0:
for (int i = 0; i < mCard.Count; ++i)
{
mCard [i].GetComponent<RectTransform> ().localPosition = new Vector3 (-354 + i * 23f, -240, 0f);
}
break;
case 1:
for (int i = 0; i < mCard.Count; ++i)
{
mCard [i].GetComponent<RectTransform> ().localPosition = new Vector3 (354 + i * -23f, 251, 0f);
}
break;
}
}

質問するのも初めてで、わかりにくいと思います。すみません…。
何卒よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

CardNumber_Xがカードの数字で
CardNumber_Yがカードのスートということでよろしいでしょうか?

7並べということですべてのカードを2人に配ってるはずだと思いますが、
並べ替えている時に012までと03まで見てると何か変な気がするのですが合ってますでしょうか。
mGamePlayer [playerIndex].SetCard (mPlayerCard[i, j]);
でどのような形でmGamePlayerに自分の持っているカードを保持しているのか分からないので、
クラスCardsとメソッドSetCardあたりを教えていただけるともう少しわかるかと思います。

C#

1for (int y = 0; y < CardNumber_Y; ++y) 2{ 3 for (int x = 0; x < CardNumber_X; ++x) 4 { 5 for (int j = x - 1; j > x; --j) 6 { 7 if (mPlayerCard[x - 1, y].GetNumber() < mPlayerCard[x, y].GetNumber()) 8 { 9 Cards d = mPlayerCard[x - 1, y]; 10 mPlayerCard[x - 1, y] = mPlayerCard[x, y]; 11 mPlayerCard[x, y] = d; 12 } 13 } 14 } 15}

投稿2016/03/18 06:11

pinnkoro

総合スコア66

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kuronekoya

2016/03/18 15:32

申し訳ありません!説明不足でした…!! CardNumber_Xはカードの数字が13枚、CardNumber_Yはカードのマークが4種類、ということで書かせていただいていました。 一応配る、ということには成功しているようでして…すみません、能力不足のせいか、どこがおかしいかが判断つかず…! 色々試した結果、なんとか今回の問題は解決することができました。説明下手な質問に、親切に答えてくださって本当にありがとうございました。 次回からまた質問する時は、pinnkoro様のアドバイスを参考にもう少し詳しく説明できるよう努力いたします。 どうもありがとうございました!
guest

0

ベストアンサー

ここだけでは分かりにくいですが、Vector3でzは0固定のようですから
zが視界の深度に当たる感じの配置なんでしょうか?
そうなら表示したい順番にzの値を調整してみてはどうでしょうか。
もし3Dではなく2Dで(Spriteとか)扱っているのなら Depth 値を調整する
事で表示の前後関係を調整するという事も可能だと思います.

投稿2016/03/18 05:43

HiroshiWatanabe

総合スコア2160

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kuronekoya

2016/03/18 15:35

素早いご回答、本当にありがとうございます! HiroshiWatanabe様のご回答を参考に色々試してみたところ、少し時間はかかったのですが解決いたしました! 2DのSpriteを使っておりました。Depth値を調整、とのことでしたので transformのSetSiblingIndex を設定することで描画順が上手く機能いたしました! 本当にありがとうございます。 拙い質問にもかかわらず親切に教えていただき、本当にありがとうございました!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問